Questions tagged «logging»

计算机数据记录是在计算机程序中记录事件的过程,通常在一定范围内记录事件,以便提供可用于了解系统活动和诊断问题的审核跟踪。

3
结构化日志记录与基本日志记录的优点
我们正在构建一个新的应用程序,我想包括结构化日志记录。我理想的设置应该是SerilogC#代码和BunyanJS。fluentd我最初想到的是,这些东西会进入然后可能会涉及到许多事情elasticsearch + kibana。我们已经有一个MySQL数据库,因此在短期内,我对获得Serilog + Bunyan设置和开发人员使用它更感兴趣,我们可以登录MySQL,同时花更多的时间来流利地进行其余工作。 但是,我们经验丰富的编码人员之一更喜欢做类似的事情:log.debug("Disk quota {0} exceeded by user {1}, quota, user);使用log4net然后对MySQL运行select语句,例如:select text from logs where text like "Disk quota"; 话虽这么说,哪种方法更好,和/或在选择日志系统类型时我们需要考虑什么?
110 c#  javascript  mysql  logging 

6
为什么存在TRACE级别,何时应该使用它而不是DEBUG?
在Log4J,Slf4J和Java中的其他几个日志记录框架中,您有两个“开发人员”级别用于记录日志: 调试 跟踪 我了解DEBUG的作用,因为解释很清楚: 调试级别指定细粒度的信息事件,这些事件对于调试应用程序最有用。 但是TRACE级别对其用例不是很明确: 与调试相比,TRACE级别指定的信息事件更详细 (来源:log4J JavaDoc) 这没有告诉我如何或何时使用TRACE。有趣的是,这不是syslog标准中定义的严重性级别。搜寻TRACE和DEBUG之间的区别似乎只是返回“使用DEBUG,哦,也有TRACE”。我找不到TRACE级别的特定用例。我能找到的最好的东西是这个古老的Wiki页面,讨论了该级别存在的优点。 作为一名建筑师,这在我脑海中引发了许多旗帜和问题。如果一个年轻的开发人员要求我将TRACE添加到我的体系结构中,我会用以下问题轰炸他: 应该使用TRACE而不是DEBUG记录的一些信息示例是什么? 通过记录该信息可以解决什么具体问题? 在这些示例中,已记录信息的属性有哪些可清楚地区分TRACE级别而不是DEBUG级别的记录? 为什么该信息必须通过日志基础结构? 将这些信息保留在日志日志中而不只是使用这些日志有什么好处System.out.println? 为什么最好为此使用日志而不是调试器? 在TRACE级别进行日志记录的典型示例是什么? 在示例中,通过以TRACE级别而不是DEBUG进行记录获得了哪些具体收益? 为什么这些收益很重要? 相反:通过将其记录在TRACE而不是DEBUG上可以避免什么问题? 我还能如何解决这些问题?为什么在TRACE级别上进行日志记录比其他解决方案更好? TRACE级别的日志语句是否应保留在生产代码中?为什么? 但是考虑到它存在于大多数主要框架中,我猜它对某些事情有用吗?那么... TRACE的用途是什么,它与DEBUG有何区别?
82 java  logging 

14
为什么大多数日志文件使用纯文本而不是二进制格式?
日志记录是必需的,但(相对)很少使用。这样,就存储而言可以使其更加紧凑。 例如,最常记录的数据(例如ip,日期,时间)以及其他可以表示为整数的数据将存储为文本。 如果将日志记录存储为二进制数据,则可以保留很多空间,从而需要较少的旋转并增加磁盘寿命,尤其是对于写受到限制的SSD。 有人可能说这是一个很小的问题,实际上并不重要,但是考虑到建立这种机制所需的努力,这是没有道理的。任何人都可以在业余时间里做两天左右的工作,为什么人们不这样做呢?
81 logging  storage 

9
应用程序日志记录有哪些模式和反模式?[关闭]
最近,我不得不调查我们的大型企业应用程序的一个领域问题。我不得不梳理日志以发现问题,这让我感到恐惧,最终,日志根本无法帮助您识别/隔离错误。 注意:我了解并非所有错误都可以通过日志发现。这不会改变日志令人恐惧的事实。 我们的日志记录存在一些显而易见的问题,我们已经可以尝试解决。我不想在这里列出这些内容,因此我不能简单地向您显示我们的日志文件,以便您可以就如何做提供建议。 相反,为了评估我们在日志记录方面的表现,我想知道: 关于应用程序(尤其是大型应用程序)的日志记录有哪些准则(如果有)。 是否有我们应该遵循的模式或我们应该注意的反模式? 这是要修复的重要事情,还是可以修复,还是所有日志文件都非常庞大,并且您需要补充脚本来分析它们? 旁注:我们使用log4j。
66 logging 

3
.NET中记录和跟踪的最佳实践
我已经阅读了很多有关跟踪和日志记录的内容,试图为该问题的最佳实践找到一些黄金法则,但是没有任何东西。人们说好的程序员会产生良好的跟踪,但是要这样说,它必须来自经验。 我也在这里和通过互联网阅读了类似的问题,它们并不是我要问的一样,或者我的回答不令人满意,也许是因为这些问题缺乏细节。 因此,人们说,在无法附加调试器的情况下,跟踪应可以复制调试应用程序的经验。它应该提供足够的上下文,以便您可以看到应用程序中每个控制点采用的路径。 更深入地讲,您甚至可以区分跟踪和事件日志记录,因为“事件日志记录与跟踪的不同之处在于它捕获主要状态而不是详细的控制流”。 现在,说我想仅使用标准.NET类(System.Diagnostics名称空间中的类)进行跟踪和记录。我认为TraceSource类比静态Trace类更适合这项工作,因为我想在跟踪级别之间进行区分,并且使用TraceSource类可以传递用于通知事件类型的参数,而在使用Trace类时我必须使用Trace.WriteLineIf然后验证类似SourceSwitch.TraceInformation和的东西SourceSwitch.TraceErrors,它甚至没有类似TraceVerbose或的属性TraceStart。 考虑到所有这些,您是否可以考虑按以下方式进行操作: 开始方法时,跟踪“开始”事件,该事件应表示单个逻辑操作或管道,以及传递给方法的参数值的字符串表示。 将项目插入数据库时​​,跟踪“信息”事件。 在重要的if / else语句中采用一条路径或另一条路径时,跟踪“信息”事件。 在catch块中跟踪“严重”或“错误”,具体取决于它是否是可恢复的错误。 完成该方法的执行时,跟踪“停止”事件。 另外,请说明何时最好跟踪“详细”和“警告”事件类型。如果您的示例代码具有良好的跟踪/记录功能并且愿意共享,那将是极好的选择。 注意:我在这里找到了一些很好的信息,但仍然不是我想要的信息:http : //msdn.microsoft.com/zh-cn/magazine/ff714589.aspx
53 .net  logging 

9
在进行TDD时需要记录日志吗?
在进行红色,绿色和重构循环时,我们应始终编写最少的代码以通过测试。这就是我被教导有关TDD的方式,以及几乎所有书籍都描述该过程的方式。 但是日志记录呢? 老实说,除非发生真正复杂的事情,否则我很少在应用程序中使用日志记录,但是,我看到无数篇文章都谈到了正确日志记录的重要性。 因此,除了记录异常外,我无法证明在适当的经过测试的应用程序(单元/集成/验收测试)中记录日志的真正重要性。 所以我的问题是: 如果正在执行TDD,是否需要记录?失败的测试不会揭示应用程序有什么问题吗? 是否应该在每个类的每个方法中为日志记录过程添加测试? 例如,如果在生产环境中禁用了某些日志级别,这是否会在测试和环境之间引入依赖性? 人们谈论日志如何简化调试,但是TDD的主要优点之一是,我始终知道由于测试失败而出了什么问题。 有什么我想念的吗?

6
使用全局唯一的消息ID使代码可查找
查找脚本的常见模式遵循以下脚本: 观察奇怪的地方,例如没有输出或挂起的程序。 在日志或程序输出中找到相关消息,例如“找不到Foo”。(以下内容仅在找到错误所在的路径时才有意义。如果堆栈跟踪或其他调试信息容易获得,则是另一回事了。) 找到打印消息的代码。 调试Foo输入(或应该输入)图片到消息打印的第一处之间的代码。 第三步是调试过程经常停止的地方,因为在代码中有很多地方Could not find {name}都打印了“找不到Foo”(或模板字符串)。实际上,几次拼写错误使我找到实际位置的速度比我原本要快得多-它使消息在整个系统中(通常在整个世界)都是唯一的,从而导致相关搜索引擎立即受到攻击。 由此得出的明显结论是,我们应该在代码中使用全局唯一的消息ID,将其作为消息字符串的一部分进行硬编码,并可能验证代码库中每个ID仅出现一次。在可维护性方面,该社区认为此方法最重要的利弊是什么,您将如何实施此方法或以其他方式确保永远不必实施它(假设该软件将始终存在错误)?

11
记录:为什么和什么?[关闭]
我从未编写过大量使用日志记录的程序。我所做的最大努力是在发生异常时捕获堆栈跟踪。 我想知道,其他人登录了多少?它取决于您正在编写哪种类型的应用程序?您发现日志真的有用吗?

7
为什么“对象引用未设置为对象的实例”不能告诉我们哪个对象?
我们正在启动一个系统,有时我们会收到NullReferenceException消息中著名的异常Object reference not set to an instance of an object。 但是,在一种有将近20个对象的方法中,记录一个对象为空的日志实际上根本没有用。这就像告诉您,当您是研讨会的安全人员时,100位参加者中的一个人是恐怖分子。真的对您毫无用处。如果要检测哪个人是威胁性的人,则应该获取更多信息。 同样,如果要删除该错误,则需要知道哪个对象为空。 现在,有些事情困扰了我几个月,这就是: .NET为什么不给我们名称或对象引用的类型(至少为null)?。它不能从反射或任何其他来源理解类型吗? 另外,了解哪个对象为空的最佳实践是什么?我们是否应该始终在这些上下文中手动测试对象的可空性并记录结果?有没有更好的办法? 更新: 异常The system cannot find the file specified具有相同的性质。在附加到进程并进行调试之前,您无法找到哪个文件。我猜这些类型的异常会变得更聪明。如果.NET可以告诉我们c:\temp.txt doesn't exist.而不是一般性消息,会更好吗?作为开发人员,我投赞成票。

2
您应该从库代码登录吗?
如果我正在开发Java库,那么从库代码中发出日志语句是否是一种好习惯? 在库中记录日志将使调试和故障排除更加透明。但是,另一方面,我不喜欢用日志记录语句乱扔我的库代码。是否还有任何性能影响需要考虑?
38 java  logging 

4
用Java处理调试输出的正确方法是什么?
随着我目前的Java项目变得越来越大,我感到同样需要在代码的多点插入调试输出。 为了适当地启用或禁用此功能,具体取决于测试会话的打开或关闭,我通常private static final boolean DEBUG = false在测试要检查的类的开头放置a ,然后以这种方式简单地使用它(例如): public MyClass { private static final boolean DEBUG = false; ... some code ... public void myMethod(String s) { if (DEBUG) { System.out.println(s); } } } 等等。 但这并不能使我感到高兴,因为它当然有效,但是如果您不仅仅盯着其中的几个,可能会有太多的类将DEBUG设置为true。 相反,我(就像-我认为-许多其他人一样)不希望将整个应用程序置于调试模式,因为输出的文本数量可能很庞大。 那么,有没有一种正确的方法来处理这种情况,或者最正确的方法是使用DEBUG类成员?

4
登录到文本文件或数据库?
什么时候应该使用数据库记录日志,何时使用文本文件? 我看到默认情况下,Web服务器和Web框架(您的应用程序在内部使用)通常(总是?)将请求和错误记录到文本文件中。但是我看到围绕这些服务器和框架开发应用程序的人有时会登录数据库(甚至是应用程序的主数据库,而不是某些外部数据库)。 另外,调试日志和审核日志之间可能会有区别-我已经在此站点的某处阅读了此分类。
25 logging 

2
登录JSON对性能的影响
我看到越来越多的有关登录JSON的文章。您也可以在NodeJS博客上找到一个。为什么每个人都这么喜欢它?我只能看到更多的操作参与其中: 正在创建几个新对象。 字符串化对象,涉及计算字符串长度或多个字符串分配。 GC创建的所有废话。 使用JSON日志记录和常规字符串日志记录时,是否有任何性能测试?人们在企业项目中是否使用JSON(用于记录)?
22 logging  json 

7
在生产中记录用户操作的最佳做​​法
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 7年前。 我打算在生产环境中记录很多不同的东西,例如当用户: 登录,注销 变更个人资料 编辑帐户设置 更改密码...等 在生产环境中这样做是一种好习惯吗?还有什么是记录所有这些的好方法。我目前正在使用以下代码块登录: public void LogMessageToFile(string msg) { System.IO.StreamWriter sw = System.IO.File.AppendText( GetTempPath() + @"MyLogFile.txt"); try { string logLine = System.String.Format( "{0:G}: {1}.", System.DateTime.Now, msg); sw.WriteLine(logLine); } finally { sw.Close(); } } 这样可以生产吗?我的应用程序是一个非常新的应用程序,因此我不希望马上有数百万用户,或者寻找最佳实践来跟踪网站上的操作,甚至是最佳实践。
22 c#  asp.net  logging 

6
在实现旁边记录是否违反SRP?
在考虑敏捷软件开发和所有原理(SRP,OCP等)时,我问自己如何对待日志记录。 在实现旁边记录是否违反SRP? 我会说,yes因为该实现也应该能够运行而无需登录。那么如何更好地实现日志记录呢?我检查了一些模式,得出的结论是,最好不要以用户定义的方式违反原则,而是使用已知违反原则的任何模式的最佳方式是使用装饰器模式。 假设我们有一堆完全没有违反SRP的组件,然后我们想要添加日志记录。 成分A 组件B使用A 我们想要记录A,因此我们创建了另一个装饰有A的组件D,都实现了接口I。 接口我 组件L(系统的日志记录组件) 组件A实现I 组件D实现I,修饰/使用A,使用L进行日志记录 组件B使用I 优点:-我可以不使用日志就使用A-测试A意味着我不需要任何日志模拟-测试更简单 缺点:-更多组件和更多测试 我知道这似乎是另一个公开讨论的问题,但我实际上想知道是否有人使用的记录策略比装饰器或SRP违规更好。作为默认NullLogger的静态单例记录器又如何呢?如果需要syslog-logging,则在运行时更改实现对象?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.