【问题标题】:Label python logger file with amount of logs instead of %asctime用日志量而不是 %asctime 标记 python 记录器文件
【发布时间】:2018-01-25 17:55:43
【问题描述】:

我在 Python 2.7 代码中使用记录器来创建要绘制的 CSV。 它在没有 RTC 的嵌入式模块上运行。 我对时间戳没有任何用处,但想包含一个标签,所以我可以更容易地绘制它们。记录器的设置方式使其在重新启动之间继续。

我目前正在使用提供如下标签的格式化程序进行记录:

# Add formatter to the file handler.
formatter = logging.Formatter('%(asctime)s,%(message)s','%H:%M:%S')
fh.setFormatter(formatter)

但由于开发板没有 RTC,因此只想将行号记录为标签而不是时间。

如何解决这个问题?我不能只使用增量整数,因为下次程序启动时它将从头开始而不是增量。

提前致谢!

【问题讨论】:

  • 在不知道您的系统是否有任何形式的非易失性存储的情况下,无法回答。但是,如果确实如此,那么答案就像将序列号存储在非易失性存储器中一样简单。如果您的日志记录是持久化文件,那么您可以简单地检查文件中的最后一条日志消息来初始化计数器。
  • 感谢@Clifford!后者是我正在寻找的:如何检查最后一条日志消息以初始化计数器?这是我从记录器做的事情,还是只是做something like this?
  • 我不是 Python 或 Linux 方面的专家 - 只是在这里,因为您将其标记为“嵌入式”。 logger 类不提供读取日志的方法,这是合理的,因为日志不需要是持久的(即保存到文件中)。我猜你将不得不使用常规文件 I/O。考虑到日志是可变长度的,寻找文件末尾并向后迭代以找到最后一行的开头可能是最有效的 - 也许将序列号放在末尾而不是行的开头。
  • 感谢@Clifford!我会那样做,然后:)

标签: python linux python-2.7 logging embedded


【解决方案1】:

要在记录器输出中显示当前代码行,这可能是您的答案

import logging
from inspect import currentframe, getframeinfo


logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(line)s - %(message)s')

logger = logging.getLogger()

logger.debug('Hi', extra={'line': getframeinfo(currentframe()).lineno})

如果要显示打开文件或 CVS 的行号,可以将 extra 字典中的值更改为适当的属性。

请不要忘记在所有调试语句中包含 extra 字典。

干杯! :)

【讨论】:

  • 这不是他要问的。他想用一个通过重置单调的序列号来标记日志行
猜你喜欢
  • 2015-12-29
  • 2010-11-12
  • 1970-01-01
  • 1970-01-01
  • 2020-01-03
  • 2017-06-04
  • 2015-09-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多