什么是日志库?

时间:2010-08-27 01:50:42

标签: language-agnostic logging

这可能是一个愚蠢的问题,因为我的大多数编程都包含一人科学计算研究原型和开发相对低级的库。我以前从未在企业环境中编写过大型程序。我一直想知道,日志库比使用优质的老式打印语句或文件输出,简单的编程逻辑和一些全局变量更容易确定事情的详细记录是什么?你怎么知道什么时候一些打印语句或一些基本文件输出不会削减它,你需要一个真正的日志库?

4 个答案:

答案 0 :(得分:2)

在日志记录要求可能发生变化的环境中使用,但更改或部署新可执行文件的成本很高。 (即使您拥有源代码,由于内部官僚作风,在程序中添加一行记录更改也是不可行的。)

日志记录库提供了一个框架,程序将使用该框架发出各种消息。这些可以通过源(例如,它首先被发送到的记录器对象,通常对应于事件发生的类),严重性等来描述。

在运行期间,使用“轻松”编辑的配置文件控制消息的实际传送。对于正常情况,大多数消息可能完全被遮挡。但是,如果情况发生变化,则可以更简单地修复以启用更多消息,而无需部署新程序。

以上描述了我理解意图的理想日志框架;在实践中,我已经在Java和Python中使用它们,在任何情况下我都发现它们值得增加复杂性。 : - (

答案 1 :(得分:2)

日志记录有助于调试问题,尤其是当您转移到生产环境时,人们无法控制的计算机上出现问题。最好的计划永远不会与敌人接触,而且记录可以帮助你跟踪面对现实世界数据时的战斗情况。

  1. 关闭shel记录库可以在不到5分钟的时间内轻松插入和播放。
  2. 日志库允许每个语句进行各种级别的日志记录(FATAL,ERROR,WARN,INFO,DEBUG等)。
  3. 您可以在运行时调高或减少日志记录以获取更少的信息。
  4. 高度线程化的系统有助于理清哪些线程正在做什么。日志库可以记录有关线程,时间戳的信息,而普通的打印语句则不能。
  5. 大多数情况下,您只允许打开部分日志记录以获取更多详细信息。因此,一个系统可以记录调试信息,另一个系统只能记录致命错误。
  6. 日志库允许您通过外部文件配置日志记录,因此无需重新编译,部署等即可轻松打开或关闭生产。
  7. 第三方库通常会记录,因此您可以像控制系统的其他部分一样对其进行控制。
  8. 大多数库允许您根据条件将部分或全部语句记录到一个或多个文件中。因此,您可以登录控制台和日志文件。
  9. 日志库允许您旋转日志,以便根据许多不同的条件保留多个日志文件。在日志获得20MB旋转到另一个文件之后说,并保留10个日志文件,以便日志数据始终为100MB。
  10. 某些日志语句可以编入或编译(取决于语言)。
  11. 可以扩展日志库以添加新功能。
  12. 当您开始想要其中一些功能时,您将需要开始使用日志记录库。如果您发现自己正在更改程序以获得其中一些功能,那么您可能需要查看一个好的日志库。它们易于学习,设置和使用,无处不在。

答案 2 :(得分:1)

他们是为了记录东西。

或者更严重的是,为了节省您必须自己编写,为您提供有关日志存储位置的灵活选项(数据库,事件日志,文本文件,CSV,发送到远程Web服务,由天鹅绒垫上的小精灵提供)以及在运行时记录的内容,而不是重新定义全局变量然后重新编译。

如果你只是为自己写作,那么你不太可能需要它,它可能会引入你不想要的外部依赖,但是一旦你的库开始被其他人使用,那么就可以建立一个日志框架帮助您的用户和您追踪问题。

答案 3 :(得分:0)

我知道当我有多个具有“详细日志记录”的子系统时,日志库很有用,但我只希望从其中一个看到详细数据。

当然,这可以通过为每个子系统设置一个全局日志级别来实现,但对我来说,更容易使用某种类型的“系统”。

我通常也有2D日志环境;一个轴上的“信息/警告/错误”(等)和另一个轴上的“AI / UI /模拟/网络”(等)。有了这个,我可以轻松指定我关心每个子系统的日志记录级别。一旦它到位,它实际上并不复杂,实际上它比if my_logging_level == DEBUG then print("An error occurred"); Plus更清晰,日志记录系统可以将文件/行信息填充到消息中,然后完全看中你可以将它们重定向到多个目标漂亮容易(文件,TTY,调试器,网络套接字......)。