日志基础配置文件
日志回转查看:参考:https://blog.csdn.net/B11050729/article/details/132353220
项目使用注解实现
"""
settings.py logging配置
"""
import os
root_dir = os.path.normpath(os.path.join(
os.path.abspath(__file__),
os.pardir,
os.pardir
))
standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
'[%(levelname)s][%(message)s]'
simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
test_format = '%(asctime)s] %(message)s'
# 3、日志配置字典
LOGGING_DIC = {
'version': 1,
'disable_existing_loggers': False,
# 设置日志输出格式
'formatters': {
'standard': {
'format': standard_format
},
'simple': {
'format': simple_format
},
'test': {
'format': test_format
},
},
'filters': {},
# 日志的接收者
'handlers': {
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler', # 打印到屏幕
'formatter': 'simple'
},
'info': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,日志轮转
'formatter': 'standard',
'filename': root_dir + '/log/info.log', # 日志文件
'maxBytes': 1024*1024*500, # 每个日志文件的大小 500M
'backupCount': 3, # 轮转的数量是3
'mode': 'a', # a 追加,覆盖
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
'debug': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,日志轮转
'formatter': 'standard',
'filename': root_dir + '/log/debug.log', # 日志文件
'maxBytes': 1024*1024*500, # 每个日志文件的大小 500M
'backupCount': 3, # 轮转的数量是3
'mode': 'a', # a 追加,覆盖
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
},
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,日志轮转
'formatter': 'standard',
'filename': root_dir + '/log/error.log', # 日志文件
'maxBytes': 1024*1024*500, # 每个日志文件的大小 500M
'backupCount': 3, # 轮转的数量是3
'mode': 'a', # a 追加,覆盖
'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了
}
},
# 日志的生产者
'loggers': {
'console': {
'handlers': ['console'],
'level': 'DEBUG', # loggers(第一层日志级别关限制)--->handlers(第二层日志级别关卡限制)
'propagate': False, # 默认为True,向上(更高level的logger)传递,通常设置为False即可,否则会一份日志向上层层传递
},
'info': {
'handlers': ['console', 'info'],
'level': 'INFO',
'propagate': False,
},
'debug': {
'handlers': ['console', 'debug'],
'level': 'DEBUG',
'propagate': False,
},
'error': {
'handlers': ['error'],
'level': 'ERROR',
'propagate': False,
},
},
}
"""
log.py 装饰器封装
"""
import conf.settings as settings
from logging import config, getLogger
config.dictConfig(settings.LOGGING_DIC)
def log(level = "console"):
def outer(func):
def wrapper(*args, **kwargs):
logger = getLogger(level)
res = None
try:
res = func(*args, **kwargs)
except Exception as e:
logger.exception(e)
return res
return wrapper
return outer
"""
test.py main方法测试
"""
import log
# @log() 默认控制台打印
@log("error") # error.log日志打印
def func():
if None > 1:
print("123")
if __name__ == "__main__":
func()