格式化日志的好方法是什么?

What is a good way to format logs?

提问人:Nidonocu 提问时间:9/9/2008 最后编辑:Nidonocu 更新时间:11/3/2009 访问量:748

问:

我正在设计一个应用程序,其中包括需要记录我从 Telnet 连接收到的所有传入消息。文本基本上是纯文本,但可以包括提供文本颜色和格式(16 种颜色、粗体、下划线等)的 ANSI 标签。

我想格式化我的日志,以存储带有格式、日期/时间以及以后可能的其他元数据的文本。我最初的想法是 XML,但这可能会影响我以后编写快速搜索工具的能力。我目前的想法是日期/时间+一个文件中的文本,元数据存储在另一个XML文件中,由行号引用。

这是一个好的解决方案吗?另外,我应该在哪里以及如何存储格式化命令?原始的 ANSI 标记会破坏纯文本,但将它们放在两个不同的文件中可能会很尴尬。

补充:感谢到目前为止的一些答案,尽管我应该提到大多数时候消息将是人与人之间的通信,而不是系统消息。某种更原始的 IRC。由我的用户稍后决定(通过添加元数据)哪些消息是重要的。这是筛选或编辑的日志可能派生的记录日志上的原始日志。

C# 分析 日志记录

评论


答:

0赞 Craig 9/9/2008 #1

如果您正在为将来的搜索和分析提供日志记录信息,也许数据库会是一个更好的答案。

至于你的解决方案。平面文件根本无法很好地扩展,而数据库的扩展要好得多。我也不会拆分文件,这只会增加可伸缩性问题。如果您必须使用平面文件,我可能会尝试将元数据保存在 csv 中(减少开销),并将数据保存在由 csv 文件索引的一系列文件中。这样,所有数据都不会影响索引文件。只是我的想法。

评论

0赞 Nidonocu 9/9/2008
我将在以后添加自动拆分文件。这种情况的数据库有点繁重,我希望日志也能够独立存在。
1赞 Rob Wells 9/9/2008 #2

G'day,

一定要在平面文件中进行日志记录,并添加 munge 脚本以稍后将其转换为 XMl。

第一个建议是确保所有日期/时间字符串都采用 ISO 8601 格式,即 YYYY-MM-DD hh:mm:ss。

其次是让你的类别,例如异常、致命、错误、警告、信息等,在你的日志中真正突出。

然后,查看一些 vim 语法文件,并为您的日志格式创建一个新语法,以便重要的日志条目真正脱颖而出。

获取一个标准语法文件并对其进行修改以处理日志字符串并不难。

HTH。

干杯

2赞 Yes - that Jake. 9/9/2008 #3

我的第一个建议是使用像 log4net 这样的插入式日志记录工具,这将使格式化更加自动化。

如果你打算走两个文件的路线(我同意 Craig 的观点,数据库可能是一个更好的选择),你可能会通过拥有一个尽可能稀疏的文件来为自己节省很多心痛,以便以后快速搜索,并且一个将所有信息保存在一个地方(元数据和数据)而不是创建仅元数据格式。

0赞 Dillie-O 9/9/2008 #4

我将“拆分栅栏”,并说将数据库用于所有分析/存档日志条目(例如您的 Telnet 通信)。这将为您提供全文搜索、列和搜索数据的简单方法的好处。

对任何调试/严重错误类型日志使用平面文件(或 XML 格式,因为文件不应太大)。

如果数据库连接断开,或者表结构出现问题,则记录到数据库将毫无意义。

想想看,如果你正在寻找一个稍微“轻量级”的解决方案,你可以使用SQLite来记录你所有的telnet流量,这样你就可以利用数据库结构的优势,同时也拥有文件的可用性。

通过对 log4net 的再次点头,您可以使用他们拥有的 ADO appender 轻松完成此操作。

0赞 bmb 9/9/2008 #5

我不确定你到底想完成什么。Telnet 通常被认为是一次字符协议,所以当你说“传入消息”时,你的意思是每个字符都是一条消息吗?还是整个用户的会话是一条消息?

我会做一些假设。 您有用户通过 telnet 登录,并且您希望捕获他们在登录时所做的一切。稍后,您希望能够将他们与该用户所做的事情以及他们所做的事情的时间和日期相关联。您需要稍后能够搜索以找出“谁将'rm *'作为root?

我会将每个用户的会话存储为一个单独的文件,其命名约定包括用户的登录名和时间戳。

例如2008_09_08_14_52_07_nidonocu

在文件中,我将捕获接收到的每个字节,假设它们大多是纯文本字符。

例如

ls
cd www
ls
vi index.html
/copyright 2007
llllllllllllr8:wq
exit

将 8 位 ANSI 字符也写入文件。您应该能够使用文本编辑器和 grep 进行基本的审核和搜索。您可以使用二进制文件查看器,或者如果您需要实际读取 8 位数据,则可以稍后变得更加复杂。

备份、归档、清除等都可以使用常规的文件系统工具和脚本来完成。

如果我的假设是错误的,我深表歉意。

--
布鲁斯