分享

python按日志时间与按日志大小切分日志

 motan 2015-01-25

有一种简便方法实现按日志时间与按日志大小对日志进行切分,即通过python配置文件实现。
该配置文件分为三个部分。
第一部分定义日志模块及其实现。如下面代码所示,下面代码定义了三个日志配置名root,example及example01。
###############################################
[loggers]
keys=root,example,example01
#--------------------------------------------------
# 实现上面定义的logger模块,必需是[logger_xxxx]这样的形式
#--------------------------------------------------
# [logger_xxxx] logger_模块名称
# level     级别,级别有DEBUG、INFO、WARNING、ERROR、CRITICAL
# handlers  处理类,可以有多个,用逗号分开,实现见第二部分
# qualname  logger名称,应用程序通过 logging.getLogger获取。对于不能获取的名称,则记录到root模块。
# propagate 是否继承父类的log信息,0:否 1:是
[logger_root]
level=DEBUG
handlers=consoleHandler,rotateFileHandler

[logger_example]
level=DEBUG
handlers=consoleHandler,rotateFileHandler
qualname=example
propagate=0

[logger_example01]
level=DEBUG
handlers=consoleHandler,timedrotateFileHandler
qualname=example01
propagate=0
###############################################

第二部分定义每个模块的Handler。其中rotateFileHandler用来根据日志文件大小进行切分,而timedrotateFileHandler则根据时间进行日志切分。
###############################################
#--------------------------------------------------
# handler
#--------------------------------------------------
# [handler_xxxx]
# class handler类名
# level 日志级别
# formatter 日志格式,见第三部分
# args handler初始化函数参数
[handlers]
keys=consoleHandler,rotateFileHandler,timedrotateFileHandler

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

[handler_rotateFileHandler]
class=handlers.RotatingFileHandler
level=DEBUG
formatter=simpleFormatter
args=('test.log', 'a', 1000, 9)

[handler_timedrotateFileHandler]
class=handlers.TimedRotatingFileHandler
level=DEBUG
formatter=form02
args=('upload.log',"midnight", 1)  
###############################################

第三部分定义日志格式,下面定义了两种日志格式。
###############################################
#--------------------------------------------------
# 日志格式
#--------------------------------------------------
# %(asctime)s       年-月-日 时-分-秒,毫秒 2013-04-26 20:10:43,745
# %(filename)s      文件名,不含目录
# %(pathname)s      目录名,完整路径
# %(funcName)s      函数名
# %(levelname)s     级别名
# %(lineno)d        行号
# %(module)s        模块名
# %(message)s       消息体
# %(name)s          日志模块名
# %(process)d       进程id
# %(processName)s   进程名
# %(thread)d        线程id
# %(threadName)s    线程名
[formatters]
keys=simpleFormatter,form01

[formatter_simpleFormatter]
format=[%(asctime)s](%(levelname)s)%(name)s : %(message)s

[formatter_form01]
format=%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s
datefmt=%a, %d %b %Y %H:%M:%S
###############################################

测试代码如下,假设上述配置文件名为logger.conf。
#-*- coding:utf-8 -*-
import logging
import logging.config
# from logging.handlers import RotatingFileHandler

logging.config.fileConfig("logger.conf")
# example01为根据日志大小切分日志的配置名
logger = logging.getLogger("example01")

logger.debug('This is debug message')
logger.info('This is info message')
logger.warning('This is warning message')

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多