在常量运行循环内创建日志(使用python日志记录模块)的好方法是什么,而不会产生大量无用的日志文件? 一个例子就是一个循环,它会持续列出一个文件夹,并在看到一个特定类型的文件时执行一些操作。 我想记录没有找到文件,或者找到了文件但类型错误,而且每次检查文件夹时都不会记录相同的行,因为它可能每秒运行多次。登录连续循环
登录连续循环
回答
创建你所需要的任何其他功能的Handler
子类。请将您不想再次输入emit
的最后一条或所有先前记录的邮件存储起来:
def make_filetype_aware_handler(handler_class):
class DontRepeatFiletypeHandler(handler_class):
def __init__(self, *args, **kwds):
super().__init__(*args, **kwds)
self.previous_types = set()
def emit(self, record):
if not record.file_type in self.previous_types:
self.previous_types.add(record.file_type)
super().emit(record)
return DontRepeatFiletypeHandler
FiletypeStreamHandler = make_filetype_aware_handler(logging.StreamHandler)
logger = logging.getLogger()
logger.addHandler(FiletypeStreamHandler(sys.stderr))
logger.debug('Found file of type %(file_type)', file_type='x-type/zomg')
谢谢!猜猜我也可以检查相同或非常类似的消息。 –
@Mikkel Jans:是的,这是相当常见的登录方式。重复的消息将被替换为“消息重复X次”。你可以很容易地有一个“最后的消息”占位符和一个计数器。当消息更改时,转储一个额外的日志项目以前一个连续的计数。 –
我的理解是,您试图一次又一次地限制记录相同的消息。
如果这是您的问题,我会创建一组您已经记录的file_types。然而,你必须要小心,如果这是要一直运行下去,你最终会崩溃..
from sets import Set
logged = Set()
while yourCondition:
file_type = get_next_file_type()
needToLog = #determine if you need to log this thing
if needToLog and (not file_type in logged):
logger.info("BAH! " + file_type)
logged.add(file_type)
你有那么多的parens,是在LISP吗? :P这段代码给了我:NameError:name'Set'没有定义 –
@Rosh Oxymoron有帮助吗?它的python psuedo代码:) parens有助于为我组织;)。像名字一样)。 – Nix
登录不太重要的事件,以较低的优先级,如DEBUG。请参阅setLevel和SysLogHandler。
在开发时将级别设置为DEBUG,随着应用程序的成熟,将其设置为更合理的值,如INFO或ERROR。
你的应用程序应该对错误做些事情,比如删除错误类型的文件和/或创建缺少文件;或将错误配置的目录从作业轮询移至隔离位置,因此您的日志不会被淹没。
import logging
logger = logging.getLogger(test)
# logging to a file
hdlr = logging.FileHandler(test.log)
formatter = logging.Formatter('%(asctime)s %(filename)s %(lineno)s %(levelname)s % (message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.DEBUG)
然后在循环中,您必须检查文件类型以及文件是否存在。 然后加入:
logger.debug('File Type : %s ' % file_type)
也
if file_present:
logger.debug('File Present : %s ' % present)
- 1. 连续登录F#
- 2. 连续循环UIScrollViews?
- 3. 连续CountDownTimer循环
- 4. while循环登录
- 5. Jmock循环连续调用
- 6. 连续循环执行runnable
- 7. UICollectionView水平连续循环
- 8. 在java中连续循环
- 9. Gnuplot循环连续变量
- 10. AJAX调用连续循环?
- 11. 定时器连续循环
- 12. FETCH_ASSOC PDO连续循环
- 13. 在F#F#连续循环
- 14. 连续ImageViews在循环中
- 15. imacros |登录和循环(第二循环)
- 16. Jquery移动登录循环
- 17. ubuntu登录循环13.10
- 18. Ubuntu 14.04登录循环
- 19. Facebook登录循环周围
- 20. Drupal 7 Chrome登录循环
- 21. Facebook登录无限循环
- 22. CakePHP - 无限循环登录
- 23. Windows 7 Ent登录循环
- 24. joomla 3.后台管理员登录失效 - 继续循环
- 25. 循环访问MSAccess中的连续记录
- 26. Laravel:曲目编号OS连续登录
- 27. NET_SFTP做连续登录不工作时
- 28. ASP.NET阻止用户连续登录
- 29. 对于非连续范围的循环
- 30. 连续循环代码Java中
您是在查找“if”语句吗? – Gandi
请尝试更好地解释它。 – juankysmith
你能否澄清你的问题...所以你想让它在循环中每隔500次记录一次?或者您是否希望只在邮件发生变化时才进行登录? – EdoDodo