代码之家  ›  专栏  ›  技术社区  ›  Boris Guéry

写入日志文件的内容?

  •  11
  • Boris Guéry  · 技术社区  · 17 年前

    我的问题很简单:写什么到日志中。 有什么约定吗? 我要放什么?

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

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

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

    谢谢你

    7 回复  |  直到 16 年前
        1
  •  9
  •   Brian R. Bondy    17 年前

    以下是一些内容建议:

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

    实施的最佳实践:

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

    编辑: 我刚注意到这个问题是用python标记的,所以请在我之前看看s.lott的答案。这可能足以满足你的需要。

        2
  •  18
  •   S.Lott    17 年前

    很愉快,已经实施了。

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


    编辑

    “易于解析,易于阅读,”通常是相互矛盾的特性。英语——易读,难解析。XML——易于解析,难以读取。没有一种格式能够实现易于阅读和易于解析。有些日志格式“不可怕,不可能解析”。

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

        3
  •  1
  •   Community Mohan Dere    9 年前

    既然你把你的问题标为python,我建议你 this question 也。 至于内容,布赖恩的建议是好的。但是,如果您使用共享日志,请记住添加程序名。

    日志文件的重要内容是“可greppability”。尝试在一行中提供您的所有信息,其中包含适合特定条件的唯一(也以基数表示)字符串标识符。至于时间戳,请使用排序良好的ISO-8601标准。

        4
  •  1
  •   sybreon    17 年前

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

        5
  •  1
  •   Dima    17 年前

    在我看来,最好的方法是使用现有的日志库,例如 log4j (or it's variations for other languages) .它可以让您控制如何格式化消息,并且您可以在不接触代码的情况下对其进行更改。它遵循最佳实践,功能强大,被数百万用户使用。当然,您可以编写自己的日志框架,但这将是非常奇怪的事情,除非您需要非常具体的东西。在任何情况下,请浏览它们的文档,并查看日志语句是如何显示在文档中的。

    查看log4py-python移植的log4j版本,我认为有几种针对python的实现。

        6
  •  0
  •   S M Kamran    17 年前

    时间戳,即日期时间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>
    
        7
  •  0
  •   Denis Barmenkov    16 年前

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

    推荐文章