以下のlog4j2.xmlファイルがあります。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="LOG_DIR">.</Property>
<Property name="ARCHIVE">output.log</Property>
<Property name="CONSOLE_PATTERN">[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</Property>
<Property name="FILE_PATTERN">%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n</Property>
</Properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${CONSOLE_PATTERN}"/>
</Console>
<File name="file" fileName="${LOG_DIR}/${ARCHIVE}" immediateFlush="false" append="false">
<PatternLayout pattern="${FILE_PATTERN}"/>
</File>
</Appenders>
<Loggers>
<Root level="info" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="file"/>
</Root>
<Logger name="com.my.example" level="TRACE" additivity="false">
<AppenderRef ref="console"/>
</Logger>
</Loggers>
</Configuration>
次に、メインクラス内に次のように配置します。
private static final Logger logger = LogManager.getLogger(Main.class.getName());
同じクラスで、以下の行を使用していくつかのメッセージをログに記録します。
logger.trace("Starting application...");
logger.info("This should be written to file, but doesn't");
アプリをデバッグしているとき:
アプリの実行時(デバッグなし)はテストしていません。それが正常で、デバッグでのみ成功するかどうか疑問に思っています。
おそらく、メインクラスはcom.my.exampleパッケージまたはサブパッケージにあります。したがって、そのロガーを使用してログに記録します。そのロガーは、コンソールに移動するようにのみ構成されています。加法性がfalseに設定されているため、ルートロガーに委任されません。それが本当なら、ルートロガーはもう一度コンソールにログを記録してからファイルにログを記録します。
構成では、ファイルにログを記録する唯一の方法は、com.my.exampleパッケージからのイベント以外のロガーからのイベントをログに記録することです。たとえば、あなたがする場合
ロガーlogger2 = LogManager.getLogger( "Test"); logger2.info( "これはファイルに書き込まれます");
実際にはファイルに移動します。
これがすべて説明されているhttp://logging.apache.org/log4j/2.x/manual/architecture.htmlを参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加