我正在尝试对logging模块RotatingFileHandler进行如下测试:
import logging
from logging.handlers import RotatingFileHandler
# logging.basicConfig(filename="example.log", level=logging.DEBUG)
logger = logging.getLogger('my_logger')
handler = RotatingFileHandler("my_log.log", maxBytes=2000, backupCount=10)
logger.addHandler(handler)
for _ in range(10000):
logger.debug("Hello, world!")
Run Code Online (Sandbox Code Playgroud)
但是,在logging.basicConfig注释掉行的情况下,生成的my_log.log文件不包含任何数据:
如果我在该行中发表评论logging.basicConfig(filename="example.log", level=logging.DEBUG),我会得到my_log.log带有编号后缀的预期文件.但是,还有example.log一个(相对)大文件:
如何设置日志记录以便它只生成my_log.log文件,而不是大example.log文件?
sko*_*kin 25
Python提供5个日志级别开箱(严重程度的增加顺序): ,DEBUG,,INFO 和.默认的是.文档说,那WARNINGERRORCRITICALWARNING
记录不如lvl严重的消息将被忽略.
因此,如果您使用.debug默认设置,您将无法在日志中看到任何内容.
最简单的解决方法是使用logger.warning函数而不是logger.debug:
import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger('my_logger')
handler = RotatingFileHandler('my_log.log', maxBytes=2000, backupCount=10)
logger.addHandler(handler)
for _ in range(10000):
logger.warning('Hello, world!')
Run Code Online (Sandbox Code Playgroud)
如果你想改变记录器级别,你可以使用.setLevel方法:
import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)
handler = RotatingFileHandler('my_log.log', maxBytes=2000, backupCount=10)
logger.addHandler(handler)
for _ in range(10000):
logger.debug('Hello, world!')
Run Code Online (Sandbox Code Playgroud)
gre*_*pit 17
所有以前的答案都是正确的,这里是另一种做同样事情的方式,除了我们使用日志配置文件。
日志配置文件
这是配置文件:
[loggers]
keys=root
[handlers]
keys=logfile
[formatters]
keys=logfileformatter
[logger_root]
level=DEBUG
handlers=logfile
[formatter_logfileformatter]
format=%(asctime)s %(name)-12s: %(levelname)s %(message)s
[handler_logfile]
class=handlers.RotatingFileHandler
level=DEBUG
args=('testing.log','a',10,100)
formatter=logfileformatter
Run Code Online (Sandbox Code Playgroud)
myScrypt.py
这是使用上述配置文件的简单日志记录脚本
import logging
from logging.config import fileConfig
fileConfig('logging_config.ini')
logger = logging.getLogger()
logger.debug('the best scripting language is python in the world')
Run Code Online (Sandbox Code Playgroud)
结果
这是结果,注意 maxBytes 设置为 10 但在现实生活中,这显然太小了。(args=('testing.log','a',10,100)
我发现要获得所需的行为,必须在basicConfig和RotatingFileHandler初始化中使用相同的名称:
import logging
from logging.handlers import RotatingFileHandler
logging.basicConfig(filename="my_log.log", level=logging.DEBUG)
logger = logging.getLogger('my_logger')
handler = RotatingFileHandler("my_log.log", maxBytes=2000, backupCount=10)
logger.addHandler(handler)
for _ in range(10000):
logger.debug("Hello, world!")
Run Code Online (Sandbox Code Playgroud)
在这里,我选择了相同的名称my_log.log。这导致仅创建“大小受限”日志:
根据Kurt Peek的回答,您还可以将旋转文件处理程序直接放在logging.basicConfig中
import logging
from logging.handlers import RotatingFileHandler
logging.basicConfig(
handlers=[RotatingFileHandler('./my_log.log', maxBytes=100000, backupCount=10)],
level=logging.DEBUG,
format="[%(asctime)s] %(levelname)s [%(name)s.%(funcName)s:%(lineno)d] %(message)s",
datefmt='%Y-%m-%dT%H:%M:%S')
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
32887 次 |
| 最近记录: |