亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何為自定義日志記錄解決方案正確創建性能測試?

如何為自定義日志記錄解決方案正確創建性能測試?

溫溫醬 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 關注
  • 173 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號