社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
在Django中,日志输出的信息有Request信息、Settings配置、Traceback信息。
日志产生的步骤:
日志模块配置
1.格式器formatter
2.过滤器filter
3.处理器handler
4.日志实例logger
1.格式器formatter
功能:主要用于配置日志格式,沿用python语言里面的格式属性
属性 | 描述 |
---|---|
asctime | 时间(2020-01-01 11:00:00,000) |
threadName | 线程名字(Thread-1) |
thread | 线程id(整型) |
pathname | 打印日志的文件路径 |
funcName | 打印日志的函数名字 |
lineno | 打印日志的代码行数 |
levelname | 打印日志级别(DEBUG、INFO) |
message | 日志具体信息 |
例子:
'%(asctime)s [%(threadName)s: %(thread)d] %(pathname)s: %(funcName)s: %(lineno)d %(levelname)s - %(message)s'
2019-02-10 16:02:12,201 [MainThread: 6376]D:/django_project/backend_ch1_sec1/ops/logdemo.py: logdemo: 13 INFO - hello logging
2.过滤器filter
功能:对日志进行匹配和过滤,可自定义过滤器
3.处理器handler
功能:对日志进行处理,比如:写进文件,终端打印;常用的处理器有文件处理器、终端处理器。
4.日志实例logger
功能:在Python代码里面打印日志的入口点,在打印的时候可设置日志的级别(DEBUG、INFO、WARNING、ERROR、CRITICAL)
综合实例:
1.分别定义了:standard日志格式器、test过滤器、console_handler和file_handler处理器、django日志实例
import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
LOG_DIR = os.path.join(BASE_DIR, 'log')
if not os.path.exists(LOG_DIR):
os.makedirs(LOG_DIR)
LOGGING = {
'version': 1,
# 日志格式器配置
'formatters': {
'standard': {
'format': '%(asctime)s [%(threadName)s: %(thread)d]'
'%(pathname)s: %(funcName)s: %(lineno)d %(levelname)s - %(message)s'
}
},
# 过滤器test配置
'filters': {
'test': { # 过滤器名
'()': 'ops.TestFilter' # 过滤器位置
}
},
# 处理器配置
'handlers': {
# 终端处理器配置
'console_handler': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'standard' # 使用上面定义的standard格式器
},
# 文件处理器配置
'file_handler': {
'level': 'DEBUG',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(LOG_DIR, 'backend_ch1_sec1.log'),
'maxBytes': 1024*1024*1024, # 达到1G自动分割
'backupCount': 5, # 保存备份文件的数量
'formatter': 'standard', # 使用上面定义的standard格式器
'encoding': 'utf-8' # 指定文件编码
}
},
# 配置日志实例
'loggers': {
'django': { # 日志实例名
'handlers': ['console_handler', 'file_handler'],
'filters': ['test'],
'level': 'DEBUG'
}
}
}
2.自定义过滤器
ops/init.py
import logging
class TestFilter(logging.Filter):
def filter(self, record):
if '***' in record.msg:
return False
else:
return True
pass
3.日志实例的使用
import os
import django
import logging
# 建立Django环境
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend_ch1_sec1.settings')
django.setup()
def logdemo():
# django是在settings中logger的名称
logger = logging.getLogger('django')
logger.info('hello logging') # 终端+文本打印
logger.debug('hello debug') # 文本打印
logger.info('hello filter ***') # 均不打印
if __name__ == '__main__':
logdemo()
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!