From 1a8e7ccb920deb753c9f8f5b45d93e0501827538 Mon Sep 17 00:00:00 2001 From: Thomas Oettli Date: Mon, 9 Nov 2020 22:15:19 +0100 Subject: [PATCH] improve logging config --- README.md | 40 +++++++++++++++---------------- pyinotifyd/__init__.py | 20 +++++++++++++++- pyinotifyd/misc/config.py.default | 24 +++++++++++++++++++ 3 files changed, 62 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index a3fc810..e24bf43 100644 --- a/README.md +++ b/README.md @@ -178,35 +178,33 @@ pyinotifyd.add_watch( ## Logging Pythons [logging](https://docs.python.org/3/howto/logging.html) framework is used to log messages (see https://docs.python.org/3/howto/logging.html). - -Configure the global loglevel. This is the default: +The following loglevels are available: +* DEBUG +* INFO +* WARNING +* ERROR +* CRITICAL ```python -logging.getLogger().setLevel(logging.WARNING) +# Configure global loglevel +setLoglevel(INFO) ``` -It is possible to configure the loglevel per *logname*. This is an example for logname **sched**: +Configure loglevel per *logname*. ```python -logging.getLogger("sched").setLevel(logging.INFO) +setLoglevel(INFO, logname="daemon") ``` ### Syslog -Add this to your config file to send log messages to a local syslog server. +Send log messages to the local syslog server. ```python -# send log messages to the Unix socket of the syslog server. -syslog = logging.handlers.SysLogHandler( - address="/dev/log") +# Enable logging to local syslog server (/dev/log). Use *address* to specify a different target. +enableSyslog( + loglevel=INFO, + address="/dev/log") -# set the log format of syslog messages -log_format = "pyinotifyd/%(name)s: %(message)s" -syslog.setFormatter(logging.Formatter(log_format)) - -# set the log level for syslog messages -syslog.setLevel(logging.INFO) - -# enable syslog for pyinotifyd -logging.getLogger().addHandler(syslog) - -# or enable syslog per logname -#logging.getLogger("logname").addHandler(syslog) +# Enable syslog per logname +enableSyslog( + loglevel=INFO, + name="daemon") ``` # Examples diff --git a/pyinotifyd/__init__.py b/pyinotifyd/__init__.py index 8d642e0..5988fd9 100755 --- a/pyinotifyd/__init__.py +++ b/pyinotifyd/__init__.py @@ -37,6 +37,22 @@ from pyinotifyd.scheduler import TaskScheduler, Cancel __version__ = "0.0.3" +def setLoglevel(loglevel, logname=None): + logger = logging.getLogger(logname) + logger.setLevel(loglevel) + + +def enableSyslog(loglevel=None, address="/dev/log", logname=None): + logger = logging.getLogger(logname) + syslog = logging.handlers.SysLogHandler(address=address) + syslog.setFormatter( + logging.Formatter(f"{Pyinotifyd.name}/%(name)s: %(message)s")) + if loglevel: + syslog.setLevel(loglevel) + + logger.addHandler(syslog) + + class _SchedulerList: def __init__(self, schedulers=[], loop=None): if not isinstance(schedulers, list): @@ -184,8 +200,10 @@ class Pyinotifyd: def from_cfg_file(config_file): config = {} name = Pyinotifyd.name - exec("import logging", {}, config) + exec("from logging import DEBUG, INFO, WARNING, ERROR, CRITICAL", + {}, config) exec(f"from {name} import Pyinotifyd, Watch", {}, config) + exec(f"from {name} import setLoglevel, enableSyslog", {}, config) exec(f"from {name}.scheduler import *", {}, config) with open(config_file, "r") as fh: exec(fh.read(), {}, config) diff --git a/pyinotifyd/misc/config.py.default b/pyinotifyd/misc/config.py.default index 59bea0e..936d00d 100644 --- a/pyinotifyd/misc/config.py.default +++ b/pyinotifyd/misc/config.py.default @@ -82,3 +82,27 @@ # event_map = event_map, # rec=True, # auto_add=True) + + +################ +# Log config # +################ + +# set global loglevel +#setLoglevel(DEBUG) + +# set loglevel per logname +#setLoglevel( +# DEBUG, +# logname="daemon") + +# enable syslog +#enableSyslog( +# loglevel=DEBUG, +# address="/dev/log") + +# enable syslog per logname +#enableSyslog( +# loglevel=DEBUG, +# address="/dev/log", +# logname="sched")