Improve logging output handling to play nice with logrotate when logging to a file

This commit is contained in:
desbma
2014-10-15 13:49:51 +02:00
parent 6cb72eba46
commit e101dee33f
+16 -9
View File
@@ -7,6 +7,7 @@ import argparse
import contextlib import contextlib
import enum import enum
import logging import logging
import logging.handlers
import operator import operator
import os import os
import re import re
@@ -564,8 +565,19 @@ if __name__ == "__main__":
"normal": logging.INFO, "normal": logging.INFO,
"debug": logging.DEBUG} "debug": logging.DEBUG}
logging.getLogger().setLevel(logging_level[args.verbosity]) logging.getLogger().setLevel(logging_level[args.verbosity])
logging_formatter = colored_logging.ColoredFormatter(fmt="%(asctime)s %(levelname)s [%(name)s] %(message)s") logging_fmt = "%(asctime)s %(levelname)s [%(name)s] %(message)s"
logging_handler = logging.StreamHandler() 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()
else:
# log to stderr
logging_formatter = colored_logging.ColoredFormatter(fmt=logging_fmt)
logging_handler = logging.StreamHandler()
logging_handler.setFormatter(logging_formatter) logging_handler.setFormatter(logging_formatter)
logging.getLogger().addHandler(logging_handler) logging.getLogger().addHandler(logging_handler)
@@ -587,10 +599,7 @@ if __name__ == "__main__":
if args.daemonize: if args.daemonize:
preserved_fds = None preserved_fds = None
if args.log_filepath is not None: if args.log_filepath is not None:
log_output = daemon_context.enter_context(open(args.log_filepath, "at+")) preserved_fds = [logging_handler.stream.fileno()]
preserved_fds = [log_output.fileno()]
else:
log_output = None
if args.pid_filepath is not None: if args.pid_filepath is not None:
pidfile = daemon.pidlockfile.PIDLockFile(args.pid_filepath) pidfile = daemon.pidlockfile.PIDLockFile(args.pid_filepath)
if pidfile.is_locked(): if pidfile.is_locked():
@@ -598,9 +607,7 @@ if __name__ == "__main__":
exit(1) exit(1)
else: else:
pidfile = None pidfile = None
daemon_context.enter_context(daemon.DaemonContext(stdout=log_output, daemon_context.enter_context(daemon.DaemonContext(pidfile=pidfile,
stderr=log_output,
pidfile=pidfile,
files_preserve=preserved_fds)) files_preserve=preserved_fds))
main(args.drive_filepaths, main(args.drive_filepaths,
args.fan_pwm_filepath, args.fan_pwm_filepath,