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

如何为自定义日志记录解决方案正确创建性能测试?

如何为自定义日志记录解决方案正确创建性能测试?

温温酱 2024-01-17 21:03:29
在工作中,我主动从头开始创建一个日志库,以便在内部服务和项目中使用。迄今为止,我已经使用自定义类创建了概念证明,该自定义类extends PatternLayout混淆了输出日志条目中的某些字段。现在的主要任务是断言性能是可以接受的,并且我的解决方案可以处理数百万个日志条目而不会丢失消息。我决定为我的自定义 logback、默认 logback 布局和 Log4j2 编写性能测试,以便比较输出结果。我已经使用jmh.<?xml version="1.0" encoding="UTF-8"?><configuration>    <appender name="FILE_APPLY_RULES" class="ch.qos.logback.core.FileAppender">        <file>logs\log.txt</file>        <encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">            <layout class="com.ingenico.epayments.logging.rule.LoggingRulesApplicator">                <pattern>%msg%n</pattern>                <applyRules>true</applyRules>                <loggingRules>src/test/resources/logging-rules.json</loggingRules>            </layout>        </encoder>    </appender>    <appender name="ASYNC_FILE_APPLY_RULES" class="ch.qos.logback.classic.AsyncAppender">        <discardingThreshold>0</discardingThreshold>        <appender-ref ref="FILE_APPLY_RULES" />        <queueSize>256</queueSize>        <includeCallerData>false</includeCallerData>        <neverBlock>true</neverBlock>    </appender>    <root level="INFO">        <appender-ref ref="ASYNC_FILE_APPLY_RULES" />    </root></configuration>@Slf4jpublic class LogbackTest {    @Test    public void launchBenchmark() throws RunnerException {        Options opt = new OptionsBuilder()                .include(this.getClass().getName() + ".*")                .timeUnit(TimeUnit.MICROSECONDS)                .warmupTime(TimeValue.seconds(1))                .warmupIterations(2)                .measurementTime(TimeValue.seconds(1))                .measurementIterations(2)                .threads(2)                .forks(1)                .shouldFailOnError(true)                .shouldDoGC(true)                .addProfiler(StackProfiler.class)                .addProfiler(HotspotRuntimeProfiler.class)                .build();        new Runner(opt).run();    }测试已运行,在输出中,我看到很多结果数字,但我不知道应该比较哪些值,以及如何断言如果我有良好的性能结果,这不是因为消息已被丢弃?您能给我一些如何准备有效的性能测试的提示吗?
查看完整描述

1 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

您有一个异步AsyncAppender附加程序,它可能会删除队列中的消息。同时,JMH 基准测试期望@Benchmark带注释的方法中的代码同步执行,以计算需要多长时间。这行不通。

在我看来,您试图一次测试太多的东西,例如整个 Logback 堆栈。如果您开发了自定义布局类,LoggingRulesApplicator请先为该类编写 JMH 基准测试。

查看现有的 log4j2 JMH 基准测试。通过使用 NOOP 附加程序可以简化设置,您可能也应该拥有它。


查看完整回答
反对 回复 2024-01-17
  • 1 回答
  • 0 关注
  • 94 浏览

添加回答

举报

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