有人可以告诉我一个好的、免费的 Delphi 日志框架吗?它应该易于使用,并且应该支持不同的“日志编写器”,包括纯文本、数据库和网络。
哪个日志库比较好?提到以下只有最后两个是免费的。
我知道它不是免费的 - 但非常值得:Raize Software 的 CodeSite。品质有代价! :-)
我一直很喜欢使用 CodeSite,尤其是能够将几乎任何类型的对象添加到日志中而无需大量转换为字符串格式的能力通常非常有帮助。
再次强调:不是免费的,但如果您真的认真对待生产质量的日志记录和查看这些日志,那么它的价格是物有所值的。
马克
我已被授予更新休眠 Log4Delphi 项目的权限,并且我已将 4 年的错误修复和补丁汇总到 Source-forge 上可用的最新 0.8 版本中。 我在生产中使用这个库,发现它非常稳定、可靠且易于使用。
记录器库不应同步转储内容。这会减慢应用程序的速度。相反,它需要缓冲内容并在刷新时转储它们。
它还应该是线程安全的,并且能够从不同线程转储内容。 (最好也能够记录线程 ID)
它还应该灵活并且能够记录多种输出格式。
这是一个可以完成所有这些操作的库:loggerpro
我也是 CodeSite 的忠实粉丝,但如果您正在寻找免费的,那么使用 Delphi IDE 或来自 SysInternals 的 DebugView 的 OutputDebugString 怎么样。
Overseer,它是开源的,是 nexus 项目 的一部分,但独立存在,因此不需要您使用他们的框架。
新的 Delphi 日志框架,它位于单个文件中 (nxlogging.pas)。 nxlogging 是一个很好的轻量级且功能强大的类集,如 log4d(appenders、formaters),但使用起来更容易。它还包括文件附加程序(滚动文件、所有文件都在一个文件中等)和 TCP 附加程序,因此您可以将日志转发到中央日志服务器。
Log4D,Sourceforge 上用于 Delphi 的 Java Log4J 日志框架的另一个端口。
其架构的描述可以在 可在线获取帮助文件:http://cc.embarcadero.com/item/16446。
它目前基于 log4j 1.2.12,相当活跃,并且非常易于使用。它包括TLogODSAppender、TLogStreamAppender、TLogFileAppender、TLogRollingFileAppender。以下示例项目创建一个 ODS 附加程序。如果您在 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.