任何人都可以向我暗示一个好的,免费的Delphi日志框架吗?它应该易于使用,它应该支持不同的“日志编写器”,包括纯文本,数据库和网络。
答案 0 :(得分:13)
Which logging library is better?提到以下内容,其中只有最后两个是免费的。
答案 1 :(得分:7)
我知道这不是免费的 - 但值得花钱:Raize Software的CodeSite。质量有它的价格! : - )
我一直很喜欢使用CodeSite,特别是能够将任何类型的对象添加到日志而不需要大量转换为字符串格式的功能通常非常有用。
再说一次:如果你真的非常认真考虑生产质量的日志记录和查看这些日志,那么它不是免费的,而是值得它的黄金价格。
马克
答案 2 :(得分:6)
我被授予更新休眠Log4Delphi项目的权限,我已经将4年的错误修正和补丁汇总到Source-forge上的最新0.8版本中。我在生产中使用这个库,发现它非常稳定,可靠且易于使用。
答案 3 :(得分:3)
我也是CodeSite的忠实粉丝,但如果您正在寻找免费的,那么使用Delphi IDE或DebugView from SysInternals的OutputDebugString怎么样。
答案 4 :(得分:3)
Codesite的另一个替代方案是Overseer,它是开源的,是nexus project的一部分,但不管是什么,所以不要求你使用他们的框架。
答案 5 :(得分:2)
还有另一个新的Delphi日志框架,在一个文件中(nxlogging.pas)。 nxlogging是一个很好的轻量级和强大的类,如log4d(appenders,formaters),但更容易使用。它包括文件追加器(滚动文件,全部在一个等等)和tcp appender,因此您可以将日志转发到中央日志服务器。
答案 6 :(得分:2)
记录器库不应该同步转储内容。这将减慢应用程序。相反,它需要缓冲内容并在刷新时转储它们。
它也应该是线程安全的,并且能够从不同的线程转储内容。 (并且最好能够记录线程ID)
它还应该灵活,能够记录多种输出格式。
这是一个完成所有这些工作的库:loggerpro
答案 7 :(得分:1)
Log4D ,Sourceforge上Delphi的另一个Java Log4J logging framework端口。
Log4D project page at sourceforge
可在CodeCentral和here上找到其架构的说明。
帮助文件可在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.
编写appender很简单,这是一个简单的控制台appender的例子:
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.