Added logging functions
* Logging is always initialized if importing the whole package * Support switching to DEBUG mode * Support changing the log dir (and optionally log name)
This commit is contained in:
parent
4cc54011b7
commit
acd92b3e50
4 changed files with 97 additions and 6 deletions
|
|
@ -8,11 +8,13 @@ from wk import exe
|
|||
from wk import hw
|
||||
from wk import io
|
||||
from wk import kit
|
||||
from wk import log
|
||||
from wk import net
|
||||
from wk import os
|
||||
from wk import std
|
||||
from wk import sw
|
||||
|
||||
|
||||
# Check env
|
||||
if sys.version_info < (3, 5):
|
||||
# Unsupported
|
||||
|
|
@ -27,6 +29,9 @@ if sys.version_info < (3, 7):
|
|||
**sys.version_info,
|
||||
))
|
||||
|
||||
# Init
|
||||
log.start()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
print("This file is not meant to be called directly.")
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
'''WizardKit: cfg module init'''
|
||||
|
||||
from wk.cfg import logging
|
||||
from wk.cfg import log
|
||||
from wk.cfg import main
|
||||
|
|
|
|||
|
|
@ -1,16 +1,14 @@
|
|||
'''WizardKit: Config - Logging'''
|
||||
'''WizardKit: Config - Log'''
|
||||
# vim: sts=2 sw=2 ts=2
|
||||
|
||||
import logging
|
||||
|
||||
|
||||
DEBUG = {
|
||||
'level': logging.DEBUG,
|
||||
'level': 'DEBUG',
|
||||
'format': '[%(asctime)s %(levelname)s] [%(name)s.%(funcName)s] %(message)s',
|
||||
'datefmt': '%Y-%m-%d %H:%M:%S %z',
|
||||
}
|
||||
DEFAULT = {
|
||||
'level': logging.INFO,
|
||||
'level': 'INFO',
|
||||
'format': '[%(asctime)s %(levelname)s] %(message)s',
|
||||
'datefmt': '%Y-%m-%d %H:%M:%S %z',
|
||||
}
|
||||
88
scripts/wk/log.py
Normal file
88
scripts/wk/log.py
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
'''WizardKit: Log Functions'''
|
||||
# vim: sts=2 sw=2 ts=2
|
||||
|
||||
import logging
|
||||
import os
|
||||
import pathlib
|
||||
import shutil
|
||||
import time
|
||||
|
||||
from . import cfg
|
||||
|
||||
|
||||
# STATIC VARIABLES
|
||||
LOG = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# Functions
|
||||
def enable_debug_mode():
|
||||
"""Configures logging for better debugging."""
|
||||
root_logger = logging.getLogger()
|
||||
for handler in root_logger.handlers:
|
||||
formatter = logging.Formatter(
|
||||
datefmt=cfg.log.DEBUG['datefmt'],
|
||||
fmt=cfg.log.DEBUG['format'],
|
||||
)
|
||||
handler.setFormatter(formatter)
|
||||
root_logger.setLevel('DEBUG')
|
||||
|
||||
|
||||
def update_log_path(dest_dir, dest_filename=''):
|
||||
"""Copies current log file to new dir and updates the root logger."""
|
||||
dest = pathlib.Path(dest_dir)
|
||||
dest = dest.expanduser()
|
||||
root_logger = logging.getLogger()
|
||||
cur_handler = root_logger.handlers[0]
|
||||
|
||||
# Safety checks
|
||||
if len(root_logger.handlers) > 1:
|
||||
raise NotImplementedError('update_log_path() only supports a single handler.')
|
||||
if not isinstance(cur_handler, logging.FileHandler):
|
||||
raise NotImplementedError('update_log_path() only supports FileHandlers.')
|
||||
|
||||
# Set source
|
||||
source = pathlib.Path(cur_handler.baseFilename)
|
||||
source = source.resolve()
|
||||
|
||||
# Copy original log to new location
|
||||
if dest_filename:
|
||||
dest = dest.joinpath(dest_filename)
|
||||
else:
|
||||
dest = dest.joinpath(source.name)
|
||||
dest = dest.resolve()
|
||||
os.makedirs(dest.parent, exist_ok=True)
|
||||
shutil.copy(source, dest)
|
||||
|
||||
# Create new cur_handler (preserving formatter settings)
|
||||
new_handler = logging.FileHandler(dest, mode='a')
|
||||
new_handler.setFormatter(cur_handler.formatter)
|
||||
|
||||
# Replace current handler
|
||||
root_logger.removeHandler(cur_handler)
|
||||
root_logger.addHandler(new_handler)
|
||||
|
||||
|
||||
def start(config=None):
|
||||
"""Configure and start logging using safe defaults."""
|
||||
log_dir = '{}/Logs/'.format(os.path.expanduser('~'))
|
||||
log_path = '{}/{}_{}.log'.format(
|
||||
log_dir,
|
||||
cfg.main.KIT_NAME_FULL,
|
||||
time.strftime('%Y-%m-%d_%H%M%z'),
|
||||
)
|
||||
root_logger = logging.getLogger()
|
||||
|
||||
# Safety checks
|
||||
if not config:
|
||||
config = cfg.log.DEFAULT
|
||||
if root_logger.hasHandlers():
|
||||
raise UserWarning('Logging already started.')
|
||||
|
||||
# Create log_dir
|
||||
os.makedirs(log_dir, exist_ok=True)
|
||||
|
||||
# Config logger
|
||||
logging.basicConfig(filename=log_path, **config)
|
||||
|
||||
if __name__ == '__main__':
|
||||
print("This file is not meant to be called directly.")
|
||||
Loading…
Reference in a new issue