Django日志 logging

Django使用python内建的logging模块打印日志,python的logging配置由下面的四个方面组成:

记录器: Logger
处理程序: Handler
过滤器: Filter
格式化: Formatter



记录器 Logger
Logger 为日志系统的入口。每个logger命名都是bucket,你可以向这个bucket写入需要处理的消息。
每个logger 都有一个日志级别。日志级别表示该logger 将要处理的消息的严重性。Python 定义以下几种日志级别:

DEBUG:用于调试目的的底层系统信息
INFO:普通的系统信息
WARNING:表示出现一个较小的问题。
ERROR:表示出现一个较大的问题。
CRITICAL:表示出现一个致命的问题。


写入logger 的每条消息都是一条日志。每条日志也具有一个日志级别,它表示对应的消息的严重性。
每个日志记录还可以包含描述正在打印的事件的元信息。
当一条消息传递给logger 时,消息的日志级别将与logger 的日志级别进行比较。
如果消息的日志级别大于等于logger 的日志级别,该消息将会往下继续处理。如果小于,该消息将被忽略。
Logger 一旦决定消息需要处理,它将传递该消息给一个Handler。



Logger日志级别
级别       值      描述
CRITICAL   50       关键错误/消息
ERROR      40       错误
WARNING    30       警告消息
INFO       20       通知消息
DEBUG      10       调式
NOTSET     0        无级别


Logger的配置
logger 对应的值是个字典,其每一个键都是logger的名字,每一个值又是个字典,描述了如何配置对应的Logger实例。

level (可选的)。logger的级别。
propagate (可选的)。logger的传播设置,是否向上传播日志。
filters (可选的)。logger的filter的标识符的列表。
handlers (可选的)。logger的handler的标识符的列表。
 

在settings.py中配置日志

LOGGING = {
    'loggers': {
        'devops': {
            'handlers': ['file_handler', 'console_handler'],
            'level': 'DEBUG',
        },
    },
}

想要了解更多logger,详情请参考:https://yiyibooks.cn/xx/python_352/library/logging.html#logger-objects 



处理程序 Handler
Handler 决定如何处理logger 中的每条消息。它表示一个特定的日志行为,例如将消息写到屏幕上、写到文件中或者写到网络socket
与logger 一样,handler 也有一个日志级别。如果消息的日志级别小于handler 的级别,handler 将忽略该消息
Logger 可以有多个handler,而每个handler 可以有不同的日志级别。利用这种方式,可以根据消息的重要性提供不同形式的处理

Handler示例
LOGGING = {
    'handlers':{
        'devops':{
        'level':'DEBUG',
        'class':'logging.StreamHandler',
        'formatter':'simple',
        }
    }
}

想要了解更多handler,详情请参考:https://yiyibooks.cn/xx/python_352/library/logging.html#handler-objects 
想要了解更多loggin-handler,详情请参考:https://yiyibooks.cn/xx/python_352/library/logging.handlers.html 



Filters 过滤器
Filter 用于对从logger 传递给handler 的日志记录进行额外的控制。
默认情况下,满足日志级别的任何消息都将被处理。通过安装一个filter,你可以对日志处理添加额外的条件。
例如,你可以安装一个filter,只允许处理来自特定源的ERROR 消息
Filters 还可以用于修改将要处理的日志记录的优先级。
例如,如果日志记录满足特定的条件,你可以编写一个filter 将日志记录从ERROR 降为WARNING
Filters 可以安装在logger 上或者handler 上;多个filter 可以串联起来实现多层filter 行为


格式化(Formatters)
日志记录需要转换成文本。Formatter表示文本的格式。Fomatter通常由包含日志记录属性的Python格式字符串组成;你也可以编写自定义的fomatter来实现自己的格式。

LOGGING = { 
    'formatters': { 
        'devops':{ 
            'format': '%(asctime)s - %(pathname)s:%(lineno)d[%(levelname)s] - %(message)s' 
        } 
        'simple': { 
            'format': '%(asctime)s %(levelname)s %(message)s' 
        },
     }, 
} 


Format日志消息格式                       描述
%(name)s                                记录器的名称
%(levelno)s                                数字形式的日志记录级别
%(levelname)s                              日志记录级别的文本名称
%(filename)s                              执行日志记录调用的源文件的文件名称
%(pathname)s                              执行日志记录调用的源文件的路径名称
%(funcName)s                              执行日志记录调用的函数名称
%(module)s                               执行日志记录调用的模块名称
%(lineno)s                               执行日志记录调用的行号
%(created)s                              执行日志记录的时间
%(asctime)s                              日期和时间
%(msecs)s                               毫秒部分
%(thread)s                               线程ID
%(threadName)s                           线程名称
%(process)s                              进程ID
%(message)s                              记录的消息 


更多formatters,详情请参考:https://yiyibooks.cn/xx/python_352/library/logging.html#formatter-objects 



'disable_existing_loggers': False,          #一般情况下设置为False,表示不禁用Django的默认配置




配置范例:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d][%(levelname)s]- %(message)s'
        },
    },
    'handlers': {
        'default': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'logs/archery.log',
            'maxBytes': 1024 * 1024 * 100,  # 5 MB
            'backupCount': 5,
            'formatter': 'verbose',
        },
        'django-q': {
            'level': 'DEBUG',
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'logs/qcluster.log',
            'maxBytes': 1024 * 1024 * 100,  # 5 MB
            'backupCount': 5,
            'formatter': 'verbose',
        },
        'console': {
            'level': 'DEBUG',
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        }
    },
    'loggers': {
        'default': {  # default日志
            'handlers': ['console', 'default'],
            'level': 'WARNING'
        },
        'django-q': {  # django_q模块相关日志
            'handlers': ['console', 'django-q'],
            'level': 'WARNING',
            'propagate': False
        },
        'django_auth_ldap': {  # django_auth_ldap模块相关日志
            'handlers': ['console', 'default'],
            'level': 'WARNING',
            'propagate': False
        },
        # 'django.db': {  # 打印SQL语句,方便开发
        #     'handlers': ['console', 'default'],
        #     'level': 'DEBUG',
        #     'propagate': False
        # },
        # 'django.request': {  # 打印请求错误堆栈信息,方便开发
        #     'handlers': ['console', 'default'],
        #     'level': 'DEBUG',
        #     'propagate': False
        # },
    }
}




 

posted @ 2021-01-14 17:37  屠魔的少年  阅读(8)  评论(0)    收藏  举报