Biz∫のWEBアプリケーションでログを出力したい
個人的にはJavaのアプリケーションでは、LOG4J以外のロギングを使用したことがありませんでした。
IntramartではSLF4J+LOGBACKの組み合わせログを出力しており、Biz∫でも使用されています。
ということで、今回開発側から「ログはどうやったら好きなファイルに出力できるの?」と質問を頂きましたので検証してみました。
と、その前にSLF4J+LOGBACKについてちょっとだけ予習をして、図にしました。
Intramart7.2(パッチなし)では、以下のライブラリバージョンで動作している模様。
さて、予習した内容から設定はlogback.xmlに書くということなので、このファイルを探しましたが見つかりません。
どうやらBiz∫では<IMインストールDIR>/conf/logの下に設定ファイルを置くと自動的にインクルードされるようです。
(Intramartも同じかどうか検証できてません。。。)
以下のような設定ファイルを<IMインストールDIR>/conf/logの下に置きます。
<included> <appender name="BIZ_MYAPP_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>${im.home}/log/biz-integral/biz-myapp.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy"> <FileNamePattern>${im.home}/log/biz-integral/biz-myapp%i.log</FileNamePattern> <MinIndex>1</MinIndex> <MaxIndex>5</MaxIndex> </rollingPolicy> <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy"> <MaxFileSize>10MB</MaxFileSize> </triggeringPolicy> <append>true</append> <ImmediateFlush>true</ImmediateFlush> <Encoding>UTF-8</Encoding> <layout class="ch.qos.logback.classic.PatternLayout"> <Pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}][%X{biz.user.id}][%X{biz.logingroup.id}][%X{biz.company.code}][%X{biz.process.id}]%msg%n</Pattern> </layout> </appender> <logger name="your.package.name" additivity="false"> <level value="TRACE" /> <appender-ref ref="BIZ_MYAPP_LOG" /> </logger> </included>
以下は簡単なサンプルコードです。
package your.package.name; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MyApp { protected static Logger logger = LoggerFactory.getLogger(MyApp.class); public void execute(String ename) { if (ename == null) { logger.error("This is a WARN Message! Name is null"); } logger.trace("This is a Trace Message! Name is:" + ename); } }
出力は以下のような感じになります。
[2010-09-06 15:33:26.258][aoyagi][default][0001][myApp#execute]This is a Trace Message! Name is: hogehoge