https://blog.csdn.net/weixin_45912307/article/details/108530372
python日志配置模块模板1
1. ⽇志的作⽤
- 记录程序运⾏状态
- 线上环境所有程序以 deamon 形式运⾏在后台, ⽆法使⽤ print 输出程序状态
- 线上程序⽆⼈值守全天候运⾏, 需要有⼀种能持续记录程序运⾏状态的机制, 以便遇到
问题后分析处理 - 记录统计数据
- 开发时进⾏ Debug (调试)
2. 基本⽤法
import logging
# 设置⽇志格式
fmt = '%(asctime)s %(levelname)7.7s %(funcName)s: %(message)s'
formatter = logging.Formatter(fmt, datefmt="%Y-%m-%d %H:%M:%S")
# 设置 handler
handler = logging.handlers.TimedRotatingFileHandler('myapp.log',
when='D', backupCount=30)
handler.setFormatter(formatter)
# 定义 logger 对象
logger = logging.getLogger("MyApp")
logger.addHandler(handler)
logger.setLevel(logging.INFO)
3. ⽇志的等级
- DEBUG: 调试信息
- INFO: 普通信息
- WARNING: 警告
- ERROR: 错误
- FATAL: 致命错误
4. 对应函数 - logger.debug(msg)
- logger.info(msg)
- import logging
5. ⽇志格式允许的字段 - %(name)s : Logger的名字
- %(levelno)s : 数字形式的⽇志级别
- %(levelname)s : ⽂本形式的⽇志级别
- %(pathname)s : 调⽤⽇志输出函数的模块的完整路径名, 可能没有
- %(filename)s : 调⽤⽇志输出函数的模块的⽂件名
- %(module)s : 调⽤⽇志输出函数的模块名
- %(funcName)s : 调⽤⽇志输出函数的函数名
- %(lineno)d : 调⽤⽇志输出函数的语句所在的代码⾏
- %(created)f : 当前时间, ⽤UNIX标准的表示时间的浮点数表示
- %(relativeCreated)d : 输出⽇志信息时的, ⾃Logger创建以来的毫秒数
- %(asctime)s : 字符串形式的当前时间。默认格式是“2003-07-08 16:49:45,896”。逗号后
⾯的是毫秒 - %(thread)d : 线程ID。可能没有
- %(threadName)s : 线程名。可能没有
- %(process)d : 进程ID。可能没有
- %(message)s : ⽤户输出的消息
6. Django 中的⽇志配置
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
# 格式配置
'formatters': {
'simple': {
'format': '%(asctime)s %(module)s.%(funcName)s: %(message)s',
'datefmt': '%Y-%m-%d %H:%M:%S',
},
'verbose': {
'format': ('%(asctime)s %(levelname)s [%(process)d-%(threadName)s] '
'%(module)s.%(funcName)s line %(lineno)d: %(message)s'),
'datefmt': '%Y-%m-%d %H:%M:%S',
}
},
# Handler 配置
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'level': 'DEBUG' if DEBUG else 'WARNING'
},
'info': {
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': f'{BASE_DIR}/logs/info.log', # 日志保存路径
'when': 'D', # 每天切割日志
'backupCount': 30, # 日志保留 30 天
'formatter': 'simple',
'level': 'INFO',
},
'error': {
'class': 'logging.handlers.TimedRotatingFileHandler',
'filename': f'{BASE_DIR}/logs/error.log', # 日志保存路径
'when': 'W0', # 每周一切割日志
'backupCount': 4, # 日志保留 4 周
'formatter': 'verbose',
'level': 'WARNING',
}
},
# Logger 配置
'loggers': {
'django': {
'handlers': ['console'],
},
'inf': {
'handlers': ['info'],
'propagate': True,
'level': 'INFO',
},
'err': {
'handlers': ['error'],
'propagate': True,
'level': 'WARNING',
}
}
}