python日志模块
python的日志模块使用logging,如果想要输出符合自己的预期,需要重新定义,废话不多说,直接贴代码。
from logging.handlers import TimedRotatingFileHandler
import inspect
import logging
import os
def log(logName = 'app.log'):
logName = logName
this_file = inspect.getfile(inspect.currentframe())
path = os.path.abspath(os.path.dirname(this_file))
os.makedirs(f'{path}/AppLog', exist_ok=True)
Formatter = '%(asctime)s %(threadName)s %(levelname)s %(message)s'
logFilePath = f'{path}/AppLog/{logName}'
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
formatter = logging.Formatter(Formatter)
# 不使用默认日志,要clear handlers
# logger.handlers.clear()
if not logger.handlers:
# 增加heard,输出到控制台
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.DEBUG)
stream_handler.setFormatter(formatter)
# 添加日志策略方法
time_handler = TimedRotatingFileHandler(logFilePath,
encoding='utf-8',
when="midnight",
backupCount=20)
# 设置文件写入格式
time_handler.setFormatter(formatter)
# add handler
logger.addHandler(time_handler)
logger.addHandler(stream_handler)
return logger
handler = TimedRotatingFileHandler(logFilePath, when="midnight", interval=1, backupCount=20) 定义写入日志的策略:
1.每天一个日志文件。
2.超过20个,删除最早生成的日志。
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') 定义日志输出的格式
log().debug('Hello World...')
日志输出:
定义输出日志格式:
%(name)s:Logger的名字
%(levelno)s:打印日志级别的数值
%(levelname)s:打印日志级别的名称
%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s:打印当前执行程序名
%(funcName)s:打印日志的当前函数
%(lineno)d:打印日志的当前行号
%(asctime)s:打印日志的时间
%(thread)d:打印线程ID
%(threadName)s:打印线程名称
%(process)d:打印进程ID
%(message)s:打印日志信息