Django 如何使用logging打印日志

本文介绍了Django中如何利用Python内置的logging模块进行日志记录。详细解释了Logger、Handler、Filter和Formatter的作用,并提供了配置示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Django使用python自带的logging 作为日志打印工具。简单介绍下logging。

logging 是线程安全的,其主要由4部分组成:

  1. Logger
    用户使用的直接接口,将日志传递给Handler
  2. Handler
    控制日志输出到哪里,console,file…
    一个logger可以有多个Handler
  3. Filter
    控制哪些日志可以从logger流向Handler
  4. Formatter
    控制日志的格式

用户使用logging.getLogger([name])获取logger实例。
如果没有名字,返回logger层级中的根logger(root logger)。以相同名字调用该函数总是返回同一个logger实例。这意味着logger实例不需要在应用的各个部分之间传来传去。

Django通过在settings文件中使用LOGGING来定制日志输出(包括定义logger, handler, formatter等)

例如,settings文件中定义如下:

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'formatters': {
        'verbose': {
            'format': '[%(asctime)s] [%(levelname)s] %(message)s'
        },
    },
    'handlers': {
        'console':{
            'level':'INFO',
            'class':'logging.StreamHandler',
            'formatter': 'verbose'
        },
        'file': {
            'level': 'INFO',
            'class': 'logging.FileHandler',
            'filename': 'D:/monitor.log',
            'formatter': 'verbose'
        },
        'email': {
            'level': 'ERROR',
            'class': 'django.utils.log.AdminEmailHandler',
            'include_html' : True,
        }
    },
    'loggers': {
        'django': {
            'handlers': ['console', 'file', 'email'],
            'level': 'INFO',
            'propagate': True,
        },
    },
}

代码中打印日志:

logger = logging.getLogger(‘django’)
logger.info(“This is an error msg”)

[2017-07-15 17:44:51,316] [ERROR] This is an error msg

这样,日志就被打印到终端和文件。

关于django logging 想了解更多,可参考官网
https://docs.djangoproject.com/en/1.11/topics/logging/

### Django 日志配置及使用方法 Django 提供了一个强大的日志框架,允许开发者记录应用程序中的事件以便于调试和监控。以下是关于如何配置和使用 Django日志功能的详细介绍。 #### 配置日志设置 在 Django 中,可以通过 `settings.py` 文件来配置日志系统。默认情况下,Django 已经集成了 Python 的标准库 `logging` 模块[^1]。下面是一个典型的日志配置示例: ```python LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'verbose': { 'format': '{levelname} {asctime} {module} {message}', 'style': '{', }, 'simple': { 'format': '{levelname} {message}', 'style': '{', }, }, 'handlers': { 'file': { 'level': 'DEBUG', 'class': 'logging.FileHandler', 'filename': 'debug.log', 'formatter': 'verbose' }, 'console': { 'level': 'INFO', 'class': 'logging.StreamHandler', 'formatter': 'simple' } }, 'loggers': { 'django': { 'handlers': ['file', 'console'], 'level': 'DEBUG', 'propagate': True, }, 'myapp': { 'handlers': ['file'], 'level': 'ERROR', 'propagate': False, } } } ``` 在这个例子中: - 定义了两种格式化器 (`verbose`, `simple`) 来控制日志消息的显示样式。 - 使用两个处理器 (`file`, `console`) 将日志分别写入文件和打印到终端。 - 设置了两个记录器 (`django`, `myapp`),其中 `django` 是全局的日志记录器,而 `myapp` 则针对特定的应用程序模块[^2]。 #### 创建自定义中间件用于日志记录 为了增强应用的功能并实现更详细的请求/响应跟踪,可以创建一个类似于引用描述中的日志中间件。以下是如何构建这样一个中间件的具体方式: ```python import logging import time try: # 支持 Django >= 1.10 版本 from django.utils.deprecation import MiddlewareMixin except ImportError: # 兼容 Django <= 1.9 版本 MiddlewareMixin = object # 初始化 logger 对象 logger = logging.getLogger(__name__) class LoggingMiddleware(MiddlewareMixin): def process_request(self, request): """处理每次 HTTP 请求前的操作""" request.start_time = time.time() def process_response(self, request, response): """处理每次 HTTP 响应后的操作""" execution_time = time.time() - getattr(request, 'start_time', time.time()) status_code = response.status_code method = request.method path = request.path log_message = f"{method} {path} Status:{status_code}, TimeTaken:{execution_time:.4f}s" if status_code >= 400: logger.error(log_message) else: logger.info(log_message) return response ``` 此代码片段展示了如何通过扩展 `MiddlewareMixin` 类来自定义中间件逻辑,并利用内置的日志工具捕获性能指标以及错误状态的信息[^3]。 #### 实际应用场景下的注意事项 当部署至生产环境时需特别注意调整日志级别以减少不必要的开销;同时也要考虑敏感数据保护措施以免泄露隐私信息给未经授权的人士访问[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值