Log to file only if the file exists

If LOG_FILE config option contained invalid file, pdns admin wouldn't start.
Also, it wasn't possible to log only to stdout/stderr correctly, because
setting the log file to /dev/stdout would double the logs messages as the pdns
admin is already logging to the stderr.
This commit is contained in:
Peter Schiffer 2016-08-31 23:11:04 +02:00
parent 59e91ec7b9
commit 444be2c060
2 changed files with 11 additions and 8 deletions

View File

@ -27,18 +27,21 @@ class logger(object):
# set request requests module log level # set request requests module log level
logging.getLogger("requests").setLevel(logging.CRITICAL) logging.getLogger("requests").setLevel(logging.CRITICAL)
if self.logfile and os.path.isfile(self.logfile):
# define handler to log into file # define handler to log into file
file_log_handler = logging.FileHandler(self.logfile) file_log_handler = logging.FileHandler(self.logfile)
logger.addHandler(file_log_handler) logger.addHandler(file_log_handler)
# define logging format for file
file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
file_log_handler.setFormatter(file_formatter)
# define handler to log into console # define handler to log into console
stderr_log_handler = logging.StreamHandler() stderr_log_handler = logging.StreamHandler()
logger.addHandler(stderr_log_handler) logger.addHandler(stderr_log_handler)
# define logging format for file and console # define logging format for console
file_formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_formatter = logging.Formatter('[%(levelname)s] %(message)s') console_formatter = logging.Formatter('[%(levelname)s] %(message)s')
file_log_handler.setFormatter(file_formatter)
stderr_log_handler.setFormatter(console_formatter) stderr_log_handler.setFormatter(console_formatter)
return logging.getLogger(self.name) return logging.getLogger(self.name)

View File

@ -14,8 +14,8 @@ TIMEOUT = 10
# LOG CONFIG # LOG CONFIG
LOG_LEVEL = 'DEBUG' LOG_LEVEL = 'DEBUG'
LOG_FILE = 'logfile.log' LOG_FILE = 'logfile.log'
# For Docker, set the following # For Docker, leave empty string
#LOG_FILE = '/dev/stdout' #LOG_FILE = ''
# Upload # Upload
UPLOAD_DIR = os.path.join(basedir, 'upload') UPLOAD_DIR = os.path.join(basedir, 'upload')