Python日誌(logging)模塊使用方法簡介
介紹
A logger is configured to have a log level . This log level describes the severity of the messages that the logger will handle. Python defines the following log levels:
A logger is configured to have a log level . This log level describes the severity of the messages that the logger will handle. Python defines the following log levels:
§ DEBUG : Low level system information for debugging purposes
§ INFO : General system information
§ WARNING : Information describing a minor problem that has occurred.
§ ERROR : Information describing a major problem that has occurred.
§ CRITICAL : Information describing a critical problem that has occurred.
Each message that is written to the logger is a Log Record . Each log record also has a log level indicating the severity of that specific message. A log record can also contain useful metadata that describes the event that is being logged. This can include details such as a stack trace or an error code.
When a message is given to the logger, the log level of the message is compared to the log level of the logger. If the log level of the message meets or exceeds the log level of the logger itself, the message will undergo further processing. If it doesn ' t, the message will be ignored.
Once a logger has determined that a message needs to be processed, it is passed to a Handler .
簡單的範例
#-*- coding: utf -8 -*-
import logging
"""logging的簡單使用示例
"""
if __name__ == '__main__' :
# 最簡單的用法,不推薦直接用logging模塊
logging.debug(u '這個不會被打印出來' )
logging.info(u '這個也不會被打印出來' )
logging.warning(u '這個就會了,因為logging默認的級別是WARNING,低於這個等級的信息就會被忽略' )
稍微難一點的範例
#-*- coding: utf -8 -*-
import logging
"""logging的使用示例
"""
if __name__ == '__main__' :
# python 官方文檔中提供的一段示例,使用logging模塊產生logger對象
FORMAT = '%( asctime )-15s %( clientip )s %(user)-8s %(message)s'
logging.basicConfig(format = FORMAT)
d = { 'clientip' : '192.168.0.1' , 'user' : 'fbloggs' }
# 創建一個日誌對象
logger = logging.getLogger( 'tcpserver' )
logger.warning( 'Protocol problem: %s' , 'connection reset' , extra = d)
# 設置級別
logger.setLevel(logging.DEBUG)
logger.debug( 'Hello' , extra = d)
複雜一點的用法,為logger 添加了若干個handler 。
#-*- coding: utf -8 -*-
import logging , logging.config
"""logging的使用示例
"""
if __name__ == '__main__' :
# 比較複雜的用法
LOGGING = {
# 版本,總是1
'version' : 1 ,
'disable_existing_loggers' : True ,
'formatters' : {
'verbose' : { 'format' : '%( levelname )s %( asctime )s %(module)s %(process)d %(thread)d %(message)s' },
'simple' : { 'format' : '%( levelname )s %(message)s' },
'default' : {
'format' : '%( asctime )s %(message)s' ,
'datefmt' : '%Y-%m-%d %H:%M:%S'
}
},
'handlers' : {
'null' : {
'level' : 'DEBUG' ,
'class' : 'logging.NullHandler' ,
},
'console' :{
'level' : 'DEBUG' ,
'class' : 'logging.StreamHandler' ,
'formatter' : 'default'
},
'file' : {
'level' : 'INFO' ,
# TimedRotatingFileHandler 會將日誌按一定時間間隔寫入文件中,並
# 將文件重命名為'原文件名+時間戮'這樣的形式
# Python 提供了其它的handler,參考logging.handlers
'class' : 'logging.handlers.TimedRotatingFileHandler ' ,
'formatter' : 'default' ,
# 後面這些會以參數的形式傳遞給TimedRotatingFileHandler 的
# 構造器
# filename所在的目錄要確保存在
'filename' : 'log' ,
# 每5分鐘刷新一下
'when' : 'M' ,
'interval' : 1 ,
'encoding' : 'utf8' ,
}
},
'loggers' : {
# 定義了一個logger
'mylogger' : {
'level' : 'DEBUG' ,
'handlers' : [ 'console' , 'file' ],
'propagate' : True
}
}
}
logging.config.dictConfig(LOGGING)
logger = logging.getLogger( 'mylogger' )
logger.info( 'Hello' )
另外,還可以通過配置文件來配置logging ,方法如下:
配置文件(log_conf ):
[loggers]
keys=root, mylogger
[handlers]
keys=null,console,file
[formatters]
keys=verbose,simple,default
[formatter_verbose]
format=%( levelname )s %( asctime )s %(module)s %(process)d %(thread)d %(message)s
datefmt =
class=logging.Formatter
[formatter_simple]
format=%( levelname )s %(message)s
datefmt =
class=logging.Formatter
[formatter_default]
format=%( asctime )s %(message)s
datefmt =%Y-%m-%d %H:%M:%S
class=logging.Formatter
[logger_mylogger]
level=DEBUG
handlers=console,file
propagate=1
qualname =
[logger_root]
level=NOTSET
handlers=
[handler_null]
class=NullHandler
level=DEBUG
args =()
[handler_console]
class=StreamHandler
level=DEBUG
args =()
[handler_file]
class=handlers.TimedRotatingFileHandler
level=INFO
formatter=default
args =('log','M',1,0,'utf8')
Python 代碼:
#-*- coding: utf -8 -*-
import logging , logging.config
"""logging的使用示例
"""
if __name__ == '__main__' :
# 使用配置文件
logging.config.fileConfig( 'log_conf' )
logger = logging.getLogger( 'mylogger' )
logger.info( 'Hello' )
留言
張貼留言