Django Logging
Django Logging
組成部分
Loggers
Handlers
Filters
Formatters
Loggers
loggers是記錄系統的入口。他具有日志級別,定義的日志級別如下
DEBUG:用于調試目的的低級系統信息
INFO: 一般系統信息
WARNING: 警告信息
ERROR:錯誤信息
CRITICAL:關鍵錯誤信息
NOTEST: 記錄所有
寫入logger的每條消息都是日志記錄。每個日志記錄還具有一個日志級別,表示該消息的嚴重性。日志記錄還可以包含描述正在記錄會見的有用元數據。這可以包括諸如堆棧跟蹤或錯誤代碼之類的詳細信息。
如果消息日志級別達到或超過loggers本身的日志級別,則進行下一步處理,如果沒有,則忽略。
一旦記錄器確定需要處理消息,他就會傳遞給Handler。
Handler
Handler是負責進行處理。例如將消息寫入屏幕,文件或者socket。
Handler也具有日志級別,如果未達到Handeler的日志級別,則忽略
loggers可以有多個Handler,可以定義不同的日志級別。
Filters
Filters用于提供對從loggers到Handler的日志記錄傳遞的額外控制。
默認情況下,處理所有滿足日志級別要求的任何日志消息。也可以自定義其他條件
Formatters
格式化輸出。格式化程序通常由包含LogRecord屬性的Python格式化字符串組成
配置日志記錄
默認情況下Django使用dictConfig格式,配置日志記錄。
參考網址
https://docs.python.org/3/library/logging.handlers.html
dictConfig必填
version 目前唯一有效的值為1
其他都是可選的
如果dictConfig中的disable_existing_loggers鍵LOGGING設置為True(默認值),則將禁用默認配置中的所有記錄器。已禁用的記錄器與已刪除的記錄器不同;?記錄器仍然存在,但會默默地丟棄記錄到它的任何內容,甚至不會將條目傳播到父記錄器。因此你應該非常小心使用;?它可能不是你想要的。相反,您可以設置到和重新定義的部分或全部的默認記錄器;?或者您可以設置?到和處理日志記錄配置己。'disable_existing_loggers':?Truedisable_existing_loggersFalseLOGGING_CONFIGNone
示例文件
LOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'file': {'level': 'DEBUG','class': 'logging.FileHandler','filename': '/path/to/django/debug.log',},},'loggers': {'django': {'handlers': ['file'],'level': 'DEBUG','propagate': True,},}, }?
logging.FileHandler 發送日志輸出到磁盤文件 logging.StreamHandler 發送日志輸出sys.stdout的,sys.stderr或任何類文件對象logging.NullHandler 不做任何輸出 propagate 向上級傳遞 logging.handlers.RotatingFileHandler 根據日志大小進行日志輪詢
代碼中打印日志 import logging logger = logging.getLogger("django") logger.info("hello word!")
?
?
?
?
?打印日志輸出到屏幕
import osLOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'console': {'class': 'logging.StreamHandler',},},'loggers': {'django': {'handlers': ['console'],'level': os.getenv('DJANGO_LOG_LEVEL', 'INFO'),},},}
?
復雜的日志格式
LOGGING = {'version': 1,'disable_existing_loggers': False,'formatters': {'verbose': {'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'},'simple': {'format': '%(levelname)s %(message)s'},},'filters': {'special': {'()': 'project.logging.SpecialFilter','foo': 'bar',},'require_debug_true': {'()': 'django.utils.log.RequireDebugTrue',},},'handlers': {'console': {'level': 'INFO','filters': ['require_debug_true'],'class': 'logging.StreamHandler','formatter': 'simple'},'mail_admins': {'level': 'ERROR','class': 'django.utils.log.AdminEmailHandler','filters': ['special']}},'loggers': {'django': {'handlers': ['console'],'propagate': True,},'django.request': {'handlers': ['mail_admins'],'level': 'ERROR','propagate': False,},'myproject.custom': {'handlers': ['console', 'mail_admins'],'level': 'INFO','filters': ['special']}} }?
轉載于:https://www.cnblogs.com/lfdblog/p/10033403.html
總結
以上是生活随笔為你收集整理的Django Logging的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker中运行EOS FOR MAC
- 下一篇: JAVA代码实现多级树结构封装对象