KBMMW 的日志管理器

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: kbmmw 4.82 最大的新特性就是增加了 日志管理器。 新的日志管理器实现了不同类型的日志、断言、异常处理、计时等功能。 首先。引用kbmMWLog.pas 单元后,系统就默认生成一个IkbmMWLog 实例:  Log:IkbmMWLog; log 默认使用对应操作系统的日志功能。

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,'shit happens']); //  已经致命了
     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 : Fatal : 10572/10632 : This went very bad: 10/shit happens
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 to 1000 do
     k:=i;

  // 再休息一会儿吧
  sleep(500);
  Log.TimeLapse('A','Time lapse');   //看看用了多长时间
   
  //再干一会儿吧
  for i:=1 to 1000 do
     k:=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 里面定义

 {$DEFINE KBMMW_INSTALL_EXCEPTION_HANDLER}

  for i:=5 downto 0 do
     begin
          j:=10 div i;   // 这个小学问题,就让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;

 

更多的功能请参考源码。

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
7月前
|
监控 安全 数据可视化
中间件应用日志记录和监控
【5月更文挑战第1天】中间件应用日志记录和监控
238 3
中间件应用日志记录和监控
|
7月前
|
安全 编译器 API
C++系统日志库精选:深入剖析glog与log4cplus,轻松搭建高效日志系统
C++系统日志库精选:深入剖析glog与log4cplus,轻松搭建高效日志系统
1340 0
|
存储 缓存 JSON
Sentry 监控 - Distributed Tracing 分布式跟踪
Sentry 监控 - Distributed Tracing 分布式跟踪
333 0
Sentry 监控 - Distributed Tracing 分布式跟踪
|
监控
Sentry Web 性能监控 - Trends
Sentry Web 性能监控 - Trends
224 0
|
监控 网络协议 安全
日志服务与SIEM集成方案实战(二):syslog篇
本文将重点介绍如何使用syslog(通过UDP/TCP/TLS)与SIEM(如IBM Qradar, HP Arcsight, Splunk等)对接,确保传输的性能与可靠性,以便确保阿里云上的所有法规、审计、与其他相关日志能够导入到您的安全运维中心(SOC)中。
26664 0
|
Oracle 关系型数据库 数据库
|
开发工具 IDE 数据库管理
kbmmw 5.04 发布
增加了一大波功能,消灭了一大堆问题,也肯定引进了一大票BUG.We are happy to announce the release of our latest version of kbmMW. Downloads are readily available for holders of active SAU's from the portal at: https://portal.
1403 0
|
SQL 关系型数据库 网络架构
kbmmw 5.03 发布
版本一小数,功能一大步 We are happy to announce v5.03 of our popular middleware for Delphi and C++Builder. If you like kbmMW, please let others know! Share th...
1187 0