首页 > 代码库 > python之logging模块1

python之logging模块1

4、日志格式说明

logging.basicConfig函数中,可以指定日志的输出格式format,这个参数可以输出很多有用的信息,如上例所示:

%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息

我在工作中给的常用格式在前面已经看到了。就是:

format=‘%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s‘

这个格式可以输出日志的打印时间,是哪个模块输出的,输出的日志级别是什么,以及输入的日志内容。

5、高级进阶

接下来学习一些日志组件以及一些高级部分。日志组件包括:loggers、handlers,filters,formatters.

Logger 对象扮演了三重角色.首先,它暴露给应用几个方法以便应用可以在运行时写log.其次,Logger对象按照log信息的严重程度或者根据filter对 象来决定如何处理log信息(默认的过滤功能).最后,logger还负责把log信息传送给相关的loghandlers.

Handler对象负责分配合适的log信息(基于log信息的严重 程度)到handler指定的目的地.Logger对象可以用addHandler()方法添加零个或多个handler对象到它自身.一个常见的场景 是,一个应用可能希望把所有的log信息都发送到一个log文件中去,所有的error级别以上的log信息都发送到stdout,所有critical 的log信息通过email发送.这个场景里要求三个不同handler处理,每个handler负责把特定的log信息发送到特定的地方.

filter:细致化,选择哪些日志输出

format:设置显示格式

1、logging.basicConfig([**kwargs]):

Does basic configuration for the logging system by creating a StreamHandler with a defaultFormatter and adding it to the root logger. The functionsdebug(),info(),warning(),error() andcritical() will callbasicConfig() automatically if no handlers are defined for the root logger.

This function does nothing if the root logger already has handlers configured for it.

为日志模块配置基本信息。kwargs 支持如下几个关键字参数:
filename :日志文件的保存路径。如果配置了些参数,将自动创建一个FileHandler作为Handler
filemode :日志文件的打开模式。 默认值为‘a‘,表示日志消息以追加的形式添加到日志文件中。如果设为‘w‘, 那么每次程序启动的时候都会创建一个新的日志文件;
format :设置日志输出格式;
datefmt :定义日期格式;
level :设置日志的级别.对低于该级别的日志消息将被忽略;
stream :设置特定的流用于初始化StreamHandler;

演示如下:

 

import logging
import os
FILE=os.getcwd()
 
logging.basicConfig(level=logging.DEBUG,
                    format=‘%(asctime)s:%(filename)s[line:%(lineno)d] %(levelname)s %(message)s‘,
                    datefmt=‘%a, %d %b %Y %H:%M:%S‘,
                    filename = os.path.join(FILE,‘log.txt‘),
                    filemode=‘w‘)
logging.info(‘msg‘)
logging.debug(‘msg2‘)

 

2、logging.getLogger([name])

创建Logger对象。日志记录的工作主要由Logger对象来完成。在调用getLogger时要提供Logger的名称(注:多次使用相同名称 来调用getLogger,返回的是同一个对象的引用。),Logger实例之间有层次关系,这些关系通过Logger名称来体现,如:

p = logging.getLogger("root")

c1 = logging.getLogger("root.c1")

c2 = logging.getLogger("root.c2")

例子中,p是父logger, c1,c2分别是p的子logger。c1, c2将继承p的设置。如果省略了name参数, getLogger将返回日志对象层次关系中的根Logger。

 

import logging
‘‘‘命名‘‘‘
log2=logging.getLogger(‘BeginMan‘)  #生成一个日志对象
print log2  #<logging.Logger object at 0x00000000026D1710>
 
‘‘‘无名‘‘‘
log3 = logging.getLogger()
print log3  #<logging.RootLogger object at 0x0000000002721630> 如果没有指定name,则返回RootLogger
 
‘‘‘最好的方式‘‘‘
log = logging.getLogger(__name__)#__name__ is the module’s name in the Python package namespace.
print log   #<logging.Logger object at 0x0000000001CD5518>  Logger对象
print __name__  #__main__

 

三、Logger对象

通过logging.getLogger(nam)来获取Logger对象,

Class logging.Logger

有如下属性和方法:

1、Logger.propagate

print log.propagate         #1

具体参考:http://docs.python.org/2.7/library/logging.html

2、Logger.setLevel(lvl)

设置日志的级别。对于低于该级别的日志消息将被忽略.

 

import logging
import os
logging.basicConfig(format="%(levelname)s,%(message)s",filename=os.path.join(os.getcwd(),‘log.txt‘),level=logging.DEBUG)
log = logging.getLogger(‘root.set‘)   #Logger对象
print log.propagate         #1
log.setLevel(logging.WARN)  #日志记录级别为WARNNING  
log.info(‘msg‘)             #不会被记录
log.debug(‘msg‘)            #不会被记录
log.warning(‘msg‘)
log.error(‘msg‘)

 

3、Logger.debug(msg [ ,*args [, **kwargs]])

记录DEBUG级别的日志信息。参数msg是信息的格式,args与kwargs分别是格式参数。

 

import logging
logging.basicConfig(filename = os.path.join(os.getcwd(), ‘log.txt‘), level = logging.DEBUG)
log = logging.getLogger(‘root‘)
log.debug(‘%s, %s, %s‘, *(‘error‘, ‘debug‘, ‘info‘))
log.debug(‘%(module)s, %(info)s‘, {‘module‘: ‘log‘, ‘info‘: ‘error‘})

 

4、同上

5.1.1   Logger.info(msg[ , *args[ , **kwargs] ] )

5.1.2     Logger.warnning(msg[ , *args[ , **kwargs] ] )

5.1.3     Logger.error(msg[ , *args[ , **kwargs] ] )

5.1.4     Logger.critical(msg[ , *args[ , **kwargs] ] )

5、Logger.log(lvl, msg[ , *args[ , **kwargs]] )

记录日志,参数lvl用户设置日志信息的级别。参数msg, *args, **kwargs的含义与Logger.debug一样。

log.log(logging.ERROR,‘%(module)s %(info)s‘,{‘module‘:‘log日志‘,‘info‘:‘error‘}) #ERROR,log日志 error
log.log(logging.ERROR,‘再来一遍:%s,%s‘,*(‘log日志‘,‘error‘))  #ERROR,再来一遍:log日志,error

6、Logger.exception(msg[, *args])

以ERROR级别记录日志消息,异常跟踪信息将被自动添加到日志消息里。Logger.exception通过用在异常处理块中,如:

 

import logging
import os
logging.basicConfig(format="%(levelname)s,%(message)s",filename=os.path.join(os.getcwd(),‘log.txt‘),level=logging.DEBUG)
log = logging.getLogger(‘root‘)   #Logger对象
try:
    raise Exception,u‘错误异常‘
except:
    log.exception(‘exception‘)  #异常信息被自动添加到日志消息中  
打开文件,显示如下:
 
‘‘‘ERROR,exception
Traceback (most recent call last):
  File "E:\project\py\src\log3.py", line 12, in <module>
    raise Exception,u‘错误异常‘
Exception: 错误异常
‘‘‘

 

7、Logger.addFilter(filt)

指定过滤器

8、Logger.removeFilter(filt)

移除指定的过滤器

9、Logger.filter(record)

....其他的后面介绍

python之logging模块1