Language agnostic 日志库的用途是什么?

Language agnostic 日志库的用途是什么?,language-agnostic,logging,Language Agnostic,Logging,这可能是一个愚蠢的问题,因为我的大部分编程都是由单人科学计算研究原型和开发相对低级的库组成的。我以前从未在大型企业环境中编程。我一直想知道,与仅仅使用好的老式打印语句或文件输出、简单的编程逻辑和一些全局变量来确定详细的日志记录方式相比,日志记录库使哪些主要事情变得更容易?你怎么知道几条打印语句或一些基本的文件输出什么时候不能解决问题,你需要一个真正的日志库呢?我知道,当我有多个子系统具有“详细日志记录”时,日志库很有用,但我只想看到其中一个子系统的详细数据 当然,这可以通过每个子系统都有一个全局

这可能是一个愚蠢的问题,因为我的大部分编程都是由单人科学计算研究原型和开发相对低级的库组成的。我以前从未在大型企业环境中编程。我一直想知道,与仅仅使用好的老式打印语句或文件输出、简单的编程逻辑和一些全局变量来确定详细的日志记录方式相比,日志记录库使哪些主要事情变得更容易?你怎么知道几条打印语句或一些基本的文件输出什么时候不能解决问题,你需要一个真正的日志库呢?

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

当然,这可以通过每个子系统都有一个全局日志级别来实现,但对我来说,使用某种“系统”来实现这一点更容易


我通常也有一个2D日志记录环境;“信息/警告/错误”(etc)在一个轴上,而“AI/UI/模拟/网络”(etc)在另一个轴上。有了它,我可以很容易地为每个子系统指定我关心的日志记录级别。一旦它就位,它实际上就没有那么复杂了,事实上,如果我的日志记录级别=DEBUG-then-print(“发生错误”),它比使用
要干净得多此外,日志记录系统可以将文件/行信息塞进消息中,然后完全想象您可以非常轻松地将它们重定向到多个目标(文件、TTY、调试器、网络套接字…。

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

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

在运行期间,消息的实际传递是使用“容易”编辑的配置文件控制的。在正常情况下,大多数信息可能会完全模糊。但是,如果情况发生变化,则更简单的修复方法是启用更多消息,而无需部署新程序


以上描述了理想的日志框架,正如我理解的意图;实际上,我在Java和Python中使用过它们,但在这两种情况下,我都没有发现它们值得增加复杂性-(

它们是用来记录东西的

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


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

日志记录有助于调试问题,尤其是在您转到produc时在你无法控制的人的机器上会发生混乱和问题。最好的计划在与敌人的接触中永远无法生存,而日志记录可以帮助你在面对真实世界的数据时跟踪战斗的进展

  • 现成的日志库很容易在不到5分钟的时间内即插即用
  • 日志库允许对每个语句进行不同级别的日志记录(致命、错误、警告、信息、调试等)
  • 您可以打开或关闭日志记录,以便在运行时获得更多或更少的信息
  • 高度线程化的系统有助于区分线程在做什么。日志库可以记录关于线程、时间戳的信息,而普通打印语句无法记录这些信息
  • 大多数系统只允许打开日志记录的一部分以获取更多详细信息,所以一个系统可以记录调试信息,而另一个系统只能记录致命错误
  • 日志库允许您通过外部文件配置日志记录,以便在生产中轻松打开或关闭日志记录,而无需重新编译、部署等
  • 第三方库通常会记录日志,以便您可以像控制系统的其他部分一样控制它们
  • 大多数库允许您根据条件将部分或全部语句记录到一个或多个文件中。因此,您可以同时登录控制台和日志文件
  • 日志库允许您旋转日志,因此它将根据许多不同的条件保留多个日志文件。例如,在日志达到20MB后,旋转到另一个文件,并保留10个日志文件,以便日志数据始终为100MB
  • 某些日志语句可以编译入或编译出(取决于语言)
  • 可以扩展日志库以添加新功能

  • 当您开始需要其中一些功能时,您会希望开始使用日志库。如果您发现自己正在更改程序以获得其中一些功能,您可能希望查看一个好的日志库。它们易于学习、设置和使用,并且无处不在。

    将语句打印到…?我们中的一些人没有权限观看产品我们的代码运行的环境,portable logs==gold mine:)@Nick:很公平,我已经编辑了这个问题,将文件输出也包括在内,因为我的初衷是要将其包括在内。在我选择的语言中(D)我觉得这些大部分都是我自己实现的琐碎内容,即比查找、下载、编译、配置、,日志库的学习等。如果我在任何给定的时间只实现我实际需要的那些,并且您将使其完全满足我的特定应用程序的要求的价值考虑在内,这一点尤其正确。@dsimcha-我大体上同意这一点