记录礼仪

时间:2012-02-15 19:38:28

标签: c++ c linux logging

我正在写一个服务器程序。在这个程序中,我记录分配。是否习惯于在日志记录(对于服务器)中覆盖以前运行的日志,使用某种新的运行头附加到该文件,或者创建新的日志文件(它不会经常重新启动)。

这些解决方案中的哪一种是在Linux / Unix / MacOS下运行的方式?

另外,有人可以为C ++ / C建议一个日志库吗?无论上述问题的答案如何,我都需要一个。

3 个答案:

答案 0 :(得分:3)

看看/var/log/...你会看到文件的结构类似于

serverlog
serverlog.1
serverlog.2

这是由logrotate完成的,它在cronjob中调用。但是文件中的所有内容都按时间顺序排列。所以你应该每次都附加到同一个日志文件中,如果需要,让logrotate将其拆分。

您还可以将配置文件添加到/etc/logrotate.d/以控制特定日志的旋转方式。根据日志文件的大小,在此处添加有关日志记录的信息可能是个好主意。您可以查看此目录中的其他文件以查看语法。

答案 1 :(得分:2)

这是一个相当复杂的问题。我不认为有一颗银弹可以一次性消灭你所有的担忧。

决定遵循什么政策的第一步是设定您的要求。 为什么是每个条目都记录了?它的目的是什么?在大多数情况下,这将导致一些相当具体的事实,例如:

  • 您需要能够当前日志与过去的日志进行比较。即使错误消息是不言而喻的,通过播放差异而不是通过服务器执行流程图来解决导致它的进程可以更快地确定 - 或者更糟糕的是,它的源代码。这意味着您需要至少过去的一个日志 - 盲目地覆盖是明确的

  • 您需要能够查找解析日志而不会忘记。这意味着使用已经建立的任何设施和政策。在Linux上,它意味着使用syslog工具来处理重要邮件,以允许它们出现在通常的地方。

还有一些好建议要注意:

  • 时间很重要。不仅因为它永远不够,而且因为每个条目没有适当时间戳的日志文件实际上是无用的。确保每个条目都有一个时间戳 - 大多数系统范围的日志记录工具都会为您执行此操作。确保所有计算机上的时钟都尽可能准确 - 使用NTP是一种很好的方法。

  • 日志条目应尽可能独立,最小化。你不需要有一个带有颜色,铃声和口哨的特殊标题来宣布你的服务器正在启动 - 一个简单的 MyServer(PID = XXX)从端口YYYYY 开始就足够{{1 (或任何体面的日志查看器的搜索功能)来查找。

  • 您需要确定每个日志记录通道的粒度。将几GB的调试日志数据发送到系统日志记录守护程序是一个好主意。一种好的方法可能是为每个日志记录级别和设施使用单独的日志文件,以便例如用户活动与低级数据混合在一起,只有在调试代码时才有用。

  • 确保您的日志文件位于一个位置,最好与其他应用程序分开。具有应用程序名称的目录是一个良好的开端。

  • 保持规范。当然,您可能已经设计了一个新的漂亮的日志文件命名方案,但如果它破坏了系统中的约定,即使是最有经验的操作员也很容易混淆。大多数人都必须在危急情况下查看更详细的日志 - 不要让他们更难。

  • 使用系统日志处理工具。例如。在Linux上,这意味着附加到同一个文件并允许像grep这样的外部守护程序来处理日志文件。它不仅会减少您的工作量,而且还会自动维护任何一般的日志记录策略。

  • 最后:始终将日志重要数据复制到系统日志中。操作员观察系统日志。请,不要让他们看看其他地方,只是为了发现你的申请即将推出ICBM ......

答案 2 :(得分:0)

https://stackoverflow.com/questions/696321/best-logging-framework-for-native-c

对于日志记录,我建议创建一个新的日志文件并使用一定的频率清理它以避免它变得太胖。覆盖以前登录的日志通常是个坏主意。