什么写入日志文件?

时间:2009-04-23 01:41:25

标签: python logging methodology

我的问题很简单:写入日志的内容。 有没有约定? 我该怎么办?

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

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

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

谢谢

7 个答案:

答案 0 :(得分:18)

这很愉快,已经实施了。

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


修改

“易于解析,阅读”通常是矛盾的特征。英语 - 易于阅读,难以解析。 XML - 易于解析,难以阅读。没有格式可以实现易于阅读和易于解析。一些日志格式“读起来并不可怕,也无法解析”。

有些人创建了多个处理程序,因此一个日志有多种格式:人们阅读的摘要和自动解析的XML版本。

答案 1 :(得分:9)

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

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

实施的最佳做法:

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

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

答案 2 :(得分:1)

由于你标记了你的问题python,我也推荐你this question。 至于内容,Brian的建议很好。但是请记住,如果使用共享日志,请添加程序名称。

关于日志文件的重要事情是“greppability”。尝试在一行中提供所有信息,并为特定条件提供唯一的(也是基数)正确的字符串标识符。至于时间戳,请使用ISO-8601标准,该标准可以很好地排序。

答案 3 :(得分:1)

一个好主意是查看日志分析软件。除非您打算自己编写,否则您可能希望利用现有的日志分析软件包,例如Analog。如果是这种情况,您可能希望生成一个类似于它接受的格式的日志输出。它可以让您轻松创建漂亮的图表和图形!

答案 4 :(得分:1)

在我看来,最好的方法是使用现有的日志记录库,例如log4j (or it's variations for other languages)。它使您可以控制消息的格式化,并且无需触摸代码即可对其进行更改。它遵循最佳实践,强大并且被数百万用户使用。当然,你可以编写自己的日志框架,但这样做很奇怪,除非你需要一些非常具体的东西。无论如何,请浏览他们的文档,看看如何在那里显示日志语句。

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

答案 5 :(得分:0)

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>

答案 6 :(得分:0)

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