11

我的问题很简单:将什么写入日志。有什么约定吗?我必须放入什么?

由于我的应用程序必须发布,我希望有友好的日志,大多数人都可以阅读它而无需询问它是什么。

我已经有了一些想法,比如时间戳、每个函数/方法的唯一标识符等。我想要几个日志级别,比如跟踪/调试、信息、错误/警告。

您是否使用一些预先格式化的日志资源?

谢谢

4

7 回答 7

18

这很令人愉快,并且已经实施。

阅读:http ://docs.python.org/library/logging.html


编辑

“易于解析、阅读”通常是相互矛盾的特征。英语——易读,难解析。XML——易于解析,难以阅读。没有一种格式可以做到易读易解析。一些日志格式“读起来并不可怕,也不是不可能解析”。

有些人创建多个处理程序,以便一个日志具有多种格式:供人们阅读的摘要和用于自动解析的 XML 版本。

于 2009-04-23T01:47:54.987 回答
9

以下是对内容的一些建议:

  • 时间戳
  • 信息
  • 日志消息类型(例如错误、警告、跟踪、调试)
  • 线程 ID(因此您可以从多线程应用程序中理解日志文件)

实施的最佳实践:

  • 在 write 方法周围放置一个互斥体,这样您就可以确保每次写入都是线程安全的并且有意义。
  • 一次向日志文件发送 1 条消息,并每次指定日志消息的类型。然后,您可以设置程序启动时要采用的日志记录类型。
  • 在文件上不使用缓冲,或者经常刷新以防程序崩溃。

编辑:我刚刚注意到这个问题被标记为 Python,所以请在我之前查看 S. Lott 的回答。它可能足以满足您的需求。

于 2009-04-23T01:44:15.993 回答
1

既然你标记了你的问题 python,我也向你推荐这个问题。至于内容,布赖恩的提议很好。但是,如果您使用共享日志,请记住添加程序名称。

关于日志文件的重要一点是“greppability”。尝试在一行中提供所有信息,并使用适当的字符串标识符,这些标识符对于特定条件是唯一的(也是基数)。至于时间戳,请使用分类良好的 ISO-8601 标准。

于 2009-04-23T01:48:47.527 回答
1

一个好主意是查看日志分析软件。除非您打算自己编写,否则您可能希望利用现有的日志分析包,例如 Analog。如果是这种情况,您可能希望生成与其接受的格式足够相似的日志输出。它将允许您以最小的努力创建漂亮的图表和图形!

于 2009-04-23T02:17:39.533 回答
1

在我看来,最好的方法是使用现有的日志库,例如log4j(或其他语言的变体)。它使您可以控制消息的格式,并且您可以在不接触代码的情况下对其进行更改。它遵循最佳实践,稳健且被数百万用户使用。当然,您可以编写自己的日志框架,但这样做会很奇怪,除非您需要一些非常具体的东西。无论如何,请浏览他们的文档并查看日志语句是如何呈现的。

查看 log4py - log4j 的 Python 移植版本,我认为 Python 有几种实现..

于 2009-04-23T08:48:56.910 回答
0

Python 的日志库对于单进程线程是线程安全的。

于 2010-01-11T16:31:06.277 回答
-1

timeStamp 即 DateTime YYYY/MM/DD:HH:mm:ss:ms 用户线程 ID 函数名 消息/错误消息/成功消息/函数跟踪

以 XML 格式保存它,然后您可以轻松地为它编写解析器。

<log>
  <logEntry DebugLevel="0|1|2|3|4|5....">
    <TimeStamp format="YYYY/MM/DD:HH:mm:ss:ms" value="2009/04/22:14:12:33:120" />
    <ThreadId value="" />
    <FunctionName value="" />
    <Message type="Error|Success|Failure|Status|Trace">
      Your message goes here
    </Message> 
  </logEntry>
</log>
于 2009-04-23T01:57:03.203 回答