logbackでRollingFileAppenderを使用する場合はAsyncAppenderを併用した方がよさそう[logback 1.1.2]
前回の記事の
/** * This method differentiates RollingFileAppender from its super class. */ @Override protected void subAppend(E event) { // The roll-over check must precede actual writing. This is the // only correct behavior for time driven triggers. // We need to synchronize on triggeringPolicy so that only one rollover // occurs at a time synchronized (triggeringPolicy) { if (triggeringPolicy.isTriggeringEvent(currentlyActiveFile, event)) { rollover(); } } super.subAppend(event); }
ここが原因でログを出力するたびにロックを行ってしまっているというのと、実際にログファイルのロールオーバーが行われたときに時間がかかるとその間は完全にストップしてしまうらしい。
特にログのロールオーバーはログファイルが大きいと平気で数秒かかったりするので、スループットが著しく低下する。
ついでにログの順番も入れ替わる。
ログの消失は怖いけど入れないとだなぁ。
からい。