This repository has been archived on 2024-12-11. You can view files and clone it, but cannot push or open issues or pull requests.
PyBitmessage-2024-12-11/src/debug.py
Gergely Imreh 2d6d3d68f6 set log level from config file
Read the log level settings from the "loglevel" value in the
"bitmessagesettings" section of the config file. The possible
values map directly to the ones allowed by the logger module:
DEBUG, INFO, WARNING, ERROR, CRITICAL
Only allow these values, and cast to upper case to be more easy
going in the settings.
2015-06-02 23:37:00 +08:00

94 lines
3.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# -*- coding: utf-8 -*-
'''
Logging and debuging facility
=============================
Levels:
DEBUG Detailed information, typically of interest only when diagnosing problems.
INFO Confirmation that things are working as expected.
WARNING An indication that something unexpected happened, or indicative of some problem in the
near future (e.g. disk space low). The software is still working as expected.
ERROR Due to a more serious problem, the software has not been able to perform some function.
CRITICAL A serious error, indicating that the program itself may be unable to continue running.
There are three loggers: `console_only`, `file_only` and `both`.
Use: `from debug import logger` to import this facility into whatever module you wish to log messages from.
Logging is thread-safe so you don't have to worry about locks, just import and log.
'''
import logging
import logging.config
import shared
import sys
import helper_startup
helper_startup.loadConfig()
# TODO(xj9): Get from a config file.
possible_log_levels = ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL']
config_log_level = shared.config.get('bitmessagesettings', 'loglevel').upper()
log_level = config_log_level if config_log_level in possible_log_levels else 'DEBUG'
def configureLogging():
logging.config.dictConfig({
'version': 1,
'formatters': {
'default': {
'format': '%(asctime)s - %(levelname)s - %(message)s',
},
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'default',
'level': log_level,
'stream': 'ext://sys.stdout'
},
'file': {
'class': 'logging.handlers.RotatingFileHandler',
'formatter': 'default',
'level': log_level,
'filename': shared.appdata + 'debug.log',
'maxBytes': 2097152, # 2 MiB
'backupCount': 1,
}
},
'loggers': {
'console_only': {
'handlers': ['console'],
'propagate' : 0
},
'file_only': {
'handlers': ['file'],
'propagate' : 0
},
'both': {
'handlers': ['console', 'file'],
'propagate' : 0
},
},
'root': {
'level': log_level,
'handlers': ['console'],
},
})
# TODO (xj9): Get from a config file.
#logger = logging.getLogger('console_only')
configureLogging()
if '-c' in sys.argv:
logger = logging.getLogger('file_only')
else:
logger = logging.getLogger('both')
def restartLoggingInUpdatedAppdataLocation():
global logger
for i in list(logger.handlers):
logger.removeHandler(i)
i.flush()
i.close()
configureLogging()
if '-c' in sys.argv:
logger = logging.getLogger('file_only')
else:
logger = logging.getLogger('both')