07.django日志配置
2015 年 11 月 11 日
- logger 记录器,所有日志都要经过的入口
- handler 处理器,接收 logger 的日志,决定 log 是打印的目的,是文件、屏幕,还是其他地方,比如邮件 ELK
- filter 过滤器,过滤你想要的日志(不用)
- formatter 格式化,格式化 handler 的日志格式
一.logger 日志级别
级别 | 值 | 描述 |
---|---|---|
CRITICAL | 50 | 关键错误、消息 |
ERROR | 40 | 错误 |
WARNING | 30 | 警告 |
INFO | 20 | 通知消息 |
DEBUG | 10 | 调试 |
NOTSET | 0 | 无级别 |
二.logger 配置
- logger
'loggers': { 'log名称':{ 'handlers': ['处理器名称1',,'处理器名称2'], 'level': '日志级别', 'propagate': False, },
- handlers
'handlers名称': { 'level': '日志级别', 'class': 'handlers类', 'filename': '文件全路径', 'when': "D", 'interval': 1, 'formatter': 'formatter名称' },
- formatter
"formatter名称": { "format": '%(asctime)s %(name)s %(levelname)s %(pathname)s:%(lineno)d %(module)s:%(funcName)s %(message)s', "datefmt": "%Y-%m-%d %H:%M:%S" },
- format 日志消息格式
格式 | 描述 |
---|---|
%(name)s | 记录器 logger 的名字 |
%(levelno)s | 数据形式的日志记录级别 |
%(levelname)s | 文本形式的日志记录级别 |
%(filename)s | 执行日志记录调用的源文件的文件名 |
%(pathname)s | 执行日志记录调用的源文件的 全路径+文件名 |
%(funcName)s | 执行日志记录调用的函数名称 |
%(module)s | 调用的模块名称,django是 app 的名称 |
%(lineno)d | 记录调用的行号 |
%(created)s | 执行日志记录的时间 |
%(asctime)s | 日期时间 |
%(msecs)s | 毫秒部分 |
%(thread)s | 线程ID |
%(threadName)s | 线程名称 |
%(process)d | 进程ID |
%(message)s | 记录的消息,自定义内容 |
- 按时间轮转的参数
https://docs.python.org/3/library/logging.handlers.html#timedrotatingfilehandler
格式 | 描述 |
---|---|
‘S’ | Seconds |
‘M’ | Minutes |
‘H’ | Hours |
‘D’ | Days |
‘W0’ – ‘W6’ | Weekday (0=Monday) |
‘midnight’ | Roll over at midnight |
三.使用
- 3.1 定义一个 logger
'loggers': { 'mylogger':{ 'handlers': ['console'], 'level': 'DEBUG' },
- 3.2 配置 handler
'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler',# 写到屏幕 'formatter': 'simple' },
- 3.3 某个 view 使用这个 logger
import logging logger = logging.getLogger('mylogger')
- 3.4 视图内使用自定义输出级别和内容
logger.debug('视图的debuglog')
- 3.5 增加一个文件 handler
'file': { 'level' :'DEBUG', 'class': 'logging.FileHandler', 'filename': '/tmp/debug.log', 'formatter': 'simple', }
- 3.6 logger 中使用多个 handler, 关闭向上传播
'mylogger':{ 'handlers': ['console','file'], 'level': 'DEBUG', 'propagate': False, },
- 3.7 输出
DEBUG DEBUG 日志 ERROR ERROR 日志 DEBUG debug log ERROR error log System check identified no issues (0 silenced). May 22, 2020 - 08:16:34 Django version 3.0.6, using settings 'ops.settings' Starting development server at http://0.0.0.0:8000/ Quit the server with CONTROL-C. DEBUG 视图的debuglog
/tmp/debug.log 也会有这个日志
四.定义一个日志输出格式,并使用
"default": { "format": '%(asctime)s %(pathname)s:%(lineno)d %(module)s:%(funcName)s ' '%(levelname)s- %(message)s', "datefmt": "%Y-%m-%d %H:%M:%S" },
- 输出
2020-05-22 08:31:46 /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:20 views:get DEBUG- 视图的debuglog
五. 定义django log,不同模块分开存放到不同文件,关闭向上传播,自定义的内容在最上级日志器记录中
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}', 'style': '{', }, 'simple': { 'format': '{levelname} {message}', 'style': '{', }, "default": { "format": '%(asctime)s %(name)s %(pathname)s:%(lineno)d %(module)s:%(funcName)s ' '%(levelname)s- %(message)s', "datefmt": "%Y-%m-%d %H:%M:%S" }, }, 'handlers': { 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', 'formatter': 'default' }, 'file': { 'level': 'DEBUG', 'class': 'logging.handlers.TimedRotatingFileHandler', 'filename': '/tmp/debug.log', 'when': "D", 'interval': 1, 'formatter': 'default' }, "request": { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': '/tmp/request.log', 'formatter': 'default' }, "server": { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': '/tmp/server.log', 'formatter': 'default' }, "root": { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': '/tmp/root.log', 'formatter': 'default' }, "db_backends": { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': '/tmp/db_backends.log', 'formatter': 'default' }, "autoreload": { 'level': 'INFO', 'class': 'logging.FileHandler', 'filename': '/tmp/autoreload.log', 'formatter': 'default' } }, 'loggers': { 'mylogger':{ 'level': 'DEBUG', 'handlers': ['console','file'], 'propagate': True, }, "django": { "level": "DEBUG", "handlers": ["console", "file"], 'propagate': False, }, "django.request": { "level": "DEBUG", "handlers": ["request"], 'propagate': False, }, "django.server": { "level": "DEBUG", "handlers": ["server"], 'propagate': False, }, "django.db.backends": { "level": "DEBUG", "handlers": ["db_backends"], 'propagate': False, }, "django.utils.autoreload": { "level": "INFO", "handlers": ["autoreload"], 'propagate': False, } }, 'root': { "level": "DEBUG", "handlers": ["root"], } }
输出
-rw-r--r-- 1 jenvid docker 0 5月 22 15:47 request.log -rw-r--r-- 1 jenvid docker 81K 5月 23 12:57 debug.log.2020-05-23_04-57 -rw-r--r-- 1 jenvid docker 1.9K 5月 23 13:21 autoreload.log -rw-r--r-- 1 jenvid docker 9.4K 5月 23 13:21 db_backends.log -rw-r--r-- 1 jenvid docker 9.1K 5月 23 13:21 server.log -rw-r--r-- 1 jenvid docker 1.5K 5月 23 13:21 root.log -rw-r--r-- 1 jenvid docker 632 5月 23 13:21 debug.log
cat root.log
2020-05-22 10:20:25 mylogger /home/jenvid/PycharmProjects/django/ops/apps/idcs/views.py:13 views: DEBUG- DEBUG 日志 2020-05-22 10:20:25 mylogger /home/jenvid/PycharmProjects/django/ops/apps/idcs/views.py:14 views: ERROR- ERROR 日志 2020-05-22 10:20:25 mylogger /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:13 views: DEBUG- debug log 2020-05-22 10:20:25 mylogger /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:14 views: ERROR- error log 2020-05-22 10:20:30 mylogger /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:20 views:get DEBUG- 视图的debuglog 2020-05-23 04:57:57 mylogger /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:20 views:get DEBUG- 视图的debuglog 2020-05-23 05:21:39 asyncio /usr/lib/python3.7/asyncio/selector_events.py:53 selector_events:__init__ DEBUG- Using selector: EpollSelector 2020-05-23 05:21:40 mylogger /home/jenvid/PycharmProjects/django/ops/apps/idcs/views.py:13 views: DEBUG- DEBUG 日志 2020-05-23 05:21:40 mylogger /home/jenvid/PycharmProjects/django/ops/apps/idcs/views.py:14 views: ERROR- ERROR 日志 2020-05-23 05:21:40 mylogger /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:13 views: DEBUG- debug log 2020-05-23 05:21:40 mylogger /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:14 views: ERROR- error log 2020-05-23 05:21:44 mylogger /home/jenvid/PycharmProjects/django/ops/apps/users/views.py:20 views:get DEBUG- 视图的debuglog