MultiLog是一种同时以灵活性和低开销为目标的日志系统。顾名思义,它可用于将日志实例到多个目标,如文本文件、可视控件或其他应用程序。添加新的日志目标使用两个方法就可以实现了,其中一个方法是可选的。
MultiLog通常类似于CodeSite、Smart Inect、Overseer和EstLogger,但它没有紧跟其中的任何一个,以不同的方式实现了许多功能,甚至具有一些独特的功能。

目前(2019年5月)版本是v 0.6.0.0。

MultiLog的使用是极其简单的,如前面说的,仅仅两步就可以实现日志记录:

1:构建通道

2:输出

通道可以是 IPCChannel,FileChannel,或可视控件,MultiLog预制了三个功能,直接使用即可,IPCChannel实现进程间辅助监视,利用例程View项目,即可实现跨进程Log监视

直接在中应用 MultiLog 单元,其定义了Logger全局实例。

如果要输出到某文件比如日期型号日志 “20190520.log”,

vLOGFileNameM  := FormatDateTime('yyyymmdd', Now);
vlogName       := vLOGFileNameM + '.log';
FFileChannel   := TFileChannel.Create(vlogName);
FFileLogHaneld := Logger.Channels.Add(FFileChannel);

这里对FileChannel做了点点调整,加入了固定的目录“Logs”。

constructor TFileChannel.Create(const AFileName: string; ChannelOptions: TFileChannelOptions);
constlogDir = 'Logs';
beginif not DirectoryExists(logDir) thenForceDirectories(logDir);FShowPrefix := fcoShowPrefix in ChannelOptions;FShowTime   := fcoShowTime in ChannelOptions;FShowHeader := fcoShowHeader in ChannelOptions;Active      := True;FFileName   := logDir + DirectorySeparator + AFileName;
end;

FileChannel.Create 还带一个ChannelOptions 参数,是个集合 ,默认是带[fcoShowHeader, fcoShowTime],如果要显示如故障、提示、警告需要加上fcoShowPrefix。

with Logger dobeginChannels.Add(LogTreeView1.Channel);Channels.Add(TIPCChannel.Create());Channels.Add(TFileChannel.Create('debug.log',[fcoShowHeader, fcoShowPrefix, fcoShowTime]));DefaultClasses := [lcDebug];end;

这也是MultiLog带了一个综合例子,Logger对Send做了多种overload,那么可以对Pascal语言的所有类型直接输出,包括TStringList,“状态”计数,SendError(’’)或者Send([lcError],’’),记录调用情况。

procedure TForm1.TestLogClick(Sender: TObject);
varAList:TStringList;
beginwith Logger dobeginActiveClasses:=lcAll;EnterMethod(Sender,'TestLogClick');AList:=TStringList.Create;with AList dobeginAdd('aaaaaaa');Add('bbbbbbb');Add('ccccccc');end;Send('A Text Message');Send('Another Text Message');Send('A StringList', AList);AList.Destroy;SendError('A Error Message');SubLogClick(butSubLog);DefaultClasses := [lcWarning];ActiveClasses:=[lcDebug,lcInfo];Send('This Text Should NOT be logged');Send([lcDebug],'This Text Should be logged');ActiveClasses:=[];Send([lcWarning],'But This Text Should NOT');//Exitmethod is called even if not active if there's a unpaired EnterMethodExitMethod(Sender,'TestLogClick');ActiveClasses:=lcAll;end;
end;procedure TForm1.SubLogClick(Sender: TObject);varOldClasses: set of TDebugClass;beginwith Logger dobeginOldClasses:=ActiveClasses;ActiveClasses:=lcAll;EnterMethod(Sender,'SubLogClick');SendIf('Only show if called by TestLogClick',CalledBy('TestLogClick'));Send('AText inside DoIt');SendWarning('AWarning');SendCallStack('CallStack example');Send('A String','sadjfgadsfbmsandfb');Send('AInteger',4957);Send('A Boolean',True);ExitMethod(Sender,'SubLogClick');ActiveClasses:=OldClasses;end;end;

=== Log Session Started at 2019/5/12 9:19:41 by MultiLogDemo ===
09:19:45.201 >>ENTER METHOD: TButton(butTestLog).TestLogClick
09:19:45.205   INFO: A Text Message
09:19:45.209   INFO: Another Text Message
09:19:45.212   STRINGS: A StringListaaaaaaabbbbbbbccccccc
09:19:45.215   ERROR: A Error Message
09:19:45.218   >>ENTER METHOD: TButton(butSubLog).SubLogClick
09:19:45.221     CONDITIONAL: Only show if called by TestLogClick
09:19:45.224     INFO: AText inside DoIt
09:19:45.227     WARNING: AWarning
09:19:45.336     CALL STACK: CallStack example$000000010002DF2D line 329 of unit1.pas$000000010002CF0F line 144 of unit1.pas$0000000100126EF8 line 2913 of include/control.inc$00000001001448FA line 55 of include/buttoncontrol.inc$000000010014502F line 169 of include/buttons.inc$00000001001447C2 line 21 of include/buttoncontrol.inc$000000010000E1B5$0000000100119B3C line 5419 of include/wincontrol.inc$00000001001A9277 line 112 of lclmessageglue.pas$00000001000FBEE8 line 2515 of win32/win32callback.inc$00000001000FC6BC line 2677 of win32/win32callback.inc$00000001001AEAFF line 105 of win32/win32pagecontrol.inc$00007FFE5F37CA66$0000000000090B9C
09:19:45.342     VALUE: A String = sadjfgadsfbmsandfb
09:19:45.346     VALUE: AInteger = 4957
09:19:45.349     VALUE: A Boolean = True
09:19:45.352   <<EXIT METHOD: TButton(butSubLog).SubLogClick
09:19:45.354   INFO: This Text Should be logged
09:19:45.356 <<EXIT METHOD: TButton(butTestLog).TestLogClick

通过监视进程MultiLog View监视到的数据,示例Log的输出。

是不是很方便!

转载于:https://www.cnblogs.com/hieroly/p/10851192.html

Lazarus 日志工具 MultiLog相关推荐

  1. 细说 Java 主流日志工具库

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 作者:静默虚空 juejin.im/post/5c8f35bfe51d4545cc650567 ...

  2. 细说Java主流日志工具库

    细说 Java 主流日志工具库 日志框架 java.util.logging (JUL) Log4j Logback Log4j2 Log4j vs Logback vs Log4j2 日志门面 co ...

  3. 【工具推荐】ELMAH——可插拔错误日志工具(转)

    出处:http://www.cnblogs.com/liping13599168/archive/2011/02/23/1962625.html 今天看到一篇文章(构建ASP.NET网站十大必备工具( ...

  4. Android Studio 单刷《第一行代码》系列 02 —— 日志工具 LogCat

    前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...

  5. iOS轻量分组日志工具 Log4OC

    OC分级日志工具,支持4种日志级别,提供两种持久化方案 源码地址: github.com/FinderTiwk/- 使用 #import "Log4OC.h"//DEBUGLog( ...

  6. linux 系统后门检测工具,Linux系统的各种后门和日志工具详细介绍[2]

    chfn 提升本地普通用户权限的程序 运行chfn 在它提示输入新的用户名时 如果用户输入rookit密码 他的权限就被提升为root chsh 提升本地用户权限的程序 运行chsh 在它提示输入新的 ...

  7. Android入门(三) | Android 的日志工具 Logcat

    文章目录 日志工具类 android.util.Log Logcat 中的过滤器 日志工具类 android.util.Log Log 从属日志工具类 android.util.Log ,该类提供了五 ...

  8. .NET日志工具介绍

    原文:http://www.cnblogs.com/maxliu/archive/2012/08/03/2621088.html 最近项目需要一个日志工具来跟踪程序便于调试和测试,为此研究了一下.NE ...

  9. Android日志工具Log的使用

    Androi中的日志工具类是Log(android.util.Log),这个类提供了如下5种方法来供我们打印日志. 方法 作用 Log.v() 用于打印那些最为繁琐的.意义最小的日志信息.对应级别是v ...

最新文章

  1. 为创业者保驾护航 “无安全 不创业” 安全狗全国路演北京站
  2. CentOS下编译安装python包管理安装工具pip教程
  3. 香港浸会大学计算机系月入4万博士你还不心动吗?
  4. 关于如何开办餐饮店?
  5. Apache OFBIZ高速上手(二)--MVC框架
  6. discuz论坛整合ucenter免激活,同步登录,同步退出解决方案(附源码)
  7. php 随机在文章中添加锚文本_SEO站长布局锚文本时的7大注意事项
  8. Mac通过wifi连接 Android设备
  9. mybatis和spring整合版本对应表
  10. iPhone 13 Pro苍岭绿真机首曝!网友:这次iPhone被渲染图坑惨了
  11. Vue 3 最新进展
  12. 彻底搞清 Flink 中的 Window 机制
  13. DevExpress控件学习总结(转)
  14. 7 年零故障支撑双 11,消息中间件 RocketMQ 如何做到?
  15. cacti mysql 压缩 备份_cacti数据迁移步骤 CactiEZ重装系统后 恢复原来的数据 CactiEZ重装系统前要备份的数据...
  16. SQL建表及插入数据
  17. 为什么计算机桌面图标不见了,为什么电脑桌面上的图标全不见了?
  18. v-if导致用ref取不到元素的解决办法
  19. 花18块买了腾讯的幻核 NFT,里面到底有什么?
  20. 数据库字典 - 微擎开发文档

热门文章

  1. c语言fwrite写字符串数组,【字符串数组面试题】面试问题:C语言 文… - 看准网...
  2. 马希荣计算机应用,天津师范大学硕士研究生导师:马希荣
  3. docker pytorch
  4. mysql Subqueries
  5. werkzeug response
  6. MongoDB Element Query Operators(元素判断操作符)
  7. linux 配置java环境
  8. Linux bond6配置文件,Linux网卡bond
  9. Docker学习总结(53)—— Docker 十个非常实用但又容易忽视的使用技巧
  10. Dubbo学习总结(9)——Apache Dubbo Roadmap 2019