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

时间:2008-09-08 21:11:10

标签: c# parsing logging

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

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

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

补充:感谢到目前为止的一些答案,但我应该提到的是,大多数情况下,消息将是人与人之间的通信而不是系统消息。一种更原始​​的IRC。由我的用户决定以后(通过添加元数据)哪些消息很重要。这是记录日志中的原始文件,过滤或编辑的日志可能来自。

5 个答案:

答案 0 :(得分:2)

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

如果您打算使用两个文件的路径(我同意Craig认为数据库可能是更好的选择),您可以通过使用一个尽可能稀疏的文件来节省很多心痛。使其可用于以后的快速搜索,并将其保存在一个位置(元数据和数据),而不是创建仅元数据格式。

答案 1 :(得分:1)

天儿真好,

一定要记录平面文件并添加munge脚本以便稍后将其转换为XMl。

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

其次是制作您的类别,例如:异常,致命,错误,警告,信息等真的在你的日志中脱颖而出。

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

使用其中一个标准语法文件并修改它来处理日志字符串并不是很难。

HTH。

欢呼声,

罗布

答案 2 :(得分:0)

如果您正在捕获日志信息以供将来搜索和分析,那么数据库可能是更好的答案。

至于你的解决方案。平面文件不能很好地扩展,因为数据库扩展得更好。我也不会拆分文件,这只会加剧可伸缩性问题。如果你必须使用平面文件,我可能会尝试将元数据保存在csv(较少的头部)和csv文件索引的一系列文件中的数据。这样,所有数据都不会影响您的索引文件。只是我的想法。

答案 3 :(得分:0)

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

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

如果您的数据库连接断开,或者您的表结构出现问题,那么登录数据库将毫无意义。

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

另一个对log4net的点头,您可以使用他们拥有的ADO appender轻松完成此任务。

答案 4 :(得分:0)

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

我会做一些补救。 您有用户通过telnet登录,并且您希望捕获他们登录时所执行的所有操作。稍后,您希望能够将他们所做的事情与该用户以及他们执行此操作的时间和日期相关联。你需要以后能够找到“谁做'rm *'作为root?”

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

e.g。 2008_09_08_14_52_07_nidonocu

在文件中,我会捕获收到的每个字节,假设它们主要是纯文本字符。

e.g。

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

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

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

如果我的假设是错误的,我道歉。

-
布鲁斯