[英]How to specify namer & rotator through logging.config.dictConfig - FileHandler
我正在尋找為logging.handler.TimedRotatingFileHandler指定名稱和旋轉器的正確方法。
下面是一個例子:
import logging
logger_config = {
"version": 1,
"handlers": {
"file": {
"class": "logging.handlers.TimedRotatingFileHandler",
"filename": "logs",
"when": "S",
"interval": 8,
"enconding": "utf-8",
"namer": "?",
"rotator": "?",
},
},
"root": {
"level": "INFO",
"handlers": ["file"]
}
}
dictConfig(logger_config)
任何的想法 ?
我使用配置字典中的自定義工廠解決了這種方法(該示例在控制台和當前目錄中的旋轉文件上生成日志記錄)
import logging
import logging.config
import logging.handlers
import os
import gzip
class MyRotatingFileHandler(logging.handlers.RotatingFileHandler):
def __init__(self
, filename
, mode='a'
, maxBytes=0
, backupCount=0
, encoding=None
, delay=False
, rotator_namer=None
, rotator_fun=None
):
super().__init__(filename, mode, maxBytes, backupCount, encoding, delay)
if rotator_namer!= None:
self.namer = rotator_namer
if rotator_fun!=None:
self.rotator = rotator_fun
def set_logging():
def rotator_namer(name):
return name + ".gz"
def rotator_fun(source, dest):
with open(source, "rb") as sf:
data = sf.read()
compressed = gzip.compress(data, 9)
with open(dest, "wb") as df:
df.write(compressed)
os.remove(source)
LOGGING = {
'version': 1
, 'formatters': {
'default_formatter' : {
'class': 'logging.Formatter'
, 'format': '%(asctime)s %(name)-15s %(levelname)-8s %(processName)-10s %(message)s'
}
}
, 'filters': { }
, 'handlers': {
'console': {
'class': 'logging.StreamHandler'
, 'formatter': 'default_formatter'
, 'filters': []
}
, 'rotate': {
'()': MyRotatingFileHandler
, 'filename': 'aalog'
, 'maxBytes': 40
, 'backupCount': 4
, 'rotator_namer': rotator_namer
, 'rotator_fun': rotator_fun
, 'formatter': 'default_formatter'
, 'filters': []
}
}
, 'root': {
'level': 'DEBUG'
, 'handlers': ['console', 'rotate']
}
}
logging.config.dictConfig(LOGGING)
return LOGGING
if __name__ == '__main__':
set_logging()
for n in range(40):
logging.debug(f'Hello {n}')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.