为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

UYOU 2023-09-20 19:10:13
我被要求以有效的方式将日志写入与解析 CSV 文件相关的产品。现在,这段代码非常庞大并且极其递归。我发现如果我尝试直接登录(如记录递归循环内的状态),它会产生很多混乱,因此以后在故障或故障期间很难分析日志文件。有关如何在此有效方式写入日志的任何帮助都将非常有帮助。该代码更多地涉及解析器和在每个阶段构建多个树。现在,这些树是以递归方式构建的,在这里(在这种递归循环内)写入日志将以一种非常难以理解和分析的方式进行记录。那么是否可以以一种可以更好地理解的方式完成(也许日志中代码的可视化表示会有所帮助)
查看完整描述

1 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

首先,您应该知道您想要获得什么日志记录结果。如果您记录某些内容,那么您的代码是否递归并不重要,那么您就会将其记录在日志中。


因此,如果您确实必须在循环内记录事件,那么我想,您可能想要拆分重要事件,而不是。


例如(使用 slf4j 和 logback):以正常方式记录事件。


    LOGGER.trace("log message");

使用信息级别和上限记录重要内容,使用跟踪记录所有其他内容,然后添加两个具有不同日志级别的附加程序。日志回.xml:


    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <file>@project.artifactId@.log</file>

        <append>true</append>

        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">

            <level>INFO</level>

        </filter>

        <encoder>

            <charset>UTF-8</charset>

            <pattern>%-8level %-25d{YYYY-MM-dd HH:mm:ss.SSS} %logger - %msg%n</pattern>

        </encoder>

    </appender>


   <appender name="FILE_TRACE" class="ch.qos.logback.core.rolling.RollingFileAppender">

        <file>@project.artifactId@_trace.log</file>

        <append>true</append>

        <encoder>

            <charset>UTF-8</charset>

            <pattern>%-8level %-25d{YYYY-MM-dd HH:mm:ss.SSS} %logger - %msg%n</pattern>

        </encoder>

    </appender>


    <root level="ERROR">

        <appender-ref ref="FILE" />

        <appender-ref ref="FILE_TRACE" />

    </root>

在这种情况下,一个日志文件将包含所有内容,而第二个日志文件仅包含重要数据(错误、警告和信息)。


因此,使用 INFO 级别的文件来监视重要的事情会更容易,并且您将拥有 TRACE 级别的完整登录文件。


查看完整回答
反对 回复 2023-09-20
  • 1 回答
  • 0 关注
  • 85 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信