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 为立即写文件
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',[,'shit happens']); // 已经致命了
Log.LogStack(TkbmMWLogType.mwltInfo,TkbmMWLogLevel.mwllNormal,'We got a stack dump'); //没救了,只能解剖尸体了
以上代码输出结果为
--01T10::24.304+: : Info : / : This is some info
--01T10::24.307+: : Warning : / : This is a warning
--01T10::24.308+: : Error : / : This is an error
--01T10::24.308+: : Fatal : / : This went very bad: /shit happens
--01T10::24.308+: : Info : / : 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:= to do
k:=i;
// 再休息一会儿吧
sleep();
Log.TimeLapse('A','Time lapse'); //看看用了多长时间
//再干一会儿吧
for i:= to do
k:=i;
// 再休息一会儿吧
sleep();
Log.TimeEnd('A','Time taken'); //结束计时,看看用了多长时间
以上代码输出结果
--01T15::22.018+: : Debug : / : Time lapse : ms (A)
--01T15::22.521+: : Debug : / : Time taken : ms (A)
一个程序里面可以同时使用很多个计时器,以方便跟踪不同的业务。
最后就是异常处理了。其实就是KBMMW hook delphi 的异常处理。这样就可以在delphi 的异常处理前,进行
一些日志操作了。为了达到这一点,首先需要 在kbmMWConfig.inc 里面定义
{$DEFINE KBMMW_INSTALL_EXCEPTION_HANDLER}
for i:= downto do
begin
j:= div i; // 这个小学问题,就让kbmmw 自动处理吧
end;
输出结果
--01T16::14.847+: : Error : / :
EDivByZero
Division by zero
Address (hex):
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;
更多的功能请参考源码。
KBMMW 的日志管理器的更多相关文章
- kbmMWLog同时输出日志到多个日志管理器
kbmMWLog日志框架,针对不同的业务情况,提供了多种日志管理器: TkbmMWStreamLogManager TkbmMWLocalFileLogManager TkbmMWSystemLogM ...
- 使用delphi 开发多层应用(二十二)使用kbmMW 的认证管理器
从kbmmw 4.4 开始,增加了认证管理器,这个比原来的简单认证提供了更多的功能.细化了很多权限操作. 今天对这一块做个介绍. 要做一个认证管理,大概分为以下5步: 1. 定义你要保护的资源,一般 ...
- 向Windows 日志管理器写入系统程序日志信息
标准样例代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Da ...
- SQL Server中的事务日志管理(9/9):监控事务日志
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
- python+pytest接口自动化(15)-日志管理模块loguru简介
python自带日志管理模块logging,使用时可进行模块化配置,详细可参考博文Python日志采集(详细). 但logging配置起来比较繁琐,且在多进行多线程等场景下使用时,如果不经过特殊处理, ...
- #VSTS日志# 15/11/18 插件应用市场,RM,包管理器等
[小编]从今天开始,我将在这个博客上连载Visual Studio Team Service的定期更新.VSTS是Team Foundation Server 的在线版本,微软每3周会对这个服务进行更 ...
- Tomcat学习笔记 - 错误日志 - NetBeans配置tomcat出错情况总结 -- 尚未授予访问 Tomcat 服务器的权限。请在服务器管理器的 Tomcat 定制器中设置 "manager-script" 角色的正确用户名和口令。 有关详细信息, 请查看服务器日志。
错误描述: 发布时控制台出现: 部署错误: 尚未授予访问 Tomcat 服务器的权限.请在服务器管理器的 Tomcat 定制器中设置 "manager-script" 角色的正确用 ...
- 【VSTS 日志 15/11/18】 – 插件应用市场,RM,包管理器等
[小编]从今天开始,我将在这个博客上连载Visual Studio Team Service的定期更新.VSTS是Team Foundation Server 的在线版本,微软每3周会对这个服务进行更 ...
- KbmMW 认证管理器说明(转载)
这是kbmmw 作者关于认证管理器的说明,我懒得翻译了,自己看吧. There are 5 parts of setting up an authorization manager: A) Defin ...
随机推荐
- 转:java项目经验面试总结
转载: 在前期已经讲过怎样分析自己,对自己进行一个准确的定位,选择一个合适的求职方向!并结合自己的实际个人情况来写一份针对性很强的个人简历!个人简历就是个人的广告!好的简历可以更受到用人需求单位青睐! ...
- 《算法竞赛入门经典》习题及反思 -<2>
数组 Master-Mind Hints,Uva 340 题目:给定答案序列和用户猜的序列,统计有多少数字对应正确(A),有多少数字在两个序列都出现过但位置不对. 输入包括多组数据.每组输入第一行为序 ...
- Elasticsearch 多字段搜索
查询很少是对一个字段做 match 查询,通常都是一个 query 查询多个字段,比如一个 doc 有 title.content.pagetag 等文本字段,要在这些字段查询含多个 term 的 q ...
- 刚创建的maven项目,pom.xml的第一行就报错
刚创建的maven项目,马上pom.xml的第一行就报错这是第一行:<project xmlns="http://maven.apache.org/POM/4.0.0" xm ...
- Qt5.3.2(VS2010)_调试_查看变量值
1.菜单栏 -->控件(W) --> 视图 2.在"Debug"状态下,选择一个变量(或者 按住左键 选择变量及其属性/方法)--> 右键 --> 添加表达 ...
- 《剑指offer》第十八题(删除链表中重复的结点)
// 面试题18(二):删除链表中重复的结点 // 题目:在一个排序的链表中,如何删除重复的结点?例如,在图3.4(a)中重复 // 结点被删除之后,链表如图3.4(b)所示. #include &l ...
- 牛客练习赛7 E 珂朵莉的数列
珂朵莉的数列 思路: 树状数组+高精度 离散化不知道哪里写错了,一直wa,最后用二分写的离散化 哪位路过大神可以帮我看看原来的那个离散化错在哪里啊 通过代码: import java.math.Big ...
- Java的JDK和JRE
Java的JDK和JRE 1.计算机交互方式 图形化界面(Graphical User Interface GUI) 命令行方式(Command Line Interface CLI) 2.Java语 ...
- 雷林鹏分享:Ruby 安装 - Windows
Ruby 安装 - Windows 下面列出了在 Windows 机器上安装 Ruby 的步骤. 注意:在安装时,您可能有不同的可用版本. 下载最新版的 Ruby 压缩文件.请点击这里下载. 下载 R ...
- 『Re』知识工程作业_主体识别
作业要求 环境路径 类似于这样的,一共50篇文档, 均为中文文档,是法院判决书的合集. 程序 程序如下,我完全使用正则表达式来实现功能, import re import glob import co ...