[actions] move LoggerAdapter from 'output' to 'actions'
This commit is contained in:
@@ -12,6 +12,7 @@ import re
|
|||||||
import time
|
import time
|
||||||
import logging
|
import logging
|
||||||
import operator
|
import operator
|
||||||
|
import functools
|
||||||
from . import util, exception
|
from . import util, exception
|
||||||
|
|
||||||
|
|
||||||
@@ -51,6 +52,39 @@ def parse(actionspec):
|
|||||||
return actions
|
return actions
|
||||||
|
|
||||||
|
|
||||||
|
class LoggerAdapter():
|
||||||
|
|
||||||
|
def __init__(self, logger, job):
|
||||||
|
self.logger = logger
|
||||||
|
self.extra = job._logger_extra
|
||||||
|
self.actions = job._logger_actions
|
||||||
|
|
||||||
|
self.debug = functools.partial(self.log, logging.DEBUG)
|
||||||
|
self.info = functools.partial(self.log, logging.INFO)
|
||||||
|
self.warning = functools.partial(self.log, logging.WARNING)
|
||||||
|
self.error = functools.partial(self.log, logging.ERROR)
|
||||||
|
|
||||||
|
def log(self, level, msg, *args, **kwargs):
|
||||||
|
msg = str(msg)
|
||||||
|
if args:
|
||||||
|
msg = msg % args
|
||||||
|
|
||||||
|
actions = self.actions[level]
|
||||||
|
if actions:
|
||||||
|
args = self.extra.copy()
|
||||||
|
args["level"] = level
|
||||||
|
|
||||||
|
for cond, action in actions:
|
||||||
|
if cond(msg):
|
||||||
|
action(args)
|
||||||
|
|
||||||
|
level = args["level"]
|
||||||
|
|
||||||
|
if self.logger.isEnabledFor(level):
|
||||||
|
kwargs["extra"] = self.extra
|
||||||
|
self.logger._log(level, msg, (), **kwargs)
|
||||||
|
|
||||||
|
|
||||||
def _level_to_int(level):
|
def _level_to_int(level):
|
||||||
try:
|
try:
|
||||||
return logging._nameToLevel[level]
|
return logging._nameToLevel[level]
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ stdout_write = output.stdout_write
|
|||||||
class Job():
|
class Job():
|
||||||
"""Base class for Job types"""
|
"""Base class for Job types"""
|
||||||
ulog = None
|
ulog = None
|
||||||
|
_logger_adapter = output.LoggerAdapter
|
||||||
|
|
||||||
def __init__(self, extr, parent=None):
|
def __init__(self, extr, parent=None):
|
||||||
if isinstance(extr, str):
|
if isinstance(extr, str):
|
||||||
@@ -77,9 +78,9 @@ class Job():
|
|||||||
|
|
||||||
actions = extr.config("actions")
|
actions = extr.config("actions")
|
||||||
if actions:
|
if actions:
|
||||||
from .actions import parse
|
from .actions import LoggerAdapter, parse
|
||||||
|
self._logger_adapter = LoggerAdapter
|
||||||
self._logger_actions = parse(actions)
|
self._logger_actions = parse(actions)
|
||||||
self._wrap_logger = self._wrap_logger_actions
|
|
||||||
|
|
||||||
path_proxy = output.PathfmtProxy(self)
|
path_proxy = output.PathfmtProxy(self)
|
||||||
self._logger_extra = {
|
self._logger_extra = {
|
||||||
@@ -267,10 +268,7 @@ class Job():
|
|||||||
return self._wrap_logger(logging.getLogger(name))
|
return self._wrap_logger(logging.getLogger(name))
|
||||||
|
|
||||||
def _wrap_logger(self, logger):
|
def _wrap_logger(self, logger):
|
||||||
return output.LoggerAdapter(logger, self)
|
return self._logger_adapter(logger, self)
|
||||||
|
|
||||||
def _wrap_logger_actions(self, logger):
|
|
||||||
return output.LoggerAdapterActions(logger, self)
|
|
||||||
|
|
||||||
def _write_unsupported(self, url):
|
def _write_unsupported(self, url):
|
||||||
if self.ulog:
|
if self.ulog:
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import os
|
|||||||
import sys
|
import sys
|
||||||
import shutil
|
import shutil
|
||||||
import logging
|
import logging
|
||||||
import functools
|
|
||||||
import unicodedata
|
import unicodedata
|
||||||
from . import config, util, formatter
|
from . import config, util, formatter
|
||||||
|
|
||||||
@@ -92,39 +91,6 @@ class LoggerAdapter():
|
|||||||
self.logger._log(logging.ERROR, msg, args, **kwargs)
|
self.logger._log(logging.ERROR, msg, args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class LoggerAdapterActions():
|
|
||||||
|
|
||||||
def __init__(self, logger, job):
|
|
||||||
self.logger = logger
|
|
||||||
self.extra = job._logger_extra
|
|
||||||
self.actions = job._logger_actions
|
|
||||||
|
|
||||||
self.debug = functools.partial(self.log, logging.DEBUG)
|
|
||||||
self.info = functools.partial(self.log, logging.INFO)
|
|
||||||
self.warning = functools.partial(self.log, logging.WARNING)
|
|
||||||
self.error = functools.partial(self.log, logging.ERROR)
|
|
||||||
|
|
||||||
def log(self, level, msg, *args, **kwargs):
|
|
||||||
msg = str(msg)
|
|
||||||
if args:
|
|
||||||
msg = msg % args
|
|
||||||
|
|
||||||
actions = self.actions[level]
|
|
||||||
if actions:
|
|
||||||
args = self.extra.copy()
|
|
||||||
args["level"] = level
|
|
||||||
|
|
||||||
for cond, action in actions:
|
|
||||||
if cond(msg):
|
|
||||||
action(args)
|
|
||||||
|
|
||||||
level = args["level"]
|
|
||||||
|
|
||||||
if self.logger.isEnabledFor(level):
|
|
||||||
kwargs["extra"] = self.extra
|
|
||||||
self.logger._log(level, msg, (), **kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
class PathfmtProxy():
|
class PathfmtProxy():
|
||||||
__slots__ = ("job",)
|
__slots__ = ("job",)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user