-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlog_config.py
80 lines (69 loc) · 2.11 KB
/
log_config.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# -*- coding: utf-8 -*-
############################################################
#
# loguru guide, using logging.config
# https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.configure
############################################################
import sys
from loguru import logger
logger.configure(
handlers=[
dict(
sink=sys.stderr,
backtrace=False,
filter=lambda record: "default" in record["extra"],
),
dict(
sink="log/default.log",
backtrace=False,
filter=lambda record: "default" in record["extra"],
),
dict(
sink=sys.stdout,
backtrace=False,
format="{message}",
level="INFO",
filter=lambda record: "emitter" in record["extra"],
),
dict(
sink="log/{time:YYYY-MM-DD}.log",
filter=lambda record: "default" in record["extra"],
backtrace=False,
enqueue=True,
rotation="10 MB",
),
]
)
statis_logger = logger.bind(emitter=True)
default_logger = logger.bind(default=True)
def init_logger(name, level):
"""Initialize logger in subprocess"""
logger.add(
sink=f"log/{name}-{level}.log",
level=level,
backtrace=False,
rotation="1 day",
retention="7 days",
enqueue=True,
)
loggers = {}
def get_a_single_logger(name, level):
"""Create a wrapper logger with extra info
利用 filter 机制让这个 logger 的消息只输出到当前 sink 上
"""
logger_key = f"{name}-{level}"
if logger_key in loggers:
return loggers.get(logger_key)
logger.add(
sink=f"log/{logger_key}.log",
level=level,
filter=lambda record: record["extra"].get("name") == name,
backtrace=False,
rotation="1 day",
retention="7 days",
enqueue=True,
)
# https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.bind
wrapper_log = logger.bind(name=name)
loggers[logger_key] = wrapper_log
return wrapper_log