我有三个记录器,用于三种不同的格式,但所有记录器都将使用相同的旋转文件处理程序。
from logging.handlers import RotatingFileHandler
def create_handler(filename):
handler = RotatingFileHandler(filename, mode='a', maxBytes=10000, backupCount=100, encoding='utf-8', delay=0)
handler.setLevel(logging.INFO)
return handler
def get_logger1(handler):
logger = logging.getLogger('name1')
logger.setLevel(logging.INFO)
for hdlr in logger.handlers[:]: # remove all old handlers
logger.removeHandler(hdlr)
handler.setFormatter(logging.Formatter("\n%(asctime)s::LOG1::%(levelname)-8s:::%(message)s"))
logger.addHandler(handler)
return logger
def get_logger2(handler):
logger = logging.getLogger('name2')
logger.setLevel(logging.INFO)
for hdlr in logger.handlers[:]: # remove all old handlers
logger.removeHandler(hdlr)
handler.setFormatter(logging.Formatter("\n%(asctime)s::LOG2::%(levelname)-8s:::%(message)s"))
logger.addHandler(handler)
return logger
def get_logger3(handler):
logger = logging.getLogger('name3')
logger.setLevel(logging.INFO)
for hdlr in logger.handlers[:]: # remove all old handlers
logger.removeHandler(hdlr)
handler.setFormatter(logging.Formatter("\n%(asctime)s::LOG3::%(levelname)-8s:::%(message)s"))
logger.addHandler(handler)
return logger
handler = create_handler("file.log")
logger1 = get_logger1(handler)
logger2 = get_logger2(handler)
logger3 = get_logger3(handler)
logger1.info("from logging1")
logger2.info("from logging2")
logger3.info("from logging3")
结果是
2021-03-12T22:18:41.631-05:00::::LOG3::INFO :::from logging1
2021-03-12T22:18:41.631-05:00::::LOG3::INFO :::from logging2
2021-03-12T22:18:41.631-05:00::::LOG3::INFO :::from logging3
代替
2021-03-12T22:18:41.631-05:00::::LOG1::INFO :::from logging1
2021-03-12T22:18:41.631-05:00::::LOG2::INFO :::from logging2
2021-03-12T22:18:41.631-05:00::::LOG3::INFO :::from logging3
我认为唯一的选择是检查记录器名称,比如它来自 name1
然后使用 "\n%(asctime)s::LOG1::%(levelname)-8s:::%(message)s"
我可以创建三个不同的处理程序,然后问题是旋转文件处理程序不起作用
我需要将来自三个不同格式的不同记录器的消息发送到旋转文件处理程序