序文
他のプロジェクトチームからコードを引き継いだのですが、IDAEでプログラムをデバッグしたところ、log4jのログがコンソールに出力されず、ログ関連のコードに問題がないことが分かりました。
私はインターネットを検索し、この問題を解決するための個人的なプロセスをまとめました。
プロセス
1. 使用する構成ファイルを決定する
目的は分かりませんが、プロジェクト内にlog4jのプロパティとxmlの2つの設定ファイルがあります。
最初はxmlファイルが見えませんでしたが、プロパティファイルに注目し続けたところ、問題ないことがわかりました。その後、Vm のオプションに **-Dlog4j.debug** が追加され、起動時に出力される log4j の情報から、log4j が xml ファイルを使用していることがわかりました。
2. 相加性
2 番目は、 <logger> の加法性属性です。
<!-- 打印到控制台 -->
<appender name="myConsole" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd HH:mm:ss,SSS\} %-5p] [%t] %c{2\} - %m%n" />
</layout>
</appender>
<!-- 打印到文件中 -->
<appender name="fileAppender" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${logfileName}.log" />
<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern"
value="[%d{MMdd HH:mm:ss SSS\} %-5p] [%t] %c{3\} - %m%n" />
</layout>
</appender>
<!-- logger -->
<logger name="com.test" additivity="false">
<level value="INFO" />
<appender-ref ref="fileAppender" />
</logger>
<!-- root -->
<root>
<priority value ="INFO"/>
<appender-ref ref="myConsole"/>
</root>
XML 設定ファイルの <appender> は、ログがコンソールまたはファイルに出力される形式を定義します。<logger> は、どのアペンダーがプロジェクト内の各クラスにバインドされるかを決定します。<root> はルート ロガーであり、複数のアペンダをバインドします。
ロガーの加法性のデフォルトは true です。これは、ルートのアペンダーが印刷できるように、ロガーによって出力されるログもルートに送信される必要があることを意味します。
3. 解決策
オプション 1
デフォルト値は true であるため、加法性を true に変更するか、直接削除します。
オプション II
com.test のロガーにコンソール アペンダを追加します。
<!-- logger -->
<logger name="com.test" additivity="false">
<level value="INFO" />
<appender-ref ref="fileAppender" />
<appender-ref ref="myConsole" />
</logger>
このようにして、コンソールにログが出力されない問題は解決されます。
95 歳以降の若手プログラマーが、日々の業務における個人的な実践を、初心者の視点から 0 から 1 まで詳しく、真剣に書きます。記事は公式アカウント【あきらめロード入門】にて公開してまいりますので、ご注目いただければ幸いです。