[PY3]——logging

logging模块的logger、handler、filter、formatter

Logger记录器

提供日志接口,供应用代码使用。logger最长用的操作有两类:配置和发送日志消息。可以通过logging.getLogger(name)获取logger对象,如果不指定name则返回root对象,多次使用相同的name调用getLogger方法返回同一个logger对象。

Handler处理器

将日志记录(log record)发送到合适的目的地(destination),比如文件、socket等。一个logger对象可以通过addHandler方法添加0到多个handler,每个handler又可以定义不同日志级别,以实现日志分级过滤显示。下面是几种常见的Handler:


what handler


描述


StreamHandler


发送log到streams(可以理解为标准输出吧)


FileHandler


发送log到文件


SoketHandler


send to TCP/IP Sockets


DatagramHandler


send to UDP Sockets


SMTPHandler


send to 指定的email地址


RotatingFileHandler


send to文件,支持最大日志文件大小和日志文件轮转


TimedRotatingFileHandler


send to 文件,支持在特定时间内日志文件轮转

Formatter格式化器

指定日志记录输出的具体格式。formatter的构造方法需要两个参数:消息的格式字符串和日期字符串,这两个参数都是可选的。

Filter过滤器

提供一种优雅的方式决定一个日志记录是否发送到handler。

应用实例

# 创建logger对象
logger=logging.getLogger(‘AppName‘)

# 指定日志输出格式
formatter=logging.Formatter(‘%(asctime)s  %(name)s  %(levelname)s : %(message)s‘)

# 创建FileHandler,并指定其输出格式为formatter
file_handler=logging.FileHandler("/tmp/test.log")
file_handler.setFormatter(formatter)

# 创建StreamHandler,并指定其输出格式为formatter
console_handler=logging.StreamHandler(sys.stdout)
console_handler.setFormatter(formatter)

# 为logger添加日志处理器(Handler),1个logger可以有N个Handler
logger.addHandler(file_handler)
logger.addHandler(console_handler)

# 设置logger的最低输出级别
logger.setLevel(logging.INFO)

logger.debug(‘debug message‘)
logger.info(‘info message‘)
logger.warning(‘warring message‘)
logger.error(‘error message‘)
logger.fatal(‘fatal message=critical message‘)
logger.critical(‘critical message‘)

# 移除日志处理器
logger.removeHandler(file_handler)

logging配置的几种方法

logging.GetLogger( )

其使用方法参考上面的实例。

默认的logger名称是“root”。如果在同一个程序中都使用同名的logger,其实会拿到同一个实例。这个技巧可以实现跨模块调用同样的logger记录日志。

也可以通过日志名称来区分同一程序的不同模块。

logging.basicConfig( )

1. basicConfig中常用的参数如下:


Format


描述


filename


将log信息输出到文件,filename指定文件位置


filemode


打开日志文件的mode,默认是“a”


format 


指定日志输出的格式


datefmt 


指定日期/时间格式(即类似time模块的格式化格式)


level


设置日志最低输出级别


style

 

stream

 

handlers

 

2. format常用的输出如下:


format


描述


%(levelno)s


打印日志级别的数值


%(levelname)s


打印日志级别名称


%(pathname)s


打印当前执行程序的路径


%(name)s


打印日志名


%(filename)s


打印当前日志输出函数的模块的文件名


%(funcName)s


打印日志的当前函数


%(asctime)s


打印日志的时间


%(thread)d


打印线程id


%(threadName)s


打印线程名称


%(process)d


打印进程ID


%(message)s


打印日志信息


%(lineno)d


打印日志的当前行号

3. 实例

logging.basicConfig(filename=‘/tmp/log.txt‘,level=logging.INFO,format=‘%(asctime)s %(levelname)s  [%(threadName)s] %(message)s‘)

logging.debug(‘debug message‘)
logging.info(‘info message‘)
logging.warning(‘warring message‘)
logging.error(‘error message‘)
logging.critical(‘critical message‘)

# cat /tmp/log.txt
  2017-09-01 11:24:43,056 INFO  [MainThread] info message
  2017-09-01 11:24:43,056 WARNING  [MainThread] warring message
  2017-09-01 11:24:43,056 ERROR  [MainThread] error message
  2017-09-01 11:24:43,056 CRITICAL  [MainThread] critical message

通过配置文件进行配置,使用fileConfig()函数读取配置文件

通过配置字典进行配置,使用dictConfig()函数读取配置信息

通过网络进行配置,使用listen()函数进行网络配置

In [1]: import logging

In [2]: import importlib

In [3]: importlib.reload(logging)
Out[3]: <module ‘logging‘ from ‘/root/.pyenv/versions/3.5.2/lib/python3.5/logging/__init__.py‘>
时间: 2024-11-02 14:45:36

[PY3]——logging的相关文章

28.logging模块

logging模块 用于便捷记录日志且线程安全的模块 1.单文件日志 import logging logging.basicConfig(filename='log.log', format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', level=10) logging.debug('debug') logging.info('info')

day6 subprocess模块、logging模块

    logging模块 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug(), info(), warning(), error() and critical() 5个级别,下面我们看一下怎么用:

python模块之logging

在现实生活中,记录日志非常重要.银行转账时会有转账记录:飞机飞行过程中,会有黑盒子(飞行数据记录器)记录飞行过程中的一切.如果有出现什么问题,人们可以通过日志数据来搞清楚到底发生了什么.对于系统开发.调试以及运行,记录日志都是同样的重要.如果没有日志记录,程序崩溃时你几乎就没办法弄明白到底发生了什么事情.举个例子,当你在写一个服务器程序时,记录日志是非常有必要的.下面展示的就是 EZComet.com 服务器的日志文件截图. 服务崩溃后,如果没有日志,我几乎没办法知道到底发生了错误.日志不仅对于

Python中的日志管理Logging模块

1.基本的用法 import logging logging.debug('This is debug message') logging.info('This is info message') logging.warning('This is warning message') 屏幕上打印: WARNING:root:This is warning message 默认情况下,logging将日志打印到屏幕,日志级别为WARNING:日志级别大小关系为:CRITICAL > ERROR >

python logging 多进程写兼容模块

logging中RotatingFileHandler和TimedRotatingFileHandler对于多进程不支持(由于每个进程都保持一个固定的文件句柄,导致在达到条件回滚时,相互之间的rename会相互干扰,比如一个进程已经把worker.log变为worker.log.2016-06-01了,其他进程就跟着写到worker.log.2016-06-01了,其他还有好多问题) 故实现适应多进程的handle,代码如下: # -*- coding: utf-8 -*- import log

[PY3]——一个例子理解多线程和daemon

理解 (今天纠结已久,多谢junqi大大帮助理解,一语总结便解心头疑惑)(下面几点总结基本就是我们的对话) 1. 进程就相当于一个机器,多进程就相当于有多个机器在同时运行,多线程是多个任务在同一机器上交替运行,你用一段时间,我用一段时间. 2. 所以进程和线程没有必然联系. 3. 但是不管进程还是线程,一般都是和任务绑定在一起的,任务结束,销毁进程和线程. 4. 如果将进程比喻成一台机器,daemon理解为守护这台机器的东西,daemon守护一旦结束,机器这个进程就down. 5. 可以这样说,

logging模块讲解

logging模块 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储各种格式的日志,logging的日志可以分为 debug(), info(), warning(), error() and critical() 5个级别,级别从左到右依次递增,下面我们看一下怎么用. 把日志写入到文件,并设置日志级别为logging.INFO import logging logging

16.常用模块【logging/*re】

logging序列化模块***jsonpicklere正则元字符字符集分组()命名分组管道符 |反斜杠\方法re.finditerre.searchre.matchre.splitre.subre.compile logging 等级: debug info warning error critical warning以上的才打印反馈 >>> logging.debug('debug------') >>> >>> s = logging.debug(

logging模块

函数式的简单配置 默认情况下python的logging模块打印日志的标准输出顺序是CRITICAL > ERROR > WARNING > INFO > DEBUG,默认的日志格式为日志级别:Logger名称:用户输出消息. import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message