- 一、基础配置方式
-
- import logging
- 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='/tmp/test.log',
- filemode='w')
- logging.debug('debug message')
- logging.info('info message')
- logging.warning('warning message')
- logging.error('error message')
- logging.critical('critical message')
filemode:文件打开方式,在指定了filename时使用这个参数,a表示追加,w表示每次打开覆盖
format:指定handler使用的日志显示格式,参数中可能用到的格式化串:
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出函数的模块的完整路径名,可能没有
%(filename)s 调用日志输出函数的模块的文件名
%(module)s 调用日志输出函数的模块名
%(funcName)s 调用日志输出函数的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒
%(thread)d 线程ID。可能没有
%(threadName)s 线程名。可能没有
%(process)d 进程ID。可能没有
%(message)s用户输出的消息
level:设置rootlogger(后边会讲解具体概念)的日志级别 ,默认为logging.WARNING
stream:用指定的stream创建StreamHandler。可以指定输出到sys.stderr,sys.stdout或者文件,默认为sys.stderr。若同时列出了filename和 stream两个参数,则stream参数会被忽略。
二、配置文件的方式
#logger.conf
#-------------------------------------------------------------------------
#define loggers...
[loggers]
keys=root,myLog
[logger_root]
level=INFO
handlers=myHandler
[logger_myLog]
level=DEBUG
handlers=myHandler,myHandlerPrint
qualname=myLog
propagate=0
#-------------------------------------------------------------------------
#define handlers...
[handlers]
keys=myHandler,myHandlerPrint
[handler_myHandler]
class=StreamHandler
level=DEBUG
formatter=myFormatter
args=(sys.stdout,)
[handler_myHandlerPrint]
class=FileHandler
formatter=myFormatterPrint
level=DEBUG
args=('python.log', 'w')
#-------------------------------------------------------------------------
#define formatters...
[formatters]
keys=myFormatter,myFormatterPrint
[formatter_myFormatter]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
[formatter_myFormatterPrint]
format=%(asctime)s - %(name)s - %(levelname)s - %(message)s
datefmt=
#-------------------------------------------------------------------------、
test.py
-
- import logging
import logging.config
logging.config.fileConfig("myCommon\myLog.conf")
#creater logger
logger = logging.getLogger("root")
#create logger1
logger1 = logging.getLogger('myLog')
#application code
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
logger.critical("critical message")
logger1.debug("debug message 1")
logger1.info("info message 1")
logger1.warn("warn message 1")
logger1.error("error message 1")
logger1.critical("critical message 1")
TimedRotatingFileHandler(filename [,when [,interval [,backupCount]]])
filename 是输出日志文件名的前缀
when 是一个字符串的定义如下:
“S”: Seconds
“M”: Minutes
“H”: Hours
“D”: Days
“W”: Week day (0=Monday)
“midnight”: Roll over at midnight
interval 是指等待多少个单位when的时间后,Logger会自动重建文件,当然,这个文件的创建
取决于filename+suffix,若这个文件跟之前的文件有重名,则会自动覆盖掉以前的文件,所以
有些情况suffix要定义的不能因为when而重复。
backupCount 是保留日志个数。默认的0是不会自动删除掉日志。若设10,则在文件的创建过程中
库会判断是否有超过这个10,若超过,则会从最先创建的开始删除。
例如:
class=handlers.TimedRotatingFileHandler
level=DEBUG
formatter=myFormatter
args=('test.log','d',2,10)
2、RotatingFileHandler
RotatingFileHandler( filename[, mode[, maxBytes[, backupCount]]])
maxBytes用于指定日志文件的最大文件大小,如果maxBytes为0,意味着日志文件可以无限大,这时上面描述的重命名过程就不会发生。
backupCount用于指定保留的备份文件的个数。比如,如果指定为2,当上面描述的重命名过程发生时,原有的chat.log.2并不会被更 名,而是被删除。
例如:
class=handlers.RotatingFileHandler
level=INFO
formatter=myFormatter
args=('test.log','a',10 * 1024,10)