Separate API and websocket logging

This commit is contained in:
JonnyWong16 2017-09-30 16:42:25 -07:00
parent fe210646c3
commit 54cd860c13
5 changed files with 178 additions and 51 deletions

View file

@ -31,6 +31,8 @@ import helpers
# These settings are for file logging only
FILENAME = "plexpy.log"
FILENAME_API = "plexpy_api.log"
FILENAME_WEBSOCKET = "plexpy_websocket.log"
MAX_SIZE = 5000000 # 5 MB
MAX_FILES = 5
@ -38,6 +40,10 @@ _BLACKLIST_WORDS = []
# PlexPy logger
logger = logging.getLogger("plexpy")
# PlexPy API logger
logger_api = logging.getLogger("plexpy_api")
# PlexPy websocket logger
logger_websocket = logging.getLogger("plexpy_websocket")
# Global queue for multiprocessing logging
queue = None
@ -184,7 +190,7 @@ def initLogger(console=False, log_dir=False, verbose=False):
# Close and remove old handlers. This is required to reinit the loggers
# at runtime
for handler in logger.handlers[:]:
for handler in logger.handlers[:] + logger_api.handlers[:] + logger_websocket.handlers[:]:
# Just make sure it is cleaned up.
if isinstance(handler, handlers.RotatingFileHandler):
handler.close()
@ -192,22 +198,45 @@ def initLogger(console=False, log_dir=False, verbose=False):
handler.flush()
logger.removeHandler(handler)
logger_api.removeHandler(handler)
logger_websocket.removeHandler(handler)
# Configure the logger to accept all messages
logger.propagate = False
logger.setLevel(logging.DEBUG if verbose else logging.INFO)
logger_api.propagate = False
logger_api.setLevel(logging.DEBUG if verbose else logging.INFO)
logger_websocket.propagate = False
logger_websocket.setLevel(logging.DEBUG if verbose else logging.INFO)
# Setup file logger
if log_dir:
filename = os.path.join(log_dir, FILENAME)
file_formatter = logging.Formatter('%(asctime)s - %(levelname)-7s :: %(threadName)s : %(message)s', '%Y-%m-%d %H:%M:%S')
# Main PlexPy logger
filename = os.path.join(log_dir, FILENAME)
file_handler = handlers.RotatingFileHandler(filename, maxBytes=MAX_SIZE, backupCount=MAX_FILES)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(file_formatter)
logger.addHandler(file_handler)
# PlexPy API logger
filename = os.path.join(log_dir, FILENAME_API)
file_handler = handlers.RotatingFileHandler(filename, maxBytes=MAX_SIZE, backupCount=MAX_FILES)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(file_formatter)
logger_api.addHandler(file_handler)
# PlexPy websocket logger
filename = os.path.join(log_dir, FILENAME_WEBSOCKET)
file_handler = handlers.RotatingFileHandler(filename, maxBytes=MAX_SIZE, backupCount=MAX_FILES)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(file_formatter)
logger_websocket.addHandler(file_handler)
# Setup console logger
if console:
console_formatter = logging.Formatter('%(asctime)s - %(levelname)s :: %(threadName)s : %(message)s', '%Y-%m-%d %H:%M:%S')
@ -221,7 +250,7 @@ def initLogger(console=False, log_dir=False, verbose=False):
# Only add filters after the config file has been initialized
# Nothing prior to initialization should contain sensitive information
if not plexpy.DEV and plexpy.CONFIG:
for handler in logger.handlers:
for handler in logger.handlers + logger_api.handlers + logger_websocket.handlers:
handler.addFilter(BlacklistFilter())
handler.addFilter(PublicIPFilter())
@ -278,9 +307,26 @@ def initHooks(global_exceptions=True, thread_exceptions=True, pass_original=True
threading.Thread.__init__ = new_init
# Expose logger methods
# Main PlexPy logger
info = logger.info
warn = logger.warn
error = logger.error
debug = logger.debug
warning = logger.warning
exception = logger.exception
# PlexPy API logger
api_info = logger_api.info
api_warn = logger_api.warn
api_error = logger_api.error
api_debug = logger_api.debug
api_warning = logger_api.warning
api_exception = logger_api.exception
# PlexPy websocket logger
websocket_info = logger_websocket.info
websocket_warn = logger_websocket.warn
websocket_error = logger_websocket.error
websocket_debug = logger_websocket.debug
websocket_warning = logger_websocket.warning
websocket_exception = logger_websocket.exception