python日志配置_byseyOrd

python的几种配置方式

1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数;

2)创建一个日志配置文件,然后使用fileConfig()函数来读取该文件的内容;

3)创建一个包含配置信息的dict,然后把它传递个dictConfig()函数;

需要说明的是,logging.basicConfig()也属于第一种方式,它只是对loggers, handlers和formatters的配置函数进行了封装。

第二种配置方式相对于第一种配置方式的优点在于,它将配置信息和代码进行了分离

使用Python代码实现日志配置

 1 # 创建一个日志器logger并设置其日志级别为DEBUG
 2 logger = logging.getLogger(‘simple_logger‘)
 3 logger.setLevel(logging.DEBUG)
 4
 5 # 创建一个流处理器handler并设置其日志级别为DEBUG
 6 handler = logging.StreamHandler(sys.stdout)
 7 handler.setLevel(logging.DEBUG)
 8
 9 # 创建一个格式器formatter并将其添加到处理器handler
10 formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
11 handler.setFormatter(formatter)
12
13 # 为日志器logger添加上面创建的处理器handler
14 logger.addHandler(handler)
15
16 # 日志输出
17 logger.debug(‘debug message‘)
18 logger.info(‘info message‘)
19 logger.warn(‘warn message‘)
20 logger.error(‘error message‘)
21 logger.critical(‘critical message‘)

使用配置文件和fileConfig()函数实现日志配置

# 读取日志配置文件内容
logging.config.fileConfig(‘logging.conf‘)

# 创建一个日志器logger
logger = logging.getLogger(‘simpleExample‘)

# 日志输出
logger.debug(‘debug message‘)
logger.info(‘info message‘)
logger.warn(‘warn message‘)
logger.error(‘error message‘)
logger.critical(‘critical message‘)

logging.conf

[loggers]
keys=root,simpleExample

[handlers]
keys=fileHandler,consoleHandler

[formatters]
keys=simpleFormatter

[logger_root]
level=DEBUG
handlers=fileHandler

[logger_simpleExample]
level=DEBUG
handlers=consoleHandler
qualname=simpleExample
propagate=0

[handler_consoleHandler]
class=StreamHandler
args=(sys.stdout,)
level=DEBUG
formatter=simpleFormatter

[handler_fileHandler]
class=FileHandler
args=(‘logging.log‘, ‘a‘)
level=ERROR
formatter=simpleFormatter

[formatter_simpleFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt= "%Y-%m-%d %H:%M:%S"

  配置文件的说明

  1)配置文件中一定要包含loggers、handlers、formatters这些section,它们通过keys这个option来指定该配置文件中已经定义好的loggers、handlers和formatters,多个值之间用逗号分隔;另外loggers这个section中的keys一定要包含root这个值;

  2)loggers、handlers、formatters中所指定的日志器、处理器和格式器都需要在下面以单独的section进行定义。seciton的命名规则为[logger_loggerName]、[formatter_formatterName]、[handler_handlerName]

  3)定义logger的section必须指定level和handlers这两个option,level的可取值为DEBUG、INFO、WARNING、ERROR、CRITICAL、NOTSET,其中NOTSET表示所有级别的日志消息都要记录,包括用户定义级别;handlers的值是以逗号分隔的handler名字列表,这里出现的handler必须出现在[handlers]这个section中,并且相应的handler必须在配置文件中有对应的section定义;

  4)对于非root logger来说,除了level和handlers这两个option之外,还需要一些额外的option,其中qualname是必须提供的option,它表示在logger层级中的名字,在应用代码中通过这个名字得到logger;propagate是可选项,其默认是为1,表示消息将会传递给高层次logger的handler,通常我们需要指定其值为0,这个可以看下下面的例子;另外,对于非root logger的level如果设置为NOTSET,系统将会查找高层次的logger来决定此logger的有效level。

  5)定义handler的section中必须指定class和args这两个option,level和formatter为可选option;class表示用于创建handler的类名,args表示传递给class所指定的handler类初始化方法参数,它必须是一个元组(tuple)的形式,即便只有一个参数值也需要是一个元组的形式;level与logger中的level一样,而formatter指定的是该处理器所使用的格式器,这里指定的格式器名称必须出现在formatters这个section中,且在配置文件中必须要有这个formatter的section定义;如果不指定formatter则该handler将会以消息本身作为日志消息进行记录,而不添加额外的时间、日志器名称等信息;

  6)定义formatter的sectioin中的option都是可选的,其中包括format用于指定格式字符串,默认为消息字符串本身;datefmt用于指定asctime的时间格式,默认为‘%Y-%m-%d %H:%M:%S‘;class用于指定格式器类名,默认为logging.Formatter;  

  7)把logging.conf中simpleExample这个handler定义中的propagate属性值改为1,或者删除这个option(默认值就是1),这说明simpleExample这个logger在处理完日志记录后,把日志记录传递给了上级的root logger再次做处理,所有才会有两个地方都有日志记录的输出。通常,我们都需要显示的指定propagate的值为0,防止日志记录向上层logger传递。

  8)当一个日志器没有被设置任何处理器是,系统会去查找该日志器的上层日志器上所设置的日志处理器来处理日志记录

使用字典实现日志配置(dictconfig)

使用字典配置的时候,能把很多的数据转换成字典。比如,我们可以使用JSON格式的配置文件、YAML格式的配置文件,然后将它们填充到一个配置字典中

import logging
import logging.config
import yaml

with open(‘logging.yml‘, ‘r‘) as f_conf:
  dict_conf = yaml.load(f_conf)
logging.config.dictConfig(dict_conf)

logger = logging.getLogger(‘simpleExample‘)
logger.debug(‘debug message‘)
logger.info(‘info message‘)
logger.warn(‘warn message‘)
logger.error(‘error message‘)
logger.critical(‘critical message‘)

yaml文件

version: 1
formatters:
 simple:
  format: ‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘
handlers:
 console:
  class: logging.StreamHandler
  level: DEBUG
  formatter: simple
  stream: ext://sys.stdout
 console_err:
  class: logging.StreamHandler
  level: ERROR
  formatter: simple
  stream: ext://sys.stderr
loggers:
 simpleExample:
  level: DEBUG
  handlers: [console]
  propagate: yes
root:
 level: DEBUG
 handlers: [console_err]

  字典配置信息的说明

key名称    描述
version      必选项,其值是一个整数值,表示配置格式的版本,当前唯一可用的值就是1
formatters    可选项,其值是一个字典对象,该字典对象每个元素的key为要定义的格式器名称,value为格式器的配置信息组成的dict,如format和datefmt
filters      可选项,其值是一个字典对象,该字典对象每个元素的key为要定义的过滤器名称,value为过滤器的配置信息组成的dict,如name
handlers     可选项,其值是一个字典对象,该字典对象每个元素的key为要定义的处理器名称,value为处理器的配置信息组成的dcit,如class、level、formatter和filters,        其中class为必选项,其它为可选项;其他配置信息将会传递给class所指定的处理器类的构造函数,如下面的handlers定义示例中的stream、filename、maxBytes和backupCount等
loggers     可选项,其值是一个字典对象,该字典对象每个元素的key为要定义的日志器名称,value为日志器的配置信息组成的dcit,如level、handlers、filters 和 propagate
root      可选项,这是root logger的配置信息,其值也是一个字典对象。除非在定义其它logger时明确指定propagate值为no,否则root logger定义的handlers都会被作用到其它logger上
incremental    可选项,默认值为False。该选项的意义在于,如果这里定义的对象已经存在,那么这里对这些对象的定义是否应用到已存在的对象上。值为False表示,已存在的对象将会被重新定义。
disable_existing_loggers    可选项,默认值为True。该选项用于指定是否禁用已存在的日志器loggers,如果incremental的值为True则该选项将会被忽略

本文转自该博客

原文地址:https://www.cnblogs.com/seyOrd/p/12690904.html

时间: 2024-10-09 08:06:06

python日志配置_byseyOrd的相关文章

Python日志配置类

# -*- coding: utf-8 -* """日志工具类 author: Jill usage: from common.logger import Log log = Log().get_logger() log.error("error occurred when xxx") """ import logging import time import os cur_path = os.path.dirname(os.

python日志配置的几种方式

通过简单方式进行配置,使用basicConfig()函数直接进行配置: 通过配置文件进行配置,使用fileConfig()函数读取配置文件: 通过配置字典进行配置,使用dictConfig()函数读取配置信息: 通过网络进行配置,使用listen()函数进行网络配置. 原文地址:https://www.cnblogs.com/wind666/p/10742556.html

【转】python之配置日志的几种方式

[转]python之配置日志的几种方式 作为开发者,我们可以通过以下3种方式来配置logging: 1)使用Python代码显式的创建loggers, handlers和formatters并分别调用它们的配置函数: 2)创建一个日志配置文件,然后使用fileConfig()函数来读取该文件的内容: 3)创建一个包含配置信息的dict,然后把它传递个dictConfig()函数: 需要说明的是,logging.basicConfig()也属于第一种方式,它只是对loggers, handlers

python logging 配置

在python中,logging由logger,handler,filter,formater四个部分组成,logger是提供我们记录日志的方法:handler是让我们选择日志的输出地方,如:控制台,文件,邮件发送等,一个logger添加多个handler:filter是给用户提供更加细粒度的控制日志的输出内容:formater用户格式化输出日志的信息.python中配置logging有三种方式第一种:基础配置,logging.basicConfig(filename="config.log&q

django 1.8 日志配置

以下为setings配置logging代码片段 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) LOGDIR = os.path.join(BASE_DIR, "logs") LOGFILE = datetime.datetime.now().strftime("%Y-%m-%d") + ".log" if not os.path.exists(LOGD

Odoo/OpenERP 日志配置、使用及实现

当应用处于生产环境时,日志提供了有价值的运行时调试及监控信息,并且,也是一个有用的调试工具对于处于开发阶段的应用来说.此文描述在Odoo8.0中日志的配置.使用及实现 日志配置        Odoo使用Python标准日志库logging.但是,它使用一种特殊的配置语法来为其模块配置日志级别.以下为Odoo日志配置的完整选项: logfile:日志文件名,比如opt/odoo.log. 如果不设置,则默认为stdout,即输出到控制台 logrotate:True/False.如果设置True

Python 日志工具(logging) 基础教程

什么是 logging ? 日志是跟踪软件运行时发生的事件,软件的开发人员可以通过日志快速的定位问题的位置.事件也分重要性即事件的严重程度. 什么时候使用日志? logging 提供了一组方便操作日志记录的功能,这些是 debug(), info(),warning(),error(),critical(). 通过想要执行的任务确定使用日志记录的方法. 你想要执行的任务 日志记录的最佳方法 一个脚本或程序显示在终端上 print() 程序正常运行过程中发生的事件 logging.info() o

【python日志之logging模块--理解】

一.简介logging模块是python内置的标准模块,主要用于输出运行日志,可以设置输出日志的等级.日志保存路径.日志文件和回滚等:可以说,logging模块主要由4部分组成:    *Logger 记录器,提供了应用程序代码能直接使用的接口    *Handler 处理器,将记录器产生的日志记录发送至合适的目的地,或者说将Logger产生的日志传到指定位置    *Filters 过滤器,对输出的日志进行过滤,它可以决定输出哪些日志记录    *Formatter 格式化器,控制日志输出的格

python日志处理

本节内容 1. 日志相关概念 2. logging模块简介 3. 使用logging提供的模块级别的函数记录日志 4. logging模块日志流处理流程 5. 使用logging四大组件记录日志 6. 配置logging的几种方式 7. 向日志输出中添加上下文信息 8. 参考文档 主要内容 一.日志相关概念 日志是一种可以追踪某些软件运行时所发生事件的方法.软件开发人员可以向他们的代码中调用日志记录相关的方法来表明发生了某些事情.一个事件可以用一个可包含可选变量数据的消息来描述.此外,事件也有重