是否有现成的方法让 Sfl4j / Logback 仅在消息发生变化时记录消息?
Is there an off-the-shelf way to make Sfl4j / Logback to log a message only when it changes?
我的 java 应用程序依赖于第 3 方库。这个库使用 Slf4j 记录。当库的包对应的logger设置为INFO时,会产生这样的日志:
14:20:49.736 [scheduling-1] INFO i.i.s.m.a.m.MeterRegistryService - collectNumberOfApplications - Publishing the number of active applications '1' and disabled ones '0'.
14:20:54.739 [scheduling-1] INFO i.i.s.m.a.m.MeterRegistryService - collectNumberOfApplications - Publishing the number of active applications '1' and disabled ones '0'.
14:20:59.742 [scheduling-1] INFO i.i.s.m.a.m.MeterRegistryService - collectNumberOfApplications - Publishing the number of active applications '1' and disabled ones '0'.
14:21:04.745 [scheduling-1] INFO i.i.s.m.a.m.MeterRegistryService - collectNumberOfApplications - Publishing the number of active applications '1' and disabled ones '0'.
14:21:09.748 [scheduling-1] INFO i.i.s.m.a.m.MeterRegistryService - collectNumberOfApplications - Publishing the number of active applications '1' and disabled ones '0'.
所以我想知道是否有一些 slf4j 或 logback 内置功能仅在消息正文与上一行相比发生变化时才会记录此行。我知道我可能可以使用一些定制的 appender 来完成它,或者扩展一些已经存在的组件,跟踪由某个记录器写入的前 n 条消息的哈希值,并且仅当记录器正在写入第一次出现的 a 时才实际记录消息,但如果可用的话,我更喜欢已经制定的解决方案。
在 logback 中有一个开箱即用的过滤器,你可以使用它,叫做 DuplicateMessageFilter
。这会过滤掉完全重复的消息。您可以使用指定的阈值来确定您想要的重复次数(通过 allowedRepititions
属性)
只需在您的 logback 配置中添加此过滤器,即可删除重复项。
logback 配置示例:
<configuration>
<turboFilter class="ch.qos.logback.classic.turbo.DuplicateMessageFilter" allowedRepetitions="1"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="console" />
</root>
</configuration>
更多信息:
https://logback.qos.ch/manual/filters.html#DuplicateMessageFilter
我的 java 应用程序依赖于第 3 方库。这个库使用 Slf4j 记录。当库的包对应的logger设置为INFO时,会产生这样的日志:
14:20:49.736 [scheduling-1] INFO i.i.s.m.a.m.MeterRegistryService - collectNumberOfApplications - Publishing the number of active applications '1' and disabled ones '0'.
14:20:54.739 [scheduling-1] INFO i.i.s.m.a.m.MeterRegistryService - collectNumberOfApplications - Publishing the number of active applications '1' and disabled ones '0'.
14:20:59.742 [scheduling-1] INFO i.i.s.m.a.m.MeterRegistryService - collectNumberOfApplications - Publishing the number of active applications '1' and disabled ones '0'.
14:21:04.745 [scheduling-1] INFO i.i.s.m.a.m.MeterRegistryService - collectNumberOfApplications - Publishing the number of active applications '1' and disabled ones '0'.
14:21:09.748 [scheduling-1] INFO i.i.s.m.a.m.MeterRegistryService - collectNumberOfApplications - Publishing the number of active applications '1' and disabled ones '0'.
所以我想知道是否有一些 slf4j 或 logback 内置功能仅在消息正文与上一行相比发生变化时才会记录此行。我知道我可能可以使用一些定制的 appender 来完成它,或者扩展一些已经存在的组件,跟踪由某个记录器写入的前 n 条消息的哈希值,并且仅当记录器正在写入第一次出现的 a 时才实际记录消息,但如果可用的话,我更喜欢已经制定的解决方案。
在 logback 中有一个开箱即用的过滤器,你可以使用它,叫做 DuplicateMessageFilter
。这会过滤掉完全重复的消息。您可以使用指定的阈值来确定您想要的重复次数(通过 allowedRepititions
属性)
只需在您的 logback 配置中添加此过滤器,即可删除重复项。
logback 配置示例:
<configuration>
<turboFilter class="ch.qos.logback.classic.turbo.DuplicateMessageFilter" allowedRepetitions="1"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%date [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="console" />
</root>
</configuration>
更多信息: https://logback.qos.ch/manual/filters.html#DuplicateMessageFilter