moonraker: Implement custom logger

Implement a custom logging handler so the Git version is logged on Rollover.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
Arksine 2020-07-27 16:41:14 -04:00
parent f34b76ae73
commit 4ea3bae516
2 changed files with 44 additions and 4 deletions

View File

@ -19,7 +19,7 @@ from tornado.ioloop import IOLoop, PeriodicCallback
from tornado.util import TimeoutError from tornado.util import TimeoutError
from tornado.locks import Event from tornado.locks import Event
from app import MoonrakerApp from app import MoonrakerApp
from utils import ServerError, DEBUG from utils import ServerError, DEBUG, MoonrakerLoggingHandler
INIT_MS = 1000 INIT_MS = 1000
@ -432,14 +432,13 @@ def main():
log_file = os.path.normpath(os.path.expanduser(cmd_line_args.logfile)) log_file = os.path.normpath(os.path.expanduser(cmd_line_args.logfile))
cmd_line_args.logfile = log_file cmd_line_args.logfile = log_file
root_logger = logging.getLogger() root_logger = logging.getLogger()
file_hdlr = logging.handlers.TimedRotatingFileHandler( file_hdlr = MoonrakerLoggingHandler(
log_file, when='midnight', backupCount=2) log_file, when='midnight', backupCount=2)
root_logger.addHandler(file_hdlr) root_logger.addHandler(file_hdlr)
if DEBUG: if DEBUG:
root_logger.setLevel(logging.DEBUG) root_logger.setLevel(logging.DEBUG)
else: else:
root_logger.setLevel(logging.INFO) root_logger.setLevel(logging.INFO)
logging.info("="*25 + "Starting Moonraker..." + "="*25)
formatter = logging.Formatter( formatter = logging.Formatter(
'%(asctime)s [%(filename)s:%(funcName)s()] - %(message)s') '%(asctime)s [%(filename)s:%(funcName)s()] - %(message)s')
file_hdlr.setFormatter(formatter) file_hdlr.setFormatter(formatter)

View File

@ -4,7 +4,8 @@
# #
# This file may be distributed under the terms of the GNU GPLv3 license # This file may be distributed under the terms of the GNU GPLv3 license
import logging import logging
import json import os
import subprocess
DEBUG = True DEBUG = True
@ -29,3 +30,43 @@ class SocketLoggingHandler(logging.Handler):
# the klippy_send function will handle serialization # the klippy_send function will handle serialization
self.server_manager.klippy_send(record) self.server_manager.klippy_send(record)
class MoonrakerLoggingHandler(logging.handlers.TimedRotatingFileHandler):
def __init__(self, filename, **kwargs):
super(MoonrakerLoggingHandler, self).__init__(filename, **kwargs)
self.header = "Moonraker Log Start...\n"
self.header += "Git Version: " + get_software_version() + "\n"
self.header += "="*80 + "\n"
if self.stream is not None:
self.stream.write(self.header)
def doRollover(self):
super(MoonrakerLoggingHandler, self).doRollover()
if self.stream is not None:
self.stream.write(self.header)
# Parse the git version from the command line. This code
# is borrowed from Klipper.
def get_software_version():
moonraker_path = os.path.join(
os.path.dirname(__file__), '..')
# Obtain version info from "git" program
prog = ('git', '-C', moonraker_path, 'describe', '--always',
'--tags', '--long', '--dirty', "--all")
try:
process = subprocess.Popen(prog, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
ver, err = process.communicate()
retcode = process.wait()
if retcode == 0:
version = ver.strip()
if isinstance(version, bytes):
version = version.decode()
return version
else:
logging.debug("Error getting git version: %s", err)
except OSError:
logging.exception("Error runing git describe")
return "?"