GUI程序的日志记录策略

2024-10-04 01:35:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在我的应用程序(一个绘画类程序)中添加一些调试日志记录,并将这些信息写入一个文件可能会有好处。我当前的调试策略是连接一个自定义异常侦听器(系统异常挂钩)并允许用户通过电子邮件向我发送导致崩溃的堆栈跟踪的副本。在

这对于查看用户是如何导致程序崩溃非常方便的,但是我觉得日志文件肯定会有所帮助。 我想知道最好的办法是什么。我正在考虑通过命令行开关启用日志记录,并在程序每次“运行”时创建一个日志,并在发生崩溃时用电子邮件给自己发送一份日志副本。但是,如果应用程序未处于调试模式,日志将不会有帮助!在

我有点担心日志填充太快-如果我把日志放在一些鼠标运动事件处理程序中,那么它将创建许多条目。另外,一个日志文件可能会变得相当大,并且在检查bug报告时会填充与我无关的信息。在

你们怎么处理?我对日志记录的频率很感兴趣-因为我的应用程序对很多事件(例如鼠标移动;取决于用户输入)做出响应,我不想创建过多的日志记录。在


Tags: 文件用户程序信息应用程序堆栈电子邮件系统
2条回答

如前所述,您可以使用记录器模块。您可以设置默认的日志记录级别(例如警告),并将所有类型的消息放入代码中,从调试到关键。简而言之,如果您将日志记录级别设置为警告,即使您的代码记录调试消息,它们也不会出现在文件(或stdout)中。这是因为日志模块只记录优先级高于或等于Warning(警告、错误和严重)的消息。在

作为一个简单的解释,请看以下代码:

import logging
import logging.handlers as handlers

logger = logging.getLogger('myapp')
hdlr = logging.FileHandler('/tmp/myapp.log')
formatter = logging.Formatter('%(asctime)s %(levelname)s: %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.WARNING)

logger.debug('debug!')
logger.info('info!')
logger.warning('warning!')
logger.error('error!')
logger.critical('critical!')

它会创建一个名为我的应用程序日志公司名称:

^{pr2}$

如果您担心文件大小,可以使用旋转日志,它将根据您的条件丢弃最旧的日志:

import logging
import logging.handlers as handlers

logger = logging.getLogger('myapp')
hdlr = handlers.RotatingFileHandler('/tmp/log/myapp.log', maxBytes=100, backupCount=5)
formatter = logging.Formatter('%(asctime)s %(levelname)s: %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.WARNING)

for i in range(20):
    logger.debug('debug%i!'%i)
    logger.info('info%i!'%i)
    logger.warning('warning%i!'%i)
    logger.error('error%i!'%i)
    logger.critical('critical%i!'%i)

在本例中,我使用了一个最大大小为100字节的日志文件(非常小,您应该提高它),备份计数为5。这意味着当一个日志达到100字节时,它将被“旋转”:一个新的(并且是空的)我的应用程序日志将被创造,旧的将成为我的应用程序日志.1。在下一轮我的应用程序日志.1将成为我的应用程序日志.2,在我的应用程序日志会有新的我的应用程序日志.1。它会重复,直到我们我的应用程序日志, 我的应用程序日志.1条,我的应用程序日志.2。。。我的应用程序日志.n(在本例中,限制为我的应用程序日志.5条)。当我们点击这个,并且需要旋转日志时我的应用程序日志.5文件将被丢弃。所以,大小限制为5*100字节。在

看看发生了什么:

magun@~: ls /tmp/log/
myapp.log  myapp.log.1  myapp.log.2  myapp.log.3  myapp.log.4  myapp.log.5
magun@~: cat /tmp/log/myapp.log
2010-11-05 12:33:52,369 ERROR: error19!
2010-11-05 12:33:52,376 CRITICAL: critical19!
magun@~: cat /tmp/log/myapp.log.1
2010-11-05 12:33:52,362 CRITICAL: critical18!
2010-11-05 12:33:52,369 WARNING: warning19!
magun@~: cat /tmp/log/myapp.log.2
2010-11-05 12:33:52,355 WARNING: warning18!
2010-11-05 12:33:52,362 ERROR: error18!
magun@~: cat /tmp/log/myapp.log.3
2010-11-05 12:33:52,348 ERROR: error17!
2010-11-05 12:33:52,355 CRITICAL: critical17!
magun@~: cat /tmp/log/myapp.log.4
2010-11-05 12:33:52,340 CRITICAL: critical16!
2010-11-05 12:33:52,348 WARNING: warning17!
magun@~: cat /tmp/log/myapp.log.5
2010-11-05 12:33:52,333 WARNING: warning16!
2010-11-05 12:33:52,340 ERROR: error16!
magun@~:

如您所见,我们丢失了许多日志(0-15),但最近的日志在那里,保留了用户的可用空间。别忘了自下而上阅读日志:)

相关问题 更多 >