Log to Syslog by default

This commit is contained in:
desbma
2015-11-02 23:07:26 +01:00
parent 5690d1ace5
commit 1070af5df6
+27 -4
View File
@@ -20,6 +20,7 @@ import signal
import socket
import stat
import subprocess
import syslog
import threading
import time
@@ -33,6 +34,27 @@ from hddfancontrol import colored_logging
exit_evt = threading.Event()
class LoggingSysLogHandler(logging.Handler):
""" Class similar in goal to logging.handlers.SysLogHandler, but uses the syslog call instead of socket. """
def __init__(self, facility, options=syslog.LOG_PID):
syslog.openlog(logoption=options, facility=facility)
super().__init__()
def emit(self, record):
""" See logging.Handler.emit. """
msg = self.format(record)
h = logging.handlers.SysLogHandler
level = h.priority_names[h.priority_map[record.levelname]]
syslog.syslog(level, msg)
def close(self):
""" See logging.Handler.close. """
syslog.closelog()
super().close()
class Drive:
""" Drive represented by a device file like /dev/sdX. """
@@ -649,7 +671,7 @@ def cl_main():
"--log-file",
default=None,
dest="log_filepath",
help="Filepath for log output when using daemon mode")
help="Filepath for log output when using daemon mode, if omitted, logging goes to syslog.")
arg_parser.add_argument("--pid-file",
default=None,
dest="pid_filepath",
@@ -684,13 +706,14 @@ def cl_main():
logging.getLogger().setLevel(logging_level[args.verbosity])
logging_fmt = "%(asctime)s %(levelname)s [%(name)s] %(message)s"
if args.daemonize:
logging_formatter = logging.Formatter(fmt=logging_fmt)
if args.log_filepath is not None:
# log to file
logging_handler = logging.handlers.WatchedFileHandler(args.log_filepath)
else:
# no logging output
logging_handler = logging.handlers.NullHandler()
# log to syslog
logging_fmt = "%(levelname)s [%(name)s] %(message)s"
logging_handler = LoggingSysLogHandler(syslog.LOG_DAEMON)
logging_formatter = logging.Formatter(fmt=logging_fmt)
else:
# log to stderr
logging_formatter = colored_logging.ColoredFormatter(fmt=logging_fmt)