mirror of
https://github.com/lilydjwg/nvchecker.git
synced 2025-03-10 06:14:02 +00:00
support use both loggers
This commit is contained in:
parent
85288583e1
commit
07fe08c639
2 changed files with 38 additions and 25 deletions
|
@ -7,6 +7,7 @@ import sys
|
|||
import configparser
|
||||
import asyncio
|
||||
import logging
|
||||
|
||||
import structlog
|
||||
|
||||
from .lib import nicelogger
|
||||
|
@ -22,9 +23,12 @@ def add_common_arguments(parser):
|
|||
parser.add_argument('-l', '--logging',
|
||||
choices=('debug', 'info', 'warning', 'error'), default='info',
|
||||
help='logging level (default: info)')
|
||||
parser.add_argument('--logger', choices=['pretty', 'json'],
|
||||
default='pretty',
|
||||
parser.add_argument('--logger', default='pretty',
|
||||
choices=['pretty', 'json', 'both'],
|
||||
help='select which logger to use')
|
||||
parser.add_argument('--json-log-fd',
|
||||
type=lambda fd: os.fdopen(int(fd), mode='w'),
|
||||
help='specify fd to send json logs to. stderr by default')
|
||||
parser.add_argument('-V', '--version', action='store_true',
|
||||
help='show version and exit')
|
||||
parser.add_argument('file', metavar='FILE', nargs='?', type=open,
|
||||
|
@ -32,27 +36,34 @@ def add_common_arguments(parser):
|
|||
|
||||
def process_common_arguments(args):
|
||||
'''return True if should stop'''
|
||||
if args.logger == 'pretty':
|
||||
processors = [
|
||||
slogconf.exc_info,
|
||||
]
|
||||
logger_factory = None
|
||||
|
||||
if args.logger in ['pretty', 'both']:
|
||||
slogconf.fix_logging()
|
||||
nicelogger.enable_pretty_logging(
|
||||
getattr(logging, args.logging.upper()))
|
||||
structlog.configure(
|
||||
processors=[
|
||||
slogconf.exc_info,
|
||||
slogconf.stdlib_renderer,
|
||||
],
|
||||
processors.append(slogconf.stdlib_renderer)
|
||||
if args.logger == 'pretty':
|
||||
logger_factory=structlog.PrintLoggerFactory(
|
||||
file=open(os.devnull, 'w')),
|
||||
)
|
||||
else:
|
||||
structlog.configure(
|
||||
processors=[
|
||||
slogconf.exc_info,
|
||||
structlog.processors.format_exc_info,
|
||||
slogconf.json_renderer,
|
||||
],
|
||||
logger_factory=structlog.PrintLoggerFactory(file=sys.stderr),
|
||||
)
|
||||
file=open(os.devnull, 'w'),
|
||||
)
|
||||
if args.logger in ['json', 'both']:
|
||||
processors.extend([
|
||||
structlog.processors.format_exc_info,
|
||||
slogconf.json_renderer,
|
||||
])
|
||||
|
||||
if logger_factory is None:
|
||||
logfile = args.json_log_fd or sys.stderr
|
||||
logger_factory = structlog.PrintLoggerFactory(file=logfile)
|
||||
|
||||
structlog.configure(
|
||||
processors = processors,
|
||||
logger_factory = logger_factory,
|
||||
)
|
||||
|
||||
if args.version:
|
||||
progname = os.path.basename(sys.argv[0])
|
||||
|
|
|
@ -35,17 +35,19 @@ def exc_info(logger, level, event):
|
|||
return event
|
||||
|
||||
def stdlib_renderer(logger, level, event):
|
||||
event = _console_msg(event)
|
||||
logger = logging.getLogger(event.get('logger_name'))
|
||||
msg = event.pop('msg', event['event'])
|
||||
exc_info = event.pop('exc_info', None)
|
||||
# return event unchanged for further processing
|
||||
std_event = _console_msg(event.copy())
|
||||
logger = logging.getLogger(std_event.get('logger_name'))
|
||||
msg = std_event.pop('msg', std_event['event'])
|
||||
exc_info = std_event.pop('exc_info', None)
|
||||
getattr(logger, level)(
|
||||
msg, exc_info = exc_info, extra=event,
|
||||
msg, exc_info = exc_info, extra=std_event,
|
||||
)
|
||||
return ''
|
||||
return event
|
||||
|
||||
_renderer = structlog.processors.JSONRenderer(ensure_ascii=False)
|
||||
def json_renderer(logger, level, event):
|
||||
event['level'] = level
|
||||
return _renderer(logger, level, event)
|
||||
|
||||
class _Logger(logging.Logger):
|
||||
|
|
Loading…
Add table
Reference in a new issue