「Struts2で slf4j+logback を使うには」の版間の差分
提供: tknotebook
(ページの作成:「 <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.7</version> </dependency...」) |
|||
(1人の利用者による、間の9版が非表示) | |||
1行: | 1行: | ||
+ | [[Category:コンピュータ]][[Category:Java]][[Category:Struts2]] | ||
+ | [[メインページ]]>[[コンピュータの部屋#Java]]>[[Struts2 Tips]] | ||
+ | struts2はcommon-loggingとlog4jを使いますが、最近はロギングに slf4j + logback を利用されている方が多いと思います。この記事では slf4j + logback を利用するための設定を紹介します。 | ||
+ | |||
+ | ==必要なライブラリ== | ||
+ | |||
+ | maven で生成したひな形 struts2 blank等は log4j-core を使っていますが、 | ||
+ | log4j-core を抜き、その代わりに slf4j+logback, log4j-to-slf4j、log4j-api を使えば | ||
+ | ログは全てlogback に送られます。以下にこれらの pom.xml の dependency の設定を示します。 | ||
+ | |||
+ | <pre> | ||
<dependency> | <dependency> | ||
<groupId>ch.qos.logback</groupId> | <groupId>ch.qos.logback</groupId> | ||
16行: | 27行: | ||
<version>2.6.2</version> | <version>2.6.2</version> | ||
</dependency> | </dependency> | ||
+ | </pre> | ||
+ | |||
+ | ==logback.xml== | ||
+ | |||
+ | ログの出力先や形式はクラスパス内に置いた logback.xml で決まります。 | ||
+ | どのようにするかはアプリケーションの用途などで決まりますが、とりあえず | ||
+ | 以下に参考例を示しておきます。 | ||
+ | |||
+ | この例では'''全てのログ'''は標準出力と log/Trace.log に出力されます。 | ||
+ | |||
+ | log/Rolling.logには '''INFOレベル以上のログ'''が出力されます。 | ||
+ | このログは一時間毎に Rolling-yyyy-MM-dd-hh.log という日付と時刻が入った形式に | ||
+ | リネームされてローテーションします。 | ||
+ | 最大30個、つまり最低30時間分のログを保持します。 | ||
+ | |||
+ | ログの出力場所はアプリのカレントディレクトリの直下ですが、LOG_DIRプロパティで | ||
+ | 位置を固定するやり方もコメントに含ませてあります。 | ||
+ | |||
+ | <pre> | ||
+ | <?xml version="1.0" encoding="UTF-8" ?> | ||
+ | |||
+ | <!--suppress ALL --> | ||
+ | <configuration> | ||
+ | |||
+ | <!--変数の定義を行います。2行目は外部のプロパティファイルの内容から定義します。--> | ||
+ | <property name="LOG_DIR" value="c:/logback_logs" /> | ||
+ | |||
+ | <!-- 標準出力に出力する設定です。--> | ||
+ | <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> | ||
+ | <!--アペンダでのレベル設定--> | ||
+ | <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> | ||
+ | <level>TRACE</level> | ||
+ | </filter> | ||
+ | <target>System.out</target> | ||
+ | <encoder> | ||
+ | <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern> | ||
+ | </encoder> | ||
+ | <withJasi>true</withJasi> | ||
+ | </appender> | ||
+ | |||
+ | <!--ログファイルを出力するシンプルな設定です。--> | ||
+ | <appender name="FILE" class="ch.qos.logback.core.FileAppender"> | ||
+ | <!--アペンダでのレベル設定--> | ||
+ | <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> | ||
+ | <level>TRACE</level> | ||
+ | </filter> | ||
+ | <!--<file>${LOG_DIR}/Trace.log</file>--> | ||
+ | <file>log/Trace.log</file> | ||
+ | <encoder> | ||
+ | <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern> | ||
+ | </encoder> | ||
+ | </appender> | ||
+ | |||
+ | <!--ログファイルをアーカイブする設定です。アーカイブは1時間毎に行います。--> | ||
+ | <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> | ||
+ | <!--アペンダでのレベル設定--> | ||
+ | <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> | ||
+ | <level>INFO</level> | ||
+ | </filter> | ||
+ | <!--<file>${LOG_DIR}/Rolling.log</file>--> | ||
+ | <file>log/Rolling.log</file> | ||
+ | <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> | ||
+ | <!--<fileNamePattern>${LOG_DIR}/Rolling_%d{yyyy-MM-dd_HH}.log</fileNamePattern>--> | ||
+ | <fileNamePattern>log/Rolling_%d{yyyy-MM-dd_HH}.log</fileNamePattern> | ||
+ | <maxHistory>30</maxHistory> | ||
+ | </rollingPolicy> | ||
+ | <encoder> | ||
+ | <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern> | ||
+ | </encoder> | ||
+ | </appender> | ||
+ | |||
+ | <!-- ルートから全てのログをアペンダに流し、アペンダでフィルタリングを行う方式とします。--> | ||
+ | <root level="TRACE"> | ||
+ | <appender-ref ref="STDOUT"/> | ||
+ | <appender-ref ref="FILE"/> | ||
+ | <appender-ref ref="ROLLING"/> | ||
+ | </root> | ||
+ | </configuration> | ||
+ | </pre> |
2016年12月10日 (土) 10:54時点における最新版
メインページ>コンピュータの部屋#Java>Struts2 Tips
struts2はcommon-loggingとlog4jを使いますが、最近はロギングに slf4j + logback を利用されている方が多いと思います。この記事では slf4j + logback を利用するための設定を紹介します。
必要なライブラリ
maven で生成したひな形 struts2 blank等は log4j-core を使っていますが、 log4j-core を抜き、その代わりに slf4j+logback, log4j-to-slf4j、log4j-api を使えば ログは全てlogback に送られます。以下にこれらの pom.xml の dependency の設定を示します。
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.7</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-to-slf4j</artifactId> <version>2.6.2</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.6.2</version> </dependency>
logback.xml
ログの出力先や形式はクラスパス内に置いた logback.xml で決まります。 どのようにするかはアプリケーションの用途などで決まりますが、とりあえず 以下に参考例を示しておきます。
この例では全てのログは標準出力と log/Trace.log に出力されます。
log/Rolling.logには INFOレベル以上のログが出力されます。 このログは一時間毎に Rolling-yyyy-MM-dd-hh.log という日付と時刻が入った形式に リネームされてローテーションします。 最大30個、つまり最低30時間分のログを保持します。
ログの出力場所はアプリのカレントディレクトリの直下ですが、LOG_DIRプロパティで 位置を固定するやり方もコメントに含ませてあります。
<?xml version="1.0" encoding="UTF-8" ?> <!--suppress ALL --> <configuration> <!--変数の定義を行います。2行目は外部のプロパティファイルの内容から定義します。--> <property name="LOG_DIR" value="c:/logback_logs" /> <!-- 標準出力に出力する設定です。--> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!--アペンダでのレベル設定--> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>TRACE</level> </filter> <target>System.out</target> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern> </encoder> <withJasi>true</withJasi> </appender> <!--ログファイルを出力するシンプルな設定です。--> <appender name="FILE" class="ch.qos.logback.core.FileAppender"> <!--アペンダでのレベル設定--> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>TRACE</level> </filter> <!--<file>${LOG_DIR}/Trace.log</file>--> <file>log/Trace.log</file> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern> </encoder> </appender> <!--ログファイルをアーカイブする設定です。アーカイブは1時間毎に行います。--> <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender"> <!--アペンダでのレベル設定--> <filter class="ch.qos.logback.classic.filter.ThresholdFilter"> <level>INFO</level> </filter> <!--<file>${LOG_DIR}/Rolling.log</file>--> <file>log/Rolling.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--<fileNamePattern>${LOG_DIR}/Rolling_%d{yyyy-MM-dd_HH}.log</fileNamePattern>--> <fileNamePattern>log/Rolling_%d{yyyy-MM-dd_HH}.log</fileNamePattern> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{80} - %msg%n</pattern> </encoder> </appender> <!-- ルートから全てのログをアペンダに流し、アペンダでフィルタリングを行う方式とします。--> <root level="TRACE"> <appender-ref ref="STDOUT"/> <appender-ref ref="FILE"/> <appender-ref ref="ROLLING"/> </root> </configuration>