Django之logging日志

简介

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

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

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

使用

项目里sesetti.py里配置

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

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

BASE_LOG_DIR = os.path.join(BASE_DIR, "log")
LOGGING = {
    'version': 1,  # 保留字
    'disable_existing_loggers': False,  # 禁用已经存在的logger实例
    # 日志文件的格式
    'formatters': {
        # 详细的日志格式
        'standard': {
            'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]'
                      '[%(levelname)s][%(message)s]'
        },
        # 简单的日志格式
        'simple': {
            'format': '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
        },
        # 定义一个特殊的日志格式
        'collect': {
            'format': '%(message)s'
        }
    },
    # 过滤器
    'filters': {
        'require_debug_true': {
            '()': 'django.utils.log.RequireDebugTrue',
        },
    },
    # 处理器
    'handlers': {
        # 在终端打印
        'console': {
            'level': 'DEBUG',
            'filters': ['require_debug_true'],  # 只有在Django debug为True时才在屏幕打印日志
            'class': 'logging.StreamHandler',  #
            'formatter': 'simple'
        },
        # 默认的
        'default': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
            'filename': os.path.join(BASE_LOG_DIR, "xxx_info.log"),  # 日志文件
            'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M
            'backupCount': 3,  # 最多备份几个
            'formatter': 'standard',
            'encoding': 'utf-8',
        },
        # 专门用来记错误日志
        'error': {
            'level': 'ERROR',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
            'filename': os.path.join(BASE_LOG_DIR, "xxx_err.log"),  # 日志文件
            'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M
            'backupCount': 5,
            'formatter': 'standard',
            'encoding': 'utf-8',
        },
        # 专门定义一个收集特定信息的日志
        'collect': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,自动切
            'filename': os.path.join(BASE_LOG_DIR, "xxx_collect.log"),
            'maxBytes': 1024 * 1024 * 50,  # 日志大小 50M
            'backupCount': 5,
            'formatter': 'collect',
            'encoding': "utf-8"
        }
    },
    'loggers': {
       # 默认的logger应用如下配置
        '': {
            'handlers': ['default', 'console', 'error'],  # 上线之后可以把'console'移除
            'level': 'DEBUG',
            'propagate': True,  # 向不向更高级别的logger传递
        },
        # 名为 'collect'的logger还单独处理
        'collect': {
            'handlers': ['console', 'collect'],
            'level': 'INFO',
        }
    },
}

views.py里使用

import logging
# 生成一个以当前文件名为名字的logger实例
logger = logging.getLogger(__name__)
# 生成一个名为collect的logger实例
collect_logger = logging.getLogger("collect")

def index(request):
    logger.debug("一个萌萌的请求过来了。。。。")
    logger.info("一个更萌的请求过来了。。。。")
    logger.debug("这是app01里面的index视图函数")

    collect_logger.info("用户1:河南")

    return HttpResponse("OK")

流程

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏技术支持log

SELinux导致的导致的服务端口监听失败

SELinux (Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。...

7041
来自专栏康怀帅的专栏

硬盘安装 CoreOS 三节点集群

本例在 VirtualBox 虚拟机,以 ISO 或者 PXE 或者 iPXE 模式启动 CoreOS,然后安装到硬盘。 更新记录 2017/12:默认启用 D...

4156
来自专栏blackpiglet

配置 SSH 端口转发,并设置开机启动

为了降低运维成本,提高可靠性,物理服务器往往都不再部署在本地,IDC 托管成了更多企业的选择。服务器托管在 IDC 后,出于安全的考虑,不会直接开放所有服务器的...

2013
来自专栏小白安全

小白博客 kali Linux渗透测试下Vega扫描工具的使用方法

Vega是一个免费的开源扫描器和测试平台,用于测试Web应用程序的安全性。Vega可以帮助您查找和验证SQL注入,跨站点脚本(XSS),无意中泄露的敏感信息以...

4779
来自专栏曾倩倩的专栏

su命令cannot set groups: Operation not permitted的解决方法

问题场景: user_00@hadoop-10-125-224-102:> su root Password: su: cannot set groups:...

6858
来自专栏Jack-Cui

Ubuntu12.04下配置Eclipse+PyDev

开发平台:Ubuntu12.04 IDE:Eclipse3.7.2 python版本:python3.4.4     搭建Eclipse+PyDev的开发环境,...

2150
来自专栏pangguoming

CentOS7配置Mysql热备份

②.[root@localhostsrc]#wget http://repo.mysql.com/mysql57-community-release-el7-8...

1452
来自专栏哎_小羊

Java Maven项目之Nexus私服搭建和版本管理应用

目录: Nexus介绍 环境、软件准备 Nexus服务搭建 Java Maven项目版本管理应用 FAQ 1、Nexus介绍 Nexus是一个强大的Mave...

5718
来自专栏散尽浮华

linux系统下的权限知识梳理

下面对linux系统下的有关权限操作命令进行了梳理总结,并配合简单实例进行说明。 linux中除了常见的读(r)、写(w)、执行(x)权限以外,还有其他的一些特...

3056
来自专栏情情说

Netty事件监听和处理(下)

上一篇 介绍了事件监听、责任链模型、socket接口和IO模型、线程模型等基本概念,以及Netty的整体结构,这篇就来说下Netty三大核心模块之一:事件监听和...

4255

扫码关注云+社区

领取腾讯云代金券