bazarr/bazarr/logger.py

133 lines
5.1 KiB
Python
Raw Normal View History

2018-11-28 12:31:16 +00:00
# coding=utf-8
2018-10-25 10:06:33 +00:00
import os
import logging
import re
2019-03-05 17:55:20 +00:00
import platform
2019-09-28 04:22:17 +00:00
import warnings
2018-10-25 10:06:33 +00:00
from logging.handlers import TimedRotatingFileHandler
2018-11-28 11:45:39 +00:00
from get_args import args
2019-03-05 17:55:20 +00:00
from config import settings
2018-10-25 10:06:33 +00:00
2018-11-10 18:53:27 +00:00
logger = logging.getLogger()
2018-10-25 10:06:33 +00:00
class FileHandlerFormatter(logging.Formatter):
"""Formatter that removes apikey from logs."""
APIKEY_RE = re.compile(r'apikey(?:=|%3D)([a-zA-Z0-9]+)')
IPv4_RE = re.compile(r'\b(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9]?[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9]'
r'[0-9]|[1-9]?[0-9])\b')
2018-10-25 10:06:33 +00:00
def formatException(self, exc_info):
"""
Format an exception so that it prints on a single line.
"""
result = super(FileHandlerFormatter, self).formatException(exc_info)
2018-10-25 10:06:33 +00:00
return repr(result) # or format into one line however you want to
def formatApikey(self, s):
return re.sub(self.APIKEY_RE, 'apikey=(removed)', s)
def formatIPv4(self, s):
return re.sub(self.IPv4_RE, '***.***.***.***', s)
2018-10-25 10:06:33 +00:00
def format(self, record):
s = super(FileHandlerFormatter, self).format(record)
2018-10-25 10:06:33 +00:00
if record.exc_text:
s = s.replace('\n', '') + '|'
s = self.formatApikey(s)
s = self.formatIPv4(s)
2018-10-25 10:06:33 +00:00
return s
class NoExceptionFormatter(logging.Formatter):
def format(self, record):
record.exc_text = '' # ensure formatException gets called
return super(NoExceptionFormatter, self).format(record)
2019-01-15 16:25:13 +00:00
2018-10-25 10:06:33 +00:00
def formatException(self, record):
return ''
2018-11-15 13:39:55 +00:00
def configure_logging(debug=False):
2020-01-29 11:53:29 +00:00
warnings.simplefilter('ignore', category=ResourceWarning)
2019-09-28 04:22:17 +00:00
2018-11-15 13:39:55 +00:00
if not debug:
log_level = "INFO"
else:
log_level = "DEBUG"
2019-01-15 16:25:13 +00:00
2018-11-10 18:53:27 +00:00
logger.handlers = []
2019-01-15 16:25:13 +00:00
2018-11-10 18:53:27 +00:00
logger.setLevel(log_level)
2019-01-15 16:25:13 +00:00
2018-11-10 18:53:27 +00:00
# Console logging
ch = logging.StreamHandler()
cf = (debug and logging.Formatter or NoExceptionFormatter)(
'%(asctime)-15s - %(name)-32s (%(thread)x) : %(levelname)s (%(module)s:%(lineno)d) - %(message)s')
2018-11-10 18:53:27 +00:00
ch.setFormatter(cf)
2019-01-15 16:25:13 +00:00
2018-11-10 18:53:27 +00:00
ch.setLevel(log_level)
logger.addHandler(ch)
2019-01-15 16:25:13 +00:00
2018-11-15 13:39:55 +00:00
# File Logging
2018-10-25 10:06:33 +00:00
global fh
2018-11-28 11:45:39 +00:00
fh = TimedRotatingFileHandler(os.path.join(args.config_dir, 'log/bazarr.log'), when="midnight", interval=1,
2019-11-27 21:05:09 +00:00
backupCount=7, delay=True, encoding='utf-8')
f = FileHandlerFormatter('%(asctime)s|%(levelname)-8s|%(name)-32s|%(message)s|',
'%d/%m/%Y %H:%M:%S')
2018-10-25 10:06:33 +00:00
fh.setFormatter(f)
fh.setLevel(log_level)
logger.addHandler(fh)
2019-01-15 16:25:13 +00:00
2018-11-15 13:39:55 +00:00
if debug:
logging.getLogger("peewee").setLevel(logging.DEBUG)
2018-10-25 11:56:02 +00:00
logging.getLogger("apscheduler").setLevel(logging.DEBUG)
2018-10-25 10:06:33 +00:00
logging.getLogger("subliminal").setLevel(logging.DEBUG)
2018-11-28 11:45:39 +00:00
logging.getLogger("subliminal_patch").setLevel(logging.DEBUG)
logging.getLogger("subzero").setLevel(logging.DEBUG)
2018-10-25 11:56:02 +00:00
logging.getLogger("git").setLevel(logging.DEBUG)
logging.getLogger("apprise").setLevel(logging.DEBUG)
2020-01-22 04:54:32 +00:00
logging.getLogger("engineio.server").setLevel(logging.DEBUG)
logging.getLogger("socketio.server").setLevel(logging.DEBUG)
logging.getLogger("ffsubsync.subtitle_parser").setLevel(logging.DEBUG)
logging.getLogger("ffsubsync.speech_transformers").setLevel(logging.DEBUG)
logging.getLogger("ffsubsync.ffsubsync").setLevel(logging.DEBUG)
logging.getLogger("srt").setLevel(logging.DEBUG)
2019-03-05 17:55:20 +00:00
logging.debug('Bazarr version: %s', os.environ["BAZARR_VERSION"])
logging.debug('Bazarr branch: %s', settings.general.branch)
logging.debug('Operating system: %s', platform.platform())
logging.debug('Python version: %s', platform.python_version())
2018-10-25 10:06:33 +00:00
else:
logging.getLogger("peewee").setLevel(logging.CRITICAL)
2018-10-25 11:56:02 +00:00
logging.getLogger("apscheduler").setLevel(logging.WARNING)
logging.getLogger("apprise").setLevel(logging.WARNING)
2018-10-25 10:06:33 +00:00
logging.getLogger("subliminal").setLevel(logging.CRITICAL)
logging.getLogger("subliminal_patch").setLevel(logging.CRITICAL)
logging.getLogger("subzero").setLevel(logging.ERROR)
2020-01-22 04:54:32 +00:00
logging.getLogger("engineio.server").setLevel(logging.ERROR)
logging.getLogger("socketio.server").setLevel(logging.ERROR)
logging.getLogger("ffsubsync.subtitle_parser").setLevel(logging.ERROR)
logging.getLogger("ffsubsync.speech_transformers").setLevel(logging.ERROR)
logging.getLogger("ffsubsync.ffsubsync").setLevel(logging.ERROR)
logging.getLogger("srt").setLevel(logging.ERROR)
logging.getLogger("SignalRCoreClient").setLevel(logging.CRITICAL)
logging.getLogger("websocket").setLevel(logging.CRITICAL)
2020-01-22 04:54:32 +00:00
logging.getLogger("werkzeug").setLevel(logging.WARNING)
logging.getLogger("engineio.server").setLevel(logging.WARNING)
2020-03-18 19:33:54 +00:00
logging.getLogger("knowit").setLevel(logging.CRITICAL)
2018-10-25 11:56:02 +00:00
logging.getLogger("enzyme").setLevel(logging.CRITICAL)
2018-10-25 10:06:33 +00:00
logging.getLogger("guessit").setLevel(logging.WARNING)
logging.getLogger("rebulk").setLevel(logging.WARNING)
logging.getLogger("stevedore.extension").setLevel(logging.CRITICAL)
2018-11-10 18:53:27 +00:00
2018-10-25 10:06:33 +00:00
def empty_log():
2018-12-15 00:36:28 +00:00
fh.doRollover()
2020-02-18 02:45:12 +00:00
logging.info('BAZARR Log file emptied')