猿问

当代码极度递归时(例如多子树),如何在 java 中记录事件

我被要求以有效的方式将日志写入与解析 CSV 文件相关的产品。现在,这段代码非常庞大并且极其递归。我发现如果我尝试直接登录(如记录递归循环内的状态),它会产生很多混乱,因此以后在故障或故障期间很难分析日志文件。有关如何在此有效方式写入日志的任何帮助都将非常有帮助。

该代码更多地涉及解析器和在每个阶段构建多个树。现在,这些树是以递归方式构建的,在这里(在这种递归循环内)写入日志将以一种非常难以理解和分析的方式进行记录。那么是否可以以一种可以更好地理解的方式完成(也许日志中代码的可视化表示会有所帮助)


UYOU
浏览 86回答 1
1回答

江户川乱折腾

首先,您应该知道您想要获得什么日志记录结果。如果您记录某些内容,那么您的代码是否递归并不重要,那么您就会将其记录在日志中。因此,如果您确实必须在循环内记录事件,那么我想,您可能想要拆分重要事件,而不是。例如(使用 slf4j 和 logback):以正常方式记录事件。&nbsp; &nbsp; LOGGER.trace("log message");使用信息级别和上限记录重要内容,使用跟踪记录所有其他内容,然后添加两个具有不同日志级别的附加程序。日志回.xml:&nbsp; &nbsp; <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">&nbsp; &nbsp; &nbsp; &nbsp; <file>@project.artifactId@.log</file>&nbsp; &nbsp; &nbsp; &nbsp; <append>true</append>&nbsp; &nbsp; &nbsp; &nbsp; <filter class="ch.qos.logback.classic.filter.ThresholdFilter">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <level>INFO</level>&nbsp; &nbsp; &nbsp; &nbsp; </filter>&nbsp; &nbsp; &nbsp; &nbsp; <encoder>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <charset>UTF-8</charset>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <pattern>%-8level %-25d{YYYY-MM-dd HH:mm:ss.SSS} %logger - %msg%n</pattern>&nbsp; &nbsp; &nbsp; &nbsp; </encoder>&nbsp; &nbsp; </appender>&nbsp; &nbsp;<appender name="FILE_TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">&nbsp; &nbsp; &nbsp; &nbsp; <file>@project.artifactId@_trace.log</file>&nbsp; &nbsp; &nbsp; &nbsp; <append>true</append>&nbsp; &nbsp; &nbsp; &nbsp; <encoder>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <charset>UTF-8</charset>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <pattern>%-8level %-25d{YYYY-MM-dd HH:mm:ss.SSS} %logger - %msg%n</pattern>&nbsp; &nbsp; &nbsp; &nbsp; </encoder>&nbsp; &nbsp; </appender>&nbsp; &nbsp; <root level="ERROR">&nbsp; &nbsp; &nbsp; &nbsp; <appender-ref ref="FILE" />&nbsp; &nbsp; &nbsp; &nbsp; <appender-ref ref="FILE_TRACE" />&nbsp; &nbsp; </root>在这种情况下,一个日志文件将包含所有内容,而第二个日志文件仅包含重要数据(错误、警告和信息)。因此,使用 INFO 级别的文件来监视重要的事情会更容易,并且您将拥有 TRACE 级别的完整登录文件。
随时随地看视频慕课网APP

相关分类

Java
我要回答