Minecraft Mod ログファイル多すぎ問題

2025年1月10日(金)
Minecraft
20250110

最初に

バニラで遊んでいるときはそんなに気にならないけど、Modを入れるときは最初のうちは動作に問題がないか何回かチェックしてかつ自分好みにカスタマイズするのでそのたびに起動すると、ログファイルがどんどん生成され細かいファイルがどんどん増え、ちょっとずつ容量圧迫するのが嫌なので、ログファイル生成を制御することにした。
別にアップロードはしないし、趣味でかつ誰にも見せないしエラーが発生してもログを見てその場で自己解決するので、個人的には生成されるログファイルの数は、もっと少なくしてほしい。

Forgeログ

Forgeのログはlatest.logdebug.logの2種類ある
開発者にクラッシュやバグを報告しないならdebug.logはいらないし容量の無駄なので除外もしくは最大個数を制限する

設定内容は以下の通りです
形式は自分のお好みで変更してください

設定内容

フォーマット形式:
[時刻]:[レベル]:[実行ファイルjar]:[ログ内容]
[%d{HH:mm:ss}] [%t/%level] [minecraft/%logger{1}]: %minecraftFormatting{%msg}%n%xEx
保存期間:1日
最大ファイル保管数:5個(1日の最大数)
最大サイズ:1MB

log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="warn" packages="net.minecraftforge.server.terminalconsole,com.mojang.util">
<Appenders>
<TerminalConsole name="Console">
<PatternLayout>
<LoggerNamePatternSelector defaultPattern="%highlightError{[%d{HH:mm:ss}] [%t/%level] [%logger]: %minecraftFormatting{%msg}%n%xEx}">
<!-- don't include the full logger name for Mojang's logs since they use full class names and it's very verbose -->
<PatternMatch key="net.minecraft." pattern="%highlightError{[%d{HH:mm:ss}] [%t/%level] [minecraft/%logger{1}]: %minecraftFormatting{%msg}%n%xEx}"/>
<PatternMatch key="com.mojang." pattern="%highlightError{[%d{HH:mm:ss}] [%t/%level] [mojang/%logger{1}]: %minecraftFormatting{%msg}%n%xEx}"/>
</LoggerNamePatternSelector>
</PatternLayout>
</TerminalConsole>
<Queue name="ServerGuiConsole" ignoreExceptions="true">
<PatternLayout>
<LoggerNamePatternSelector defaultPattern="[%d{HH:mm:ss}] [%t/%level] [%logger]: %minecraftFormatting{%msg}{strip}%n">
<!-- don't include the full logger name for Mojang's logs since they use full class names and it's very verbose -->
<PatternMatch key="net.minecraft." pattern="[%d{HH:mm:ss}] [%t/%level] [minecraft/%logger{1}]: %minecraftFormatting{%msg}{strip}%n"/>
<PatternMatch key="com.mojang." pattern="[%d{HH:mm:ss}] [%t/%level] [mojang/%logger{1}]: %minecraftFormatting{%msg}{strip}%n"/>
</LoggerNamePatternSelector>
</PatternLayout>
</Queue>
<RollingRandomAccessFile name="File" fileName="logs/latest.log" filePattern="logs/%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout pattern="[%d{HH:mm:ss}] [%t/%level] [%logger]: %minecraftFormatting{%msg}{strip}%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<OnStartupTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="1MB"/>
</Policies>
<DefaultRolloverStrategy min="1" max="5" fileIndex="min">
<Delete basePath="logs" maxDepth="1">
<IfFileName glob="%d{yyyy-MM-dd}-%i*.log.gz" />
<IfLastModified age="1d" />
<IfAccumulatedFileCount exceeds="1" />
</Delete>
</DefaultRolloverStrategy>
</RollingRandomAccessFile>
</Appenders>
<Loggers>
<!-- make sure mojang's logging is set to 'info' so that their LOGGER.isDebugEnabled() behavior isn't active -->
<Logger level="${sys:forge.logging.mojang.level:-info}" name="com.mojang"/>
<Logger level="${sys:forge.logging.mojang.level:-info}" name="net.minecraft"/>
<Root level="info">
<filters>
<MarkerFilter marker="NETWORK_PACKETS" onMatch="DENY" onMismatch="NEUTRAL"/>
<RegexFilter regex=".*\$\{[^}]*\}.*" onMatch="DENY" onMismatch="NEUTRAL"/>
</filters>
<AppenderRef ref="Console" level="${sys:forge.logging.console.level:-info}"/>
<AppenderRef ref="ServerGuiConsole" level="${sys:forge.logging.console.level:-info}"/>
<AppenderRef ref="File" level="${sys:forge.logging.file.level:-info}"/>
<AppenderRef ref="DebugFile" level="${sys:forge.logging.debugFile.level:-trace}"/>
</Root>
</Loggers>
</Configuration>

Fabricログ

Fabricは特に言うことなし
むしろログはこれでいいのよ
強いて言うならログファイルの最大生成数だけ制御すればいい
しかもデバッグはJVM引数をつけてたらdebug.logを出力してくれる(素晴らしい)

最後に

Mod入れるときにシングルプレイならログファイルはそんなにたくさんいらない
これは少数の意見かもしれないけどゲームを長時間つけることないので、つけっぱなしという概念ほぼない私にとっては無制限でログファイル作られるのは勘弁してほしい
もちろん手動で消せばいいのはもちろんだけどめんどくさい

追記

GithubのForge issueを見ると「ログの出力が気に入らないなら自分でLog4j2をカスタマイズしてください」という回答があった。