Python 日志类
一个好的日志类可以帮助维护人员很方便的定位问题。
最近在重构公司的打包脚本,第一件事就是写好日志的方法,实际上就是改造下Python自带的logging类,觉得还比较有通用性,决定把代码贴出来。
import os
import json
import logging
import logging.handlers
from sys import stdout
def logger(module_name, log=None, console=True):
"""
日志的级别依次是:debug 、info 、warning 、error 、critical
log 指定日志的输出路径,为None则不输出
console=True,会把日志输出到标准输出
eg:
log = logger('/tmp/server.log')
log.debug('...')
log.exception('exception:') 会额外打印出异常信息
"""
if log is None and console == False:
raise ValueError('<log> or <console> should be appoint')
logger_instance = logging.getLogger(module_name)
if log is not None:
dir_path, file_name = os.path.split(log)
try:
if not os.path.exists(dir_path):
os.makedirs(dir_path)
except Exception:
pass
file_handler = logging.handlers.RotatingFileHandler(
log, maxBytes=20 * 1024 * 1024, backupCount=10)
fmt = '%(asctime)s [%(filename)s:%(lineno)d] %(levelname)s %(message)s'
formatter = logging.Formatter(fmt)
file_handler.setFormatter(formatter)
logger_instance.addHandler(file_handler)
if console:
console_handler = logging.StreamHandler(stdout)
fmt = '[%(filename)s:%(lineno)d](%(process)d:%(threadName)s) %(levelname)s %(message)s'
formatter = logging.Formatter(fmt)
console_handler.formatter = formatter # 也可以直接给formatter赋值
logger_instance.addHandler(console_handler)
logger_instance.setLevel(logging.DEBUG)
return logger_instance
版权声明:本文为博主原创文章,转载请说明出处。http://pipe.b3log.org/blogs/like290/articles/2018/07/31/1533023881644