我正在尝试为我的桌面程序设计错误和警告日志文件。
当我的程序读取用户的输入文件时,它可能会发现语法错误或某种类型的无效数据。一旦读完所有内容并且程序正在处理数据,就会发现更多问题。
我想将有关这些内容的消息写入一个简单的文本文件中。我可能还想要包含信息文本来指示进度,时间,内存使用等。我想要包括行号,甚至可能包含导致错误的实际输入行。
这将是用户想要浏览的文件,因此显然它必须布局合理且易于使用。
你知道这方面的任何风格指南,或者你看到一个让你自己想到的错误日志文件:“现在这是一个精心设计的日志文件!”
跟进:
前三个答案实际上更适用于服务器或事件日志。
我正在为我的桌面程序寻找日志文件的格式,以详细说明它在输入文件中找到的任何问题以及其处理的成功(或失败)。
我确信您使用的某些桌面应用程序会生成此类日志文件。你见过不好的吗?
答案 0 :(得分:3)
syslog
和log4j
是系统管理员可能熟悉的广泛使用的格式,并且有使用它们的工具。在做自己的格式之前,你至少应该先看看它们。
对于Windows,它几乎总是应用程序事件日志,我不像文本文件那样真正喜欢它,但它是正确的方式。我已经看到一些应用程序在程序目录或其他东西中编写文本文件,但它始终是临时的,从不标准。例如,McAfee VirusScan将文件记录在C:\ Documents and Settings \ All Users \ Application Data \ McAfee \ DesktopProtection中。我的机器在C:\ Documents and Settings \ username \ Local Settings \ temp * .log和C:\ WINDOWS \ temp * .log中有很多安装日志。但同样,他们都是不同的,临时的,没有明显精心设计的
答案 1 :(得分:2)
很少有我真正留下深刻印象的日志文件 - 实际上,我很难想到任何日志文件(而且我没有找到任何日志文件)。根据我的经验,出现的问题部分是因为日志的格式是供内部人员(程序员)理解,而不是为了另一个程序或外部人员(非程序员)来理解。
经常忽略关键信息;有时甚至是日期和时间信息。我建议让那些易于解析;我会使用ISO 8601表示法,例如'2010-01-22T10:23:21-08:00'(包括时区,注释)。我包括进程(和线程)ID;我考虑包括程序名称,参数(例如文件名);我也会以某种形式包含用户ID。其中一些可能每次运行只需要一次,但每条消息可能需要其他位。这部分取决于日志文件在每次运行时是唯一的还是在运行时共享,以及是否可以由多个用户/进程使用单个文件。
然后,您需要决定如何识别邮件内容 - 以及邮件内容的结束。特别是对于机器解析(但也用于人工解析),如果内容被明确地格式化并且可以检测到结束,则是有帮助的。您可能需要转义内容(这是最常删除的步骤,因此如果错误消息是关于格式错误的错误消息,则很难分辨文件中的数据以及有关数据的新错误消息在文件中)。在多线程程序中 - 或者可能在进程之间共享日志文件 - 您必须考虑如何缓冲写入,特别是如果您必须处理长行。您希望每条消息在日志文件中单独分开。这不一定是微不足道的 - 您甚至可能需要处理锁定协议以确保受控访问。
考虑是否需要为日志提供漂亮的打印机。
考虑基于XML的格式(带有开始和结束标记)是否有帮助。我不是XML的忠实粉丝,但它确实对机器处理有一些优势。
答案 2 :(得分:1)
我将日志写入csv文件并发现它非常方便(您可以将它们用作数据库或使用电子表格软件打开它们以进行复杂的分析)。示例日志文件是:
Date;Time;Severity;TID;Module;This;Source;Message
2010/01/21;08:47:05:205;DEBUG;4936;MAIN;0x00000000;DllMain@36;DLL_PROCESS_ATTACH
2010/01/21;08:47:05:205;DEBUG;4936;MAIN;0x00000000;DllMain@40;DLL_PROCESS_DETACH
我不确定它是否适合您的需求,但我认为您有主要想法。祝你好运!