Ber*_*ter 3 logging python-3.x
我正在使用Python3(Ubuntu 14.04)写出日志文件.我想限制日志文件的大小,所以选择RotatingFileHandler.另外,我不想旋转日志文件(.log变成.log.1等等) - 我只想限制日志文件的大小.
我尝试过这样使用RotatingFileHandler:
filehandler = logging.handlers.RotatingFileHandler( "app.log", "a", 1000, 0, None, True )
logging.basicConfig( format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s", level = logging.DEBUG, handlers = [ filehandler ] )
Run Code Online (Sandbox Code Playgroud)
我发现的是日志文件继续增长,永远不会被截断或"包裹"在极限.
我backupCount = 0原本以为设置会导致在写入之前检查日志文件大小,如果有空间可以写入日志消息,则写入它,否则清空文件并写出消息.
有任何想法吗?
提前致谢,
Bernmeister.
如果您查看RotatingFileHandler的源代码,您将看到backupCount0只关闭然后重新打开日志的流.这是一个修改版本,可以执行您想要的操作,丢弃旧文件:
import os
import logging
import logging.handlers
class TruncatedFileHandler(logging.handlers.RotatingFileHandler):
def __init__(self, filename, mode='a', maxBytes=0, encoding=None, delay=0):
super(TruncatedFileHandler, self).__init__(
filename, mode, maxBytes, 0, encoding, delay)
def doRollover(self):
"""Truncate the file"""
if self.stream:
self.stream.close()
dfn = self.baseFilename + ".1"
if os.path.exists(dfn):
os.remove(dfn)
os.rename(self.baseFilename, dfn)
os.remove(dfn)
self.mode = 'w'
self.stream = self._open()
Run Code Online (Sandbox Code Playgroud)
以下是如何使用它:
filehandler = TruncatedFileHandler("app.log", "w", 1000)
logging.basicConfig(
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
level=logging.DEBUG, handlers=[filehandler])
logger = logging.getLogger('spam_application')
for i in range(100):
logger.debug("a log line, number: %s", i)
Run Code Online (Sandbox Code Playgroud)
并证明它有效
??? python3.4 main.py
??? cat app.log*
2014-06-11 11:50:44,871 - spam_application - DEBUG - a log line, number: 91
2014-06-11 11:50:44,872 - spam_application - DEBUG - a log line, number: 92
2014-06-11 11:50:44,872 - spam_application - DEBUG - a log line, number: 93
2014-06-11 11:50:44,872 - spam_application - DEBUG - a log line, number: 94
2014-06-11 11:50:44,872 - spam_application - DEBUG - a log line, number: 95
2014-06-11 11:50:44,872 - spam_application - DEBUG - a log line, number: 96
2014-06-11 11:50:44,872 - spam_application - DEBUG - a log line, number: 97
2014-06-11 11:50:44,872 - spam_application - DEBUG - a log line, number: 98
2014-06-11 11:50:44,872 - spam_application - DEBUG - a log line, number: 99
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3229 次 |
| 最近记录: |