Lazarus 日志工具 MultiLog
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相关推荐
- 细说 Java 主流日志工具库
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 作者:静默虚空 juejin.im/post/5c8f35bfe51d4545cc650567 ...
- 细说Java主流日志工具库
细说 Java 主流日志工具库 日志框架 java.util.logging (JUL) Log4j Logback Log4j2 Log4j vs Logback vs Log4j2 日志门面 co ...
- 【工具推荐】ELMAH——可插拔错误日志工具(转)
出处:http://www.cnblogs.com/liping13599168/archive/2011/02/23/1962625.html 今天看到一篇文章(构建ASP.NET网站十大必备工具( ...
- Android Studio 单刷《第一行代码》系列 02 —— 日志工具 LogCat
前情提要(Previously) 本系列将使用 Android Studio 将<第一行代码>(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Andr ...
- iOS轻量分组日志工具 Log4OC
OC分级日志工具,支持4种日志级别,提供两种持久化方案 源码地址: github.com/FinderTiwk/- 使用 #import "Log4OC.h"//DEBUGLog( ...
- linux 系统后门检测工具,Linux系统的各种后门和日志工具详细介绍[2]
chfn 提升本地普通用户权限的程序 运行chfn 在它提示输入新的用户名时 如果用户输入rookit密码 他的权限就被提升为root chsh 提升本地用户权限的程序 运行chsh 在它提示输入新的 ...
- Android入门(三) | Android 的日志工具 Logcat
文章目录 日志工具类 android.util.Log Logcat 中的过滤器 日志工具类 android.util.Log Log 从属日志工具类 android.util.Log ,该类提供了五 ...
- .NET日志工具介绍
原文:http://www.cnblogs.com/maxliu/archive/2012/08/03/2621088.html 最近项目需要一个日志工具来跟踪程序便于调试和测试,为此研究了一下.NE ...
- Android日志工具Log的使用
Androi中的日志工具类是Log(android.util.Log),这个类提供了如下5种方法来供我们打印日志. 方法 作用 Log.v() 用于打印那些最为繁琐的.意义最小的日志信息.对应级别是v ...
最新文章
- 为创业者保驾护航 “无安全 不创业” 安全狗全国路演北京站
- CentOS下编译安装python包管理安装工具pip教程
- 香港浸会大学计算机系月入4万博士你还不心动吗?
- 关于如何开办餐饮店?
- Apache OFBIZ高速上手(二)--MVC框架
- discuz论坛整合ucenter免激活,同步登录,同步退出解决方案(附源码)
- php 随机在文章中添加锚文本_SEO站长布局锚文本时的7大注意事项
- Mac通过wifi连接 Android设备
- mybatis和spring整合版本对应表
- iPhone 13 Pro苍岭绿真机首曝!网友:这次iPhone被渲染图坑惨了
- Vue 3 最新进展
- 彻底搞清 Flink 中的 Window 机制
- DevExpress控件学习总结(转)
- 7 年零故障支撑双 11,消息中间件 RocketMQ 如何做到?
- cacti mysql 压缩 备份_cacti数据迁移步骤 CactiEZ重装系统后 恢复原来的数据 CactiEZ重装系统前要备份的数据...
- SQL建表及插入数据
- 为什么计算机桌面图标不见了,为什么电脑桌面上的图标全不见了?
- v-if导致用ref取不到元素的解决办法
- 花18块买了腾讯的幻核 NFT,里面到底有什么?
- 数据库字典 - 微擎开发文档
热门文章
- c语言fwrite写字符串数组,【字符串数组面试题】面试问题:C语言 文… - 看准网...
- 马希荣计算机应用,天津师范大学硕士研究生导师:马希荣
- docker pytorch
- mysql Subqueries
- werkzeug response
- MongoDB Element Query Operators(元素判断操作符)
- linux 配置java环境
- Linux bond6配置文件,Linux网卡bond
- Docker学习总结(53)—— Docker 十个非常实用但又容易忽视的使用技巧
- Dubbo学习总结(9)——Apache Dubbo Roadmap 2019