log4delphi試用
因為delphi不是我的主力開發(fā)工具,所有一直沒有使用一個正式的日志組件。
偶爾要記日志時,就復(fù)制同事的一個簡單的文件日志函數(shù)。
現(xiàn)在又要用到delphi日志了,決定找個通用的日志組件,造福共事的Delphi程序員們。
讓我失望的是,日志功能好像對Delphi程序員沒什么吸引力,
百度“Delphi 日志”竟然沒有什么有用線索。還是Google“Delphi logger”有點用。
不管怎樣,讓我找到了log4delphi。明顯國內(nèi)用的人不多,不知大家是否有更好的日志類。
對我來說,log4delphi與log4j、log4cpp如出一轍,正合我意。
0.7版,近兩年沒更新了??碨VN也是沒有任何更新。
下載了看,文檔相當(dāng)全。
因為用D6,而bin包只有D7的,所以自己需要編譯一個包。編譯時注意:
* 有STD和PROF兩個版本的*.dpk,比較一下,STD沒有RollingAppender,看來PROF全一點。
* 參考編譯出錯信息,需手工創(chuàng)建build目錄。
* 編譯報util/TFileUnit文件未找到,直接刪了它就好了,沒用。
可能用它自帶的Makefile更快更好,但好像Makefile是對D7的,也要改。
順便安裝包,并添加lib目錄。
DELPHI盒子網(wǎng)站上有個log4Delphi v0.7 修改版,據(jù)稱發(fā)現(xiàn)并改正了內(nèi)存泄漏。
http://www./article.asp?articleid=3900
我也下載查看了,覺得沒改全,發(fā)了個評論。決定暫時用原版。
接下來就可以按照它的Get Started和Tutorial試用了。
Get Started例子:
日志文件在寫時,無法共享讀取,不能實時查看日志。
日志文件名必須是完整路徑,不能僅是文件名,也不能‘./test.log’這樣。
TFileAppender創(chuàng)建時會清空文件,而不是Append。
Tutorial例子:
TConfiguratorUnit.doPropertiesConfiguration('log4delphi.properties');
同樣使用TFileAppender時卻沒有打開日志文件時的共享違例。
僅配置rootLogger,沒有配置subLogger時,subLogger無輸出。與log4j不同。
轉(zhuǎn)載自:http://blog.csdn.net/brightgems/archive/2006/06/19/814042.aspx
Log4d是apache下的一個delphi開源子項目,它的設(shè)計思想來源于Log4j,但并不是Log4j的子項目,主要目標(biāo)是開發(fā)環(huán)境與生產(chǎn)環(huán)境下的日志輸出。
一、下載
https:///project/showfiles.php?group_id=145326
二、安裝
將源代碼下的log4delphi\src\delphi\log4delphi_D6.dpk包安裝在IDE下。
三、基本使用方法
1.在dpr文件的source 中創(chuàng)建Logger實例(TConfiguratorUnit.doBasicConfiguration)
如:
Application.Initialize;
//使用運行期默認(rèn)配置,輸出日志文件名是'log4delphi.log’
TConfiguratorUnit.doBasicConfiguration;
Application.CreateForm(TForm1, Form1);
Application.Run;
2.配置Logger
var
logger : TLogger;
begin
logger := TLogger.getInstance;
logger.setLevel(TLevelUnit.INFO);
logger.addAppender(TFileAppender.Create('C:\test.log'));
3.在你需要的地方寫Log信息
根據(jù)Level的類型,有五種類別的Log信息
logger.debug('Debug message');
logger.info('Info message');
logger.warn('Warn message');
logger.error('Error message');
logger.fatal('Fatal message');
4.釋放Logger實例
Finalization
TLogger.freeInstances;
四、更深入的介紹
Log4d由五個核心的components組成:Levels, LoggingEvents, Layouts, Appenders and Loggers.
1. Levels。每一個Log event 都有一個優(yōu)先級,Levels就是用來表示優(yōu)先級的。因此,每一個優(yōu)先級其實就是一個數(shù)值常量,可用于比較。
Level有以下幾種:
TLevelUnit.OFF
TLevelUnit.FATAL
TLevelUnit.ERROR
TLevelUnit.WARN
TLevelUnit.INFO
TLevelUnit.DEBUG
TLevelUnit.ALL
2.LoggingEvents.當(dāng)產(chǎn)生一個Log信息或Logger實例創(chuàng)建時發(fā)生。
Logging 包含的重要信息有:發(fā)生時間,消息內(nèi)容,已經(jīng)發(fā)生的異常及優(yōu)先級。
3. Layouts.它負責(zé)LoggingEvents的格式化輸出樣式。
The TLayout 有以下方法:
function format(event : TLoggingEvent) : String; Virtual; Abstract;
function getContentType() : String; Virtual;
function getHeader() : String; Virtual;
function getFooter() : String; Virtual;
function ignoresException() : Boolean; Virtual;
常用的Layout有:
l TSimpleLayout
輸出內(nèi)容如:DEBUG - Button Clicked
l TPatternLayout.它為格式化輸出提供了更多的控制。格式化的模式與Format函數(shù)相似,即以%開頭,接著跟修飾符和轉(zhuǎn)換符。如:
Pattern="%d [%5p] %m%n"
產(chǎn)生的輸出是
12/20/2005 4:53:33 PM [DEBUG] Debug message
12/20/2005 4:53:33 PM [ INFO] Info message
12/20/2005 4:53:33 PM [ WARN] Warn message
12/20/2005 4:53:33 PM [ERROR] Error message
12/20/2005 4:53:33 PM [FATAL] Fatal message
含義: %d 日期
%m 消息內(nèi)容
%n 換行
%p 優(yōu)先級
%e 異常的類名與message
%L Logger的名稱
4. Appenders.表示輸出的目的是控制臺,文件,還是數(shù)據(jù)庫。
常用的有TFileAppender, TDBAppender
五、配置文件
1.程序里加載配置文件
Application.Initialize;
TConfiguratorUnit.doPropertiesConfiguration('log4delphi.properties');
Application.CreateForm(TForm1, Form1);
Application.Run;
2.寫配置文件'log4delphi.properties'
l 控制輸出的信息類別
# Set this to true to turn on Log4Delphi's internal
# logging
log4delphi.debug=false
log4delphi.info=false
log4delphi.all=true
l Root Logger
# Set the root logger's priority threshold to DEBUG and assign an
# appender named "fileAppender" to it.
log4delphi.rootLogger=DEBUG, fileAppender
l 配置Appender
# Specify the appender class for fileAppender.
log4delphi.appender.fileAppender=TFileAppender
# Specify which file fileAppender should use.
log4delphi.appender.fileAppender.File=app.log
l 設(shè)置Layout
# Specify the layout class for fileAppender.
log4delphi.appender.fileAppender.layout=TSimpleLayout
# Use TPattern layout
log4delphi.appender.fileAppender.layout=TPatternLayout
log4delphi.appender.fileAppender.layout.pattern=%d [%5p] %m%n
本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/brightgems/archive/2006/06/19/814042.aspx
上面都是參考資料,下面是我自己使用過程中使用的過程:
1:安裝PROF這個版本,通過文件對比可看出該版本應(yīng)用的文件多點,可能會更好(猜的)。
2:添加源碼以及dcu路徑。(在工具->環(huán)境選項->Library path中加入該兩個路徑:“src\delphi”、“build”)。
3:在Application.Initialize;的后面調(diào)用doPropertiesConfiguration('log4delphi.properties'); 去讀取配置并初始化log4。(注意,該方法在TConfiguratorUnit單元中,需要use該單元)
4:將log4delphi.properties放入應(yīng)用程序同一目錄下。log4delphi.properties可從下載包中得到。
5:調(diào)用log4的記錄方法:TLogger.getInstance.debug('Button Clicked!');(需要引入TLoggerUnit單元)。
執(zhí)行的話基本上都能在程序所在的目錄下有個*.log文件。
6:釋放掉TLogger的對象:在不用TLogger對象時釋放:TLogger.freeInstances;(一般在程序退出的時候要把該對象釋放掉)
有關(guān)配置文件中一個要注意的地方:

代碼
#log4delphi.appender.fileAppender.layout=TSimpleLayout
#log4delphi.appender.fileAppender.layout=TXMLLayout
#log4delphi.appender.fileAppender.layout=THTMLLayout
#log4delphi.appender.fileAppender.layout.Title=Document Title
log4delphi.appender.fileAppender.layout=TPatternLayout
log4delphi.appender.fileAppender.layout.Pattern=%d{YYYY-MM-DD HH:mm:nn:zzz} [%5p] %m%n
這樣配置才能把時間按照{(diào)}的格式進行日志輸出。由于該log4delphi的配置資料基本上沒有,因此,該配置需要看源碼才能知道有哪些配置該怎么設(shè)置。目前我還不知道如何讓日志文件按照時間格式來自動生成出來,我懷疑,它會根據(jù)設(shè)置的容量,自動把歷史數(shù)據(jù)保存到另外一個以保存日期為名稱的文件。有待日后驗證。