Python中的日志模块
logging模块
在Python中,常用的用于写错误日志的库是logging
。以下是一个简单的示例,演示如何在Python中使用logging
库来记录错误日志:
1 |
|
以上代码创建了一个名为error_logger
的日志记录器,并将错误级别设置为logging.ERROR
。然后,创建了一个文件处理器(FileHandler
)和一个控制台处理器(StreamHandler
),分别用于将日志写入文件和输出到控制台。最后,定义了日志的格式,并将处理器添加到日志记录器中。
在try
块中的代码中,如果发生了错误,可以使用logger.error()
方法将错误信息记录到日志文件和控制台中。
请注意,在使用logging
库之前,需要先导入logging
模块。
格式
logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
这句代码是用于定义日志的格式。
%(asctime)s
:表示日志记录的时间,即当前时间,以可读的形式显示(例如:”2022-09-30 10:30:15”)。%(levelname)s
:表示日志的级别,如DEBUG
、INFO
、WARNING
、ERROR
、CRITICAL
等。%(message)s
:表示实际的日志消息。
这样的定义可以让日志以特定的格式显示,方便阅读和分析日志。在这个例子中,日志的格式为:时间 - 日志级别 - 日志消息
。例如:2022-09-30 10:30:15 - ERROR - 这是一个错误示例
。
还可以根据需要自定义日志的格式,使用不同的占位符来输出不同的信息,例如输出日志记录器的名称%(name)s
、输出所在的模块%(module)s
等等。更多的占位符和格式选项可以参考Python官方文档的Logging.Formatter部分。
分隔存储
如果所有错误日志都写入同一个文件,会导致文件越来越大。为了解决这个问题,可以使用logging
库的RotatingFileHandler
或TimedRotatingFileHandler
来分隔文件存储。下面是示例代码:
1.使用RotatingFileHandler
:
1 |
|
使用RotatingFileHandler
时,可以通过maxBytes
参数设置每个日志文件的最大大小,通过backupCount
参数设置最多存储的日志文件数量。
2.使用TimedRotatingFileHandler
:
1 |
|
使用TimedRotatingFileHandler
时,可以通过when
参数指定日志文件的轮转时间间隔(例如:midnight
表示每天生成一个日志文件),通过interval
参数指定轮转时间间隔的数量。
除了midnight
,TimedRotatingFileHandler
的when
参数还支持以下几种有效的取值:
S
: 表示每秒生成一个日志文件。M
: 表示每分钟生成一个日志文件。H
: 表示每小时生成一个日志文件。D
: 表示每天生成一个日志文件。W0
~W6
: 表示每个星期的周一至周日分别生成一个日志文件。midnight
: 表示每天的午夜(00:00)生成一个日志文件。
这些取值可以根据需要灵活选择,以满足不同的日志轮转需求。例如,如果需要每小时生成一个日志文件,可以将when
参数设置为'H'
;如果需要每周生成一个日志文件,可以将when
参数设置为'W0'
~ 'W6'
,其中W0
表示周一,W1
表示周二,依此类推。
注意,这些取值均为大小写敏感。另外,TimedRotatingFileHandler
还支持interval
参数,用于指定轮转时间间隔的数量。例如,interval=2
表示每2个时间单位生成一个日志文件(如每2小时、每2天等)。
更多关于TimedRotatingFileHandler
的详细信息,可以查看Python官方文档的Logging.handlers.TimedRotatingFileHandler部分。