import logging
from logging import handlers
class Logger(object):
#日志级别关系映射
level_relations = {
'debug':logging.DEBUG,
'info':logging.INFO,
'warning':logging.WARNING,
'error':logging.ERROR,
'crit':logging.CRITICAL
}
def __init__(self, filename, level='info', when='D', backCount=3, fmt='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s'):
self.logger = logging.getLogger(filename)
format_str = logging.Formatter(fmt)
self.logger.setLevel(self.level_relations.get(level))
sh = logging.StreamHandler()
sh.setFormatter(format_str) # 设置屏幕上显示的格式
th = handlers.TimedRotatingFileHandler(filename=filename, when=when, backupCount=backCount, encoding='utf-8') # 往文件里写入#指定间隔时间自动生成文件的处理器
th.setFormatter(format_str) # 设置文件里写入的格式
self.logger.addHandler(sh) # 把对象加到logger里
self.logger.addHandler(th)
# 简单配置
import sys
import os
from loguru import logger
rootPath = os.path.abspath(os.path.dirname(os.path.dirname(__file__)))
# 设置日志在控制台的输出
config = {
"handlers": [
{"sink": sys.stdout, "level": 'ERROR', 'backtrace': True, 'diagnose': True},
{"sink": sys.stdout, "level": 'INFO', 'backtrace': True, 'diagnose': True},
{"sink": rootPath + '/logs/{time:YYYYMMDD}.log', "level": 'INFO', "encoding": 'utf8', 'rotation': '00:00', 'backtrace': True, 'diagnose': True},
{"sink": rootPath + '/logs/{time:YYYYMMDD}_warn.log', "level": 'WARNING', "encoding": 'utf8', 'rotation': '00:00', 'backtrace': True, 'diagnose': True}
]
}
logger.configure(**config)
if __name__ == '__main__':
Logger('../logs/error.log', level='error').logger.error('error')
print(11)
参考推荐:logging模块
该博客介绍了Python中logging模块和loguru库的日志配置方法。通过示例展示了如何设置不同级别的日志输出,包括控制台和文件,并使用TimedRotatingFileHandler实现日志文件按日期轮转。同时,也提供了loguru的配置方式,用于控制台和文件的日志记录,以及日志文件的按日期切分。
476

被折叠的 条评论
为什么被折叠?



