KBMMW 的日志管理器

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;
时间: 2024-11-08 22:01:46

KBMMW 的日志管理器的相关文章

kbmMWLog同时输出日志到多个日志管理器

kbmMWLog日志框架,针对不同的业务情况,提供了多种日志管理器: TkbmMWStreamLogManager TkbmMWLocalFileLogManager TkbmMWSystemLogManager TkbmMWStringsLogManager TkbmMWProxyLogManager TkbmMWTeeLogManager TkbmMWNullLogManager 这些日志管理器,针对不同的日志输出对象而实现,比如将日志输出到文件.TStrings,Stream.系统控制台等

使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器

从kbmmw 4.4 开始,增加了认证管理器,这个比原来的简单认证提供了更多的功能.细化了很多权限操作. 今天对这一块做个介绍. 要做一个认证管理,大概分为以下5步: 1.  定义你要保护的资源,一般是服务.函数,当然你只要不限麻烦,可以是任何东西: 2.  定义使用者(用户): 3.  定义角色,使用者通过角色与服务器打交道: 4.  定义角色或用户可以访问的资源(授权): 5. 定义认证与登录的限制(本步不是必须的). 一般来说,用户是通过配置文件或数据库来保存的,这样可以灵活的设置用户名与

向Windows 日志管理器写入系统程序日志信息

标准样例代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Diagnostics; using System.Diagnostics.Eventin

SQL Server中的事务日志管理(9/9):监控事务日志

当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会告诉你每个DBA应该知道的具体细节. 对于在我们关注下的所有数据库,在日志维护方面,我们的首要目标是最优化写性能,为了支持SQL Server写入日志的所有活动,包括数据修改,数据读取,索引维护等等.但是,留意下可能的日志碎片也是重要的,如前面文章介绍的,它会影响需要读取日志的过程性能,例如日志备份

SQLServer2000安装失败,[ODBC 驱动程序管理器]未发现数据源,详细信息请查看日志文件 sql2000 [Microsoft][ODBC 驱动程序管理器] 未发现数据源,参见sqlstp.org,直接退出

SQL2000安装失败,[ODBC 驱动程序管理器]未发现数据源,详细信息请查看日志文件 (2010-09-13 17:38:18) 转载▼ 最近安装数据库sql server2000时安装到要结束的时候,一下跳出"SQL2000安装失败,[ODBC 驱动程序管理器]未发现数据源,详细信息请查看日志文件"提示,一点确定就关闭,在网上找了好多,试了好多都不能解决,但是功夫不负有心人啊,最后终于找到了解决办法,在这跟大家分享下: 具体打开日志文件详细信息如下(具体位置在C:\WINDOWS

KbmMW 认证管理器说明(转载)

这是kbmmw 作者关于认证管理器的说明,我懒得翻译了,自己看吧. There are 5 parts of setting up an authorization manager: A) Defining what the resources are (often services or service functions, but can be anything you want to protect).B) Defining who the actors (typically users)

slf4j+logback搭建超实用的日志管理模块

文章转自http://www.2cto.com/kf/201702/536097.html slf4j+logback搭建超实用的日志管理模块(对日志有编号管理):日志功能在服务器端再常见不过了,我们非常有必要记录下发生在服务器上的活动,这些日志将用于debug.统计等各种用途. slf4j+logback这种实现方式是很常见的,好处自然是方便!.在这篇文章中,你将看到如何使用logback搭建你自己的日志组件并将日志输出到文件.如何查看这些文件.如何为每个线程上的访问分配独有的一个日志id.

rpm程序包管理器详解

1. 程序包管理器的功能 我们知道,由程序员编写并提供的程序源代码要转换成目标二进制格式才能在计算机上运行起来,但用户要在平台上使用时需要手动编译安装后才能使用,对于普通用户来说有一定难度.因此为了降低普通用户对应用程序的使用难度,程序员可在提供源代码的同时提供已在特定环境下编译好的程序文件,只要用户的平台环境和程序员的平台环境相同,就可以通过解压程序员提供的二进制格式文件即可使用,而无需自己手动编译安装. 一个已编译好的程序由二进制程序.库文件.配置文件和帮助手册等组成,而程序包管理器的功能就

FastCGI 进程管理器(FPM)

FPM(FastCGI 进程管理器)用于替换 PHP FastCGI 的大部分附加功能,对于高负载网站是非常有用的. 它的功能包括: 支持平滑停止/启动的高级进程管理功能: 可以工作于不同的 uid/gid/chroot 环境下,并监听不同的端口和使用不同的 php.ini 配置文件(可取代 safe_mode 的设置): stdout 和 stderr 日志记录; 在发生意外情况的时候能够重新启动并缓存被破坏的 opcode; 文件上传优化支持; "慢日志" - 记录脚本(不仅记录文