好用且免费的Delphi日志框架

24

有没有人能推荐一个好用的、免费的 Delphi 日志框架?它应该易于使用,并支持不同的“日志写入器”,包括纯文本、数据库和网络。


1
无法在此处发表评论... 从名称来看,Log4delphi和Log4D都受到Log4J的启发和建模。那么它们有何不同,如何选择? - Arioch 'The
8个回答

13

1
@Kenny,由于Log4D是开源的,其他人随时可以继续开发它。此外,这里列出的Log4Delphi是另一个项目。 - mjn
QuickLogger已经更新,可以记录到Redis、Elastic、Influxdb、文件、电子邮件等。请访问https://github.com/exilon/QuickLogger。 - Kike Pérez

8
我知道这不是免费的,但它的价值绝对超过它的价格:CodeSite,由Raize Software提供。品质有其代价!:-)
我一直喜欢使用CodeSite,特别是能够将几乎任何类型的对象添加到日志中,而无需进行大量的转换为字符串格式,这通常非常有帮助。
再次强调:虽然不免费,但如果您真的认真对待生产质量的日志记录和查看这些日志,那么它的价值就如同黄金一般无价。
马克

7
尽管我是SmartInspect日志记录工具的开发人员之一,我的观点当然非常偏见,但我必须反对这个观点。 CodeSite几乎永远不是最佳解决方案的原因之一是,您必须在应用程序中分发外部调度服务才能记录数据(是的,现在有*Direct协议用于CodeSite,但它们非常有限和缓慢)。根据我的经验,还有其他反对CodeSite的原因,但这是用户转向其他工具的主要原因之一。 - Dennis G.
1
marc_s:很抱歉我给你点了个踩,我同意那不是最好的表达方式来表示我对你的说法不同意(我已经取消这个踩了),这并不是针对个人。 - Dennis G.
3
您询问了其他原因/问题:根据转换到SmartInspect的客户报告,CodeSite存在的一个大问题似乎是记录速度较慢。另一个问题是:默认的记录协议基于窗口消息,这对许多应用程序非常有问题,特别是自从Windows Vista改变了服务/桌面交互机制以来。其他问题包括:缺少异步记录、日志级别、文件加密等。当然,在某些情况下,这些问题可能并不是问题。我只是想说,有更好的工具,甚至不一定是我们自己的。 - Dennis G.
1
@Dennis:像CodeSite中的中央调度程序(或其他TCP/IP日志服务器)非常有用,或者我应该说是必需的,如果来自不同工作站或终端服务器群的许多应用程序必须写入同一个日志文件。您知道哪些其他日志记录工具可以处理此类情况吗?(只是好奇) - mjn
3
@mjn SmartInspect 提供了一个可选的路由器服务,可以完全实现这一点。 然而,这是非常特殊的用例(即使它是重要的),尽管我认为良好的日志记录工具应该支持此功能,但它不应该成为处理日志条目的默认/唯一方式(因为在大多数情况下,特别是当您需要在无法控制的环境中记录日志时,仅为记录日志安装单独的应用程序并不实际)。 - Dennis G.
显示剩余2条评论

6

我已获得更新休眠的Log4Delphi项目的访问权限,并将过去4年的错误修复和补丁整合到了最新的0.8版本中,该版本已在Source-forge上发布。我在生产中使用这个库,发现它非常稳定、可靠且易于使用。

Log4Delphi下载页面


1
Kenny,就像许多Delphi框架一样,随着人们停止使用Delphi,支持和维护也开始减少。曾经有一个人制作了Log4Delphi的克隆版本并一直保持更新,但我似乎找不到他的页面了。 - Melloware

6
一个日志库不应该同步地转储内容,这会减慢应用程序的速度。相反,它需要缓冲内容,并在刷新时转储它们。
它还应该是线程安全的,并能够从不同的线程中转储内容。(最好也能够记录线程ID)
它还应该是灵活的,并能够记录多种输出格式。
以下是一个具备所有这些功能的库: loggerpro

太棒了,这是 Delphi MVC 框架的作者编写的,我特别喜欢“内存 appender”,并在 mORMot 框架中采用了 TSynLog。 - Edwin Yip
1
@EdwinYip 我最近在loggerpro中添加了一个syslog appender,它们使得贡献变得非常容易。 - nurettin
谢谢你让我知道这件事。在Windows上如何接收和查看syslog?使用像这样的工具吗?https://github.com/MaxBelkov/visualsyslog 谢谢 - Edwin Yip
1
@EdwinYip 我看过使用visualsyslog的例子,但我更喜欢将日志发送到Linux(syslog-ng -> elasticsearch -> kibana),并从kibana查看日志,这允许你在Web界面上对elasticsearch数据进行全文搜索。 - nurettin

4

我也是CodeSite的忠实粉丝,但如果你想要免费的选项,可以考虑使用Delphi IDE或SysInternals的DebugView来输出调试信息。


3
另一个替代Codesite的选择是Overseer,它是开源的,属于nexus项目的一部分,但是独立存在,因此不需要您使用他们的框架。

2

有一个适用于Delphi的新日志框架,只需使用一个文件(nxlogging.pas)即可。nxlogging是一组漂亮、轻量、强大且易于使用的类,就像log4d(记录器、格式化程序)一样。它包括文件记录器(滚动文件、单一文件等...)和tcp记录器,因此您可以将日志转发到中央日志服务器。


1
链接:http://www.navimatix.de/loesungen/log-server/logging-fuer-delphi-nxlogging/ - mjn
2
很遗憾,它是用德语编写的。网站可以使用谷歌翻译,但应用程序本身不能。 - vladon

1

Log4D,这是 Java Log4J日志框架 的 Delphi 另一个移植版本,可以在 Sourceforge 找到。

源代码页面的 Log4D 项目页

可以在 CodeCentral这里 中找到其架构描述。

在线帮助文件可在 http://cc.embarcadero.com/item/16446 上获得。

它目前基于 log4j 1.2.12,使用相当活跃且非常易用。 它包括 TLogODSAppender、TLogStreamAppender、TLogFileAppender、TLogRollingFileAppender。

以下示例项目创建了一个ODS appender。如果您在IDE中运行它,日志消息将出现在“事件日志”窗口中。
program Log4Dexample;

{$APPTYPE CONSOLE}

uses
  Log4D,
  SysUtils;

var
  Logger: TLogLogger;

begin
  try
    // basic configuration - creates a TLogODSAppender (ODS = OutputDebugString)
    TLogBasicConfigurator.Configure;

    // set the log level
    TLogLogger.GetRootLogger.Level := Trace;

    // create a named logger
    Logger := TLogLogger.GetLogger('exampleLogger');

    // write log messages
    Logger.Fatal('fatal output');
    Logger.Error('error output');
    Logger.Warn('warn output');
    Logger.Info('info output');
    Logger.Debug('debug output');
    Logger.Trace('trace output');

    ReadLn;

  except
    on E:Exception do
    begin
      Writeln(E.Classname, ': ', E.Message);
      ReadLn;
    end;
  end;
end.

编写附加器很简单,这里是一个简单控制台附加器的示例:
unit LogConsoleAppender;

interface

uses
  Log4D;

type
  { Send log messages to console output. }
  TLogConsoleAppender = class(TLogCustomAppender)
  protected
    procedure DoAppend(const Message: string); override;
  end;

implementation

{ TLogConsoleAppender }

procedure TLogConsoleAppender.DoAppend(const Message: string);
begin
  if IsConsole then
    Write(Message);
end;

initialization
  RegisterAppender(TLogConsoleAppender);

end.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接