- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
想象一下,我想解析一个二进制的数据块。如果一切正常,则所有日志均为INFO,默认情况下,用户甚至看不到它们。如果存在错误,则向用户显示错误,并且可以查看日志以查看确切原因(我不喜欢仅说“文件入侵。由于某些原因。您不想知道它的程序”)
可能大多数日志库都旨在快速加载,分类和保持每秒许多日志行。这本身就是个问题,因为在Delphi中没有舒适的懒惰评估和关闭。羡慕斯卡拉:-)
但是,这需要对每一行进行预先分类。
想象一下这种假设流程:
得到对象FOO [确定]
1.1。找到物业BAR [确定]
1.1.1。分析BAR的数据[确定]
1.2找到物业BAZ [确定]
1.2.1成功解析BAR的数据[确定]
1.2.2匹配数据:检查BAR和BAZ之间的相关性[失败]
...
那么,所需的功能是什么?
1)然后需要嵌套日志记录(缩进,从属)。
类似于TraceTool中突出显示的内容-请参见http://www.codeproject.com/KB/trace/tracetool.aspx#premain0上的TraceNode.Send方法
2)1、1.1、1.1.1、1.2、1.2.1行是在信息接收器(TMemo,OutputDebugString,EventLog等)中发送的,因此用户可以查看并报告至少哪些步骤已完成错误。
3)1、1.2、1.2.2被追溯标记为从最特定的行继承的错误(或警告或其他内容)。显然,警告取代了信息,错误取代了警告和信息,等等/
4)1 + 1.2 + 1.2.2可以像LogMessage('1.2.2')一样轻松组合。FullText将显示给用户或转换为Exception,以将整个故事带给人类。
4.1)可选地,通过相关设置,它不仅会转换为Exception,甚至还会自动引发后者。这可能需要使用提供的异常类或提供的异常构造回调的某种上下文。
5)Multisink:可以将信息附加到主窗体或当前活动窗体上的TMemo的可折叠面板中。错误状态可能会另外打开此类面板或提示用户进行操作。同时,某些文件或网络服务器可能会收到警告和错误等级消息,而没有收到信息等级消息。
6)额外的关联数据可能也不错。说,如果要使用TreeView而不是TMemo进行渲染,则它可能具有“ 1.1.1。解析BAR [ok]的数据”项,并带有鼠标工具提示,例如“ Foo的尺寸被告知为2x4x3.2米”
成为免费图书馆很好,尤其是免费提供资源。有时,仅依靠DCU跟踪和修复错误要困难得多。
不需要额外的可执行文件。它可以提供更多更高级的查看器,但不应仅提供任何功能。
没有被拖延/遗弃。
能够在GUI初始化之前工作并至少显示一些东西的能力也很不错。当VCL尚未启动时,类构造函数很酷,但仍作为单元可视化的一部分执行。如果从那里引发任何断言/异常,则用户将只看到运行时错误217,所有详细信息都将丢失。至少可以使用OutputDebugStreen,如果仅此而已...
不需要堆栈跟踪,如果需要的话,我可以做,并用Jedi CodeLib添加。但这很少需要。
不需要外部配置。大型应用程序即时进行重新配置可能会很好,但是对我而言,简单性更为重要,而通过调用构造函数等在代码中进行配置才是真正重要的。像Log4J一样,额外的XML文件只会使事情变得更加脆弱和复杂。
我瞥了一眼这里提到的图书馆。
TraceTool的介绍很不错,上面的链接。但是它没有信息等级,只有3个预定义等级(Debug / Error / Warning),仅此而已,但是Debug可能适合于信息替换...似乎像黑匣子,只将数据保存到自己的文件中,并使用外部工具查看它,而不是将事件流还给我。但是他们的消息嵌套和呼叫链接看起来很酷。 Cools还将对象/集合附加到消息上。
Log4D和Log4Delphi似乎处于停滞状态,最新版本是2007年和2009年,最后一个目标版本是Delphi7。缺少文档(对Log4j家伙来说可能还可以,但对我来说不是:-)Log4Delphi甚至具有测试文件夹-但那些测试确实可以在Delphi XE2-Upd1中无法编译。可惜:在这里的另一个线程中,Log4delphi被赞誉为创建自定义日志附加程序(接收器)有多么简单...
顺便说一句,唯一的LOG4J被分叉到两个独立的Delphi端口这一事实留下了一个问题,那就是更好的问题,如果必须将它们分开,则两者都缺少某些东西。
mORMot部分很难与其余库分开。演示应用程序需要UAC升级才能使用其嵌入式SQLite3引擎,并且如果拒绝了Admin授予,则冻结(未打开任何窗口,但该过程从未正常退出)。另一个演示只是启动了无限的AV异常流,试图释放堆栈。因此,对于最后的Delphi可能还没有准备好。尽管它的消息等级列表过多,甚至可能太多。
谢谢。
最佳答案
即使使用最新的XE2版本的Delphi,mORMot也是稳定的。
您尝试开始的是回归测试。在6,000,000个测试中,它包括ORM的HTTP / 1.1 Client-Server部分。如果没有管理员权限,http.sys服务器将无法注册URI,因此会出现错误。完全有道理。这是Vista / Seven限制,不是mORMot限制。
日志记录部分可以与ORM部分完全分开使用。记录在SynCommons.pas
中实现(对于用于存档和.map嵌入的快速压缩算法,则使用SynLZ.pas
记录)。我使用TSynLog
类毫无问题地记录了已有多年的现有应用程序(甚至包括Delphi 5和Delphi 6应用程序)。 SQLite3 / ORM类在其他单元中实现。
正如您所期望的,它具有自动离开功能,支持事件嵌套。那就是你可以这样写:
procedure TMyClass.MyMethod(const Params: integer);
begin
TSynLog.Enter;
// .... my method code
end;
TSynLog.Enter
将记录与递归级别相对应的缩进。恕我直言,这可能满足您的要求。它将在堆栈上声明一个
ISynLog
接口,由Delphi在“
end;
”代码行将其释放,因此它将实现自动离开功能。如果您在编译时生成了.map文件(可以将其压缩并附加到.exe中,以便客户使用),则确切的单元名称,方法名称和源代码行号将被写入日志(作为
MyUnit.TMyClass.MyMethod (123)
)日志将包含源行号)。您可以在
ISynLog
界面级别上使用一些方法来添加一些自定义日志记录,包括参数和自定义状态(如果需要,可以将对象属性记录为JSON,或者编写自定义日志记录数据)。
关于delphi - 有多个接收器和延迟分类的Delphi日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7635235/
我有一个网站。 必须登录才能看到里面的内容。 但是,我使用此代码登录。 doc = Jsoup.connect("http://46.137.207.181/Account/Login.aspx")
我正在尝试为我的域创建一个 SPF 记录并使我的邮件服务器能够对其进行评估。我在邮件服务器上使用 Postfix 并使用 policyd-spf (Python) 来评估记录。目前,我通过我的私有(p
我需要为负载平衡的 AWS 站点 mywebsite.com 添加 CName 记录。记录应该是: @ CNAME mywebsite.us-east-1.elb.amazon
我目前正在开发一个相当大的多层应用程序,该应用程序将部署在海外。虽然我希望它在解聚后不会折叠或爆炸,但我不能 100% 确定这一点。因此,如果我知道我可以请求日志文件,以准确找出问题所在以及原因,那就
我使用以下命令从我的网络摄像头录制音频和视频 gst-launch-0.10 v4l2src ! video/x-raw-yuv,width=640,height=480,framerate=30/1
我刚刚开始使用 ffmpeg 将视频分割成图像。我想知道是否可以将控制台输出信息保存到日志文件中。我试过“-v 10”参数,也试过“-loglevel”参数。我在另一个 SO 帖子上看到使用 ffmp
我想针对两个日期查询我的表并检索其中的记录。 我这样声明我的变量; DECLARE @StartDate datetime; DECLARE @EndDate datetime; 并像这样设置我的变量
在 javascript 中,我可以使用简单的 for 循环访问对象的每个属性,如下所示 var myObj = {x:1, y:2}; var i, sum=0; for(i in myObj) s
最近加入了一个需要处理大量代码的项目,我想开始记录和可视化调用图的一些流程,让我更好地理解一切是如何组合在一起的。这是我希望在我的理想工具中看到的: 每个节点都是一个函数/方法 如果一个函数可以调用另
如何使用反射在F#中创建记录类型?谢谢 最佳答案 您可以使用 FSharpValue.MakeRecord [MSDN]创建一个记录实例,但是我认为F#中没有任何定义记录类型的东西。但是,记录会编译为
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 3年前关闭。 Improve thi
我是 Sequelize 的新手并且遇到了一些语法问题。我制作了以下模型: // User sequelize.define('user', { name: { type: DataTyp
${student.name} Notify 这是我的output.jsp。请注意,我已经放置了一个链接“Notify”以将其转发到 display.jsp 上。但我不确定如何将 Stud
例如,这是我要做的查询: server:"xxx.xxx.com" AND request_url:"/xxx/xxx/xxx" AND http_X_Forwarded_Proto:(https O
我一直在开发大量 Java、PHP 和 Python。所有这些都提供了很棒的日志记录包(分别是 Log4J、Log 或logging)。这在调试应用程序时有很大帮助。特别是当应用程序 headless
在我的Grails应用程序中,我异步运行一些批处理过程,并希望该过程记录各种状态消息,以便管理员以后可以检查它们。 我考虑过将log4j JDBC附加程序用作最简单的解决方案,但是据我所知,它不使用D
我想将进入 MQ 队列的消息记录到数据库/文件或其他日志队列,并且我无法修改现有代码。是否有任何方法可以实现某种类似于 HTTP 嗅探器的消息记录实用程序?或者也许 MQ 有一些内置的功能来记录消息?
如果我有一条包含通用字段的记录,在更改通用字段时是否有任何方法可以模仿方便的 with 语法? 即如果我有 type User = // 'photo can be Bitmap or Url {
假设我有一个名为 Car 的自定义对象。其中的所有字段都是私有(private)的。 public class Car { private String mName; private
当记录具有特定字段时,我需要返回 true 的函数,反之亦然。示例: -record(robot, {name, type=industrial, ho
我是一名优秀的程序员,十分优秀!