KBMMW 的日誌管理器

2021-09-06 23:32:11 字數 4130 閱讀 9308

kbmmw 4.82 最大的新特性就是增加了 日誌管理器。

新的日誌管理器實現了不同型別的日誌、斷言、異常處理、計時等功能。

首先。引用kbmmwlog.pas 單元後,系統就預設生成乙個ikbmmwlog 例項:

log:ikbmmwlog;

log 預設使用對應作業系統的日誌功能。 為了能儲存到硬碟上方便大家檢視,可以使用本地檔案方式,先設定一下日誌及審計檔案路徑及屬性

filelogmgr:=tkbmmwlocalfilelogmanager.create('

.\log.txt

','.\audit.txt

'); // 同時生成兩個檔案,乙個是日誌檔案,乙個審計檔案

filelogmgr.deleteoldlog:=true; // 刪除老的日誌檔案

filelogmgr.deleteoldaudit:=true; // 刪除老的審計檔案

filelogmgr.flushinterval:=0

; // 寫檔案時間間隔,0 為立即寫檔案

log.logmanager:=filelogmgr; // 設定log 的管理器為上面檔案管理器

現在開發人員就可以做一些常規的日誌記錄。

log.info('

this is some info

'); // 記錄資訊

log.warn(

'this is a warning

'); // 記錄警告

log.error(

'this is an error

'); // 記錄錯誤

log.fatal(

'this went very bad: %d/%s

',[10,'

']); // 已經致命了

log.logstack(tkbmmwlogtype.mwltinfo,tkbmmwloglevel.mwllnormal,

'we got a stack dump

'); //沒救了,只能解剖屍體了

以上**輸出結果為

2015-06-01t10:34:24.304+08:00 : info : 10572/10632 : this is

some info

2015-06-01t10:34:24.307+08:00 : warning : 10572/10632 : this is

a warning

2015-06-01t10:34:24.308+08:00 : error : 10572/10632 : this is

an error

2015-06-01t10:34:24.308+08:00 : info : 10572/10632

: we got a stack dump

address

<650d5c>unknown

address

<527fc5>unknown

address

<52c5fe>unknown

address

<53ee29>unknown

address

<52c764>unknown

address

<52c5fe>unknown

address

<5c3f29>unknown

address

<52bc1b>unknown

address

<4c299a>unknown

address

<52c70f>unknown

address

<52c5fe>unknown

address

<53ee29>unknown

address

<4c299a>unknown

address

<5cd3f0> unknown

有時,我們為了了解伺服器上某一項業務的執行時間,這裡就可以使用log 的計時功能。

那麼就可以使用時間點。 下面開啟乙個時間點,為了避免記憶體洩漏,應該開配對,即:開啟與結束配對使用。

log.timestart('a'

);

//找點事幹吧

for i:=1

to1000

dok:=i;

//再休息一會兒吧

sleep(500

); log.timelapse('a

','time lapse

'); //

看看用了多長時間

//再幹一會兒吧

for i:=1

to1000

dok:=i;

//再休息一會兒吧

sleep(500

); log.timeend('a

','time taken

'); //

結束計時,看看用了多長時間

以上**輸出結果

2015-06-01t15:49:22.018+08:00 : debug : 11736/7316 : time lapse : 500

ms (a)

2015-06-01t15:49:22.521+08:00 : debug : 11736/7316 : time taken : 1003 ms (a)

乙個程式裡面可以同時使用很多個計時器,以方便跟蹤不同的業務。

最後就是異常處理了。其實就是kbmmw hook delphi 的異常處理。這樣就可以在delphi 的異常處理前,進行

一些日誌操作了。為了達到這一點,首先需要 在kbmmwconfig.inc 裡面定義

for i:=5

downto0do

begin

j:=10

divi; // 這個小學問題,就讓kbmmw 自動處理吧

end;

輸出結果

2015-06-01t16:13:14.847+08:00 : error : 10184/14536

: edivbyzero

division by zero

address (hex):

00000000

address

<429a26>unknown

address

<65031e>unknown

address

<408b29>unknown

address

<527fc5>unknown

address

<52c5fe>unknown

address

<53ee29>unknown

address

<52c764>unknown

address

<52c5fe>unknown

address

<5c3f29>unknown

address

<52bc1b>unknown

address

<4c299a>unknown

address

<52c70f>unknown

address

<52c5fe>unknown

address

<53ee29>unknown

address

<4c299a>unknown

address

<5cd3f0> unknown

當然了,對於這種錯誤,都還是可以比較方便的捕獲的。

對於象堆疊溢位的這些嚴重問題來說,發生後是無法預料結果的,唯一可以說的是,delphi 處理時需要使用堆疊空間,

因此幾乎無法工作,而kbmmw 好一點,盡可能的去捕獲錯誤,至於達到什麼效果呢,只能看你的人品了:)

想試試自己的人品嗎? 可以試一下下面的**。

procedure

tform1.button9click(sender: tobject);

procedure

stackloop;

begin

stackloop;

end;begin

stackloop; // 是誰寫的這個**?

end;

布局管理器 網格袋布局管理器

網格袋布局管理器中的約束條件constrains中有如下字段需要設定 1 constrains.gridx和constrains.gridy 這兩個欄位僅用於指定元件的起始網格座標。2 constrains.gridwidth和constrains.gridheight 這兩個字段用於指定元件所佔網...

儲存管理器

cpu配置儲存管理器 cpu讀操作發命令給儲存管理器,儲存管理器根據配置讀取資料 nand flash啟動方式,開機片內sram拷貝nand flash前4k執行,在這4k的程式裡需要完成sram sdram跳轉 s3c2440有8個bank,即8個片選訊號,直連可以接8個記憶體類外設 sdram,...

布局管理器

jframe 內容面板在預設的情況下自動使用邊界布局管理器。1.邊界布局 borderlayout 所謂的borderlayout 就是把邊界劃分為東西南北中,南北要貫通,中間最大,不僅指地方最大,也指權利最大,當東西南北不存在時可占領他們,也就是說中間是可以占領周邊的,但周邊是絕不能占領中間的。邊...