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

时间:2020-03-05 18:49:39  来源:igfitidea点击:

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

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

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

另外:感谢到目前为止的一些回答,尽管我应该提到大多数情况下消息是人与人之间的通信,而不是系统消息。更为原始的IRC。由我的用户决定以后(通过添加元数据)哪些消息很重要。这是可能源自过滤或者编辑日志的记录日志的原始记录。

解决方案

回答

如果我们要获取日志记录信息以进行将来的搜索和分析,那么数据库将是一个更好的答案。

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

回答

G'day,

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

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

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

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

采取其中一种标准语法文件并对其进行修改以处理日志字符串并不是很困难。

HTH。

干杯,

回答

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

如果要使用两个文件的路由(我同意Craig的观点,数据库可能是一个更好的选择),则可以通过拥有一个尽可能稀疏的文件来节省很多麻烦。之后进行快速搜索,然后将所有信息保存在一个位置(元数据和数据),而不是创建仅元数据格式。

回答

我将"拆分篱笆",并说将数据库用于所有分析/归档日志条目(例如Telnet通信)。这将为我们提供全文搜索,列和轻松方式搜索数据的好处。

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

如果数据库连接断开,或者表结构有些古怪,则登录到数据库将毫无意义。

试想一下,如果我们正在寻找稍微更"轻量级"的解决方案,则可以使用SQLite记录所有telnet流量,以便可以利用数据库结构的优势,同时也可以使用文件。

再次向log4net点头,我们可以使用它们拥有的ADO添加程序轻松完成此操作。

回答

我不确定我们要完成什么。 Telnet通常被视为一次字符协议,因此,当我们说"传入消息"时,是指每个字符都是一条消息吗?还是整个用户的会话都是消息?

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

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

例如2008_09_08_14_52_07_nidonocu

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

例如

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

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

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

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

--
布鲁斯