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日志并进行多维度分析。
目录
相关文章
|
3月前
|
机器学习/深度学习 存储 监控
|
3月前
|
XML 数据格式 Windows
【Azure 云服务】Azure Cloud Service (Extended Support) 云服务开启诊断日志插件 WAD Extension (Windows Azure Diagnostic) 无法正常工作的原因
【Azure 云服务】Azure Cloud Service (Extended Support) 云服务开启诊断日志插件 WAD Extension (Windows Azure Diagnostic) 无法正常工作的原因
|
存储 JSON Kubernetes
kuberentes Auditing 入门
kuberentes Auditing 入门
kuberentes Auditing 入门
|
消息中间件 监控 数据可视化
基于Apache SkyWalking构建企业级APM(Application Performance Monitoring)监控系统
基于Apache SkyWalking构建企业级APM(Application Performance Monitoring)监控系统
561 1
基于Apache SkyWalking构建企业级APM(Application Performance Monitoring)监控系统
|
Prometheus 监控 Cloud Native
使用 Prometheus 监控 SAP ABAP 应用程序(一)
Prometheus是由SoundCloud开发的监控系统的开源版本,logo是一个燃烧的红色火炬,这应该是有情怀的工程师们向泰坦巨神的后代,偷偷盗走天火,传给人类的普罗米修斯表示的敬意。
333 0
使用 Prometheus 监控 SAP ABAP 应用程序(一)
|
存储 缓存 JSON
Sentry 监控 - Distributed Tracing 分布式跟踪
Sentry 监控 - Distributed Tracing 分布式跟踪
320 0
Sentry 监控 - Distributed Tracing 分布式跟踪
|
监控
Sentry Web 性能监控 - Trends
Sentry Web 性能监控 - Trends
218 0
|
Oracle 关系型数据库 数据库