django中的logging

Django使用Python的内置logging模块执行系统日志记录

1.python中的logging

import logging

# loggers:记录器
# 记录器是进入记录系统的入口点,每个记录器都是一个命名的存储痛,可以将消息写入其中

# 日志级别:
# DEBUG:用于调试的低级系统信息
# INFO:一般系统信息
# WARNING:描述发生的小问题信息
# ERROR:描述已经发生的主要问题信息
# CRIRICAL:描述已经发生的严重问题信息

# 将消息提供给记录器时,会将消息的日志级别与记录器的日志级别进行比较
# 如果消息的日志级别等于或超过记录器本身的日志级别,则将对消息进一步处理,否则忽略该消息


# 处理程序:
# 一个记录器可以具有多个处理程序,并且每个处理程序可以具有不同的日志级别,可以根据消息的重要性提供不同形式的通知
# 例子:第一个处理程序将消息ERROR和CRITICAL消息转发到处理,第二个处理程序将所有消息记录到文件中,以供以后分析


# 过滤器:
# 过滤器用于提供从记录器将处理程序传递到日志记录的附加控制
# 默认情况下,将处理所有符合日志级别要求的日志消息,有过滤器后:可以在日志记录过程中放置其他条件

# 过滤器还可以用于在发出之前修改日志记录,例如:在日志处理之前将ERROR日志记录降低到WAENING

# 过滤器可以用于记录器活着日志记录;一个链中可以使用多个过滤器来执行多个过滤操作


#  格式化:
# 日志记录需要以文本的形式呈现,格式化描述了该文本的格式


#  使用记录

# 配置记录器,处理程序,过滤器和格式化
# 实例化记录器。记录器实例由名称标识,名称用于标识记录器以进行配置,一般为__name__
# 记录器名称通常是__name__:其中包含记录器的python模块名称。
logger = logging.getLogger(__name__)

# 发生错误
bad_mess='发生了错误'

def mylog(request):
    # 记录日志的零界点
    if  bad_mess:
        logger.error("")

# 命名记录器

# 若使用其他方式来组织记录消息,则可以提供任何用.分离的名称来标识记录器
# logger=logging.getLogger(project.interesting.stuff)

# project记录器是project.interesting的父记录器
# project.interesting记录器是project.interesting.stuff的父记录器
# 即在project名称空间中定义的记录器将捕获在project.interesting和project.interesting.stuff记录器上发布的所有记录消息。


# 日志调用的方法
# 记录器实例包含每个默认日志级别的输入方法:
logger.debug()
logger.info()
logger.warning()
logger.error()
logger.critical()

# 手动发出具有特定日志级别的日志消息
logger.log()
# 创建一个ERROR包装当前异常堆栈框架的级别日志记录消息
logger.exception()

2.日志配置:

#(1)django提供了dictConfig格式
#(2)使用LOGGING定义日志记录设置的字典
#这些设置描述了您希望在日志记录设置中使用的日志记录器,处理程序,过滤器和格式化程序,以及希望这些组件具有的日志级别和其他属性

#日志记录配置为常规Django setup()函数的一部分。因此,可以确定记录器始终可以在项目代码中使用。

LOGGING的记录配置将会与Django的默认日志记录配置合并

将django所有的日志文件从名为loggers记录器写入本地文件

LOGGING={
    'version':1,
    # 若此处为True:则将禁用默认配置中的所有记录器,记录器仍将存在,但会静默丢弃记录到它的所有内容,甚至不会将条目传播到父记录器
    'disable_existing_loggers':False,
    # handlers处理器:配置日志文件路径
    'handlers':{
        'file':{
            'level':'DEBUG',
            # 处理log 的类,FileHandler:打印到文件
            'class':'logging.FileHandler',
            # 文件路径
            'filename':'/path/debug.log'
        }
    },
    # loggers记录器:将django中的所有记录器写入文件file(即写入handlers记录器中的file的配置文件)
    'loggers':{
        # django记录器:django层次结构中消息的全部记录器:django.request、django.server.....等
        'django':{
            'handlers':['file'],
            'level':'DEBUG',
            'propagate':True
        }
    }

}

详细配置

LOGGING = {
    'version': 1,
    # 若此处为True:则将禁用默认配置中的所有记录器,记录器仍将存在,但会静默丢弃记录到它的所有内容,甚至不会将条目传播到父记录器
    'disable_existing_loggers': False,
    # 格式化器
    'formatters': {
        'verbose': {
            # 格式   :  级别         时间      模块名    进程id       线程id    log内容
            'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
            # 选择{,是指 {levelname} 这种形式
            'style': '{',
        },
        'simple': {
            'format': '{levelname} {message}',
            'style': '{',
        },
    },
    # 过滤器
    # 'filters': {
    #         'special': {
    #             '()': 'project.logging.SpecialFilter',
    #             'foo': 'bar',
    #         },
    #         'require_debug_true': {
    #             '()': 'django.utils.log.RequireDebugTrue',
    #         },
    #     },
    # 处理程序
    # handlers:配置日志文件路径
    'handlers': {
        # debug时的日志文件
        'file_debug': {
            'level': 'DEBUG',
            # 使用名为require_debug_true过滤器
            # 'filters': ['require_debug_true'],

            # class是指定处理log的类,FileHandler:打印到文件
            'class': 'logging.FileHandler',
            # 使用名为 verbose 输出格式
            'formatter': 'verbose',
            # 文件路径
            'filename': '/Users/apple/PycharmProjects/IPSS/debug.log'
        },
        # error时的日志文件
        'file_error': {
            'level': 'ERROR',
            'class': 'logging.FileHandler',
            # 使用名为 simple 输出格式
            'formatter': 'simple',
            # 文件路径
            'filename': '/Users/apple/PycharmProjects/IPSS/error.log'
        }
    },
    # 记录器
    # loggers记录器:将django中的所有记录器写入文件file(即写入handlers记录器中的file的配置文件)
    'loggers': {
        # django记录器:django层次结构中消息的全部记录器:django.request、django.server.....等
        'django': {
            # 交给名为file的处理程序处理
            'handlers': ['file_debug'],
            'level': 'DEBUG',
            # 是否传播
            'propagate': True
        },
        'django.request': {
            # 交给名为file的处理程序处理
            'handlers': ['file_error'],
            'level': 'ERROR',
            'propagate': True
        },
    }
}

class
class是指定处理log的类,在Python里logging.handlers中。

可选class列出如下,详见Useful Handlers。

class	功能
StreamHandler	输出到Stream。通常用来打印到标准输出。
FileHandler	打印到文件。
NullHandler	不格式化也不打印。主要是为了避免No handlers could be found for logger XXX的设计。
WatchedFileHandler	自动重开log文件,配合别的会自动切分的log文件使用。
RotatingFileHandler	自动按大小切分的log文件。
TimedRotatingFileHandler	按时间自动切分的log文件。
SocketHandler	向Socket打log,基于TCP协议。
DatagramHandler	向Socket打log,基于UDP协议。
SysLogHandler	在Unix-like系统打印到remote或local的Unix syslog。
NTEventLogHandler	在Windows系统打印到微软的event log。
SMTPHandler	通过email发送log。
MemoryHandler	打印到内存buffer。
HTTPHandler	通过HTTP协议向服务器发送log。
QueueHandler	打log到Queue中,适合多进程(multiprocessing)场景。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值