tohokuaikiのチラシの裏

技術的ネタとか。

Confluence開発でログを使う

開発環境だと、System.out.println()でコンソールに吐き出したりIDEのデバッガを使う方法でも良いけど、本番環境で問題が出た場合にはロガーを使うしかない。

ログの吐き出される場所

*1/logs/atlassian-confluence.log

log4j

Confluenceのデフォルトで入っていて使えるlogger。
ドキュメントはこちら。Working with Confluence Logs - Confluence Latest - Atlassian Documentation

設定ファイル

以下の場所にある。
WEB-INF/classes/log4j.properties
*2

ログレベルの変更などができる。ログレベルは、log4j Logging Levels - Confluence Latest - Atlassian Documentation によると、DEBUG/INFO/WARN/ERROR/FATAL の5つのログレベルがあって、

SDK log4j.rootLogger=WARN, consolelog, errorlog, events, testAppender
本番 log4j.rootLogger=WARN, confluencelog, errorlog

となっている。

SDKはconsolelogとなっているので、atlas-runさせたコンソールにログが測れる。

このconsolelogとなっているのをconfluencelogにすると、ファイルに出力される。その際、その下らへんにある

log4j.appender.confluencelog=com.atlassian.confluence.logging.ConfluenceHomeLogAppender
log4j.appender.confluencelog.Threshold=DEBUG
log4j.appender.confluencelog.MaxFileSize=20480KB
log4j.appender.confluencelog.MaxBackupIndex=5
log4j.appender.confluencelog.layout=com.atlassian.confluence.util.PatternLayoutWithContext
log4j.appender.confluencelog.layout.ConversionPattern=%d %p [%t] [%c{4}] %M %m%n

コメントアウトを外しておくのを忘れずに。

設定ファイルの詳細は、http://logging.apache.org/log4j/1.2/manual.html にある。

出力ログファイル
SDK target/confluence/home/logs/atlassian-confluence.log
本番 CONFLUENCE_DITA_DIRECTORY/logs/atlassian-confluence.log

使い方

Javaファイルでは、

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


public samplefunc() {
        Logger logger = LoggerFactory.getLogger(this.getClass());
        logger.debug("log message");
        logger.info("log message");
        logger.warn("log message");
        logger.error("log message");
 }   

という感じである。

SDKも本番もログレベルがWARNになっているので、上記の場合は3行目と4行目しか出力されない。

ただし、これログレベルを「DEBUG」にするとコンソールが流れっぱなしになるので、WARNにしたまま、log.warn()で出していく方が良いかも。

*1:は、/confluence/WEB-INF/classes/confluence-init.properties で設定したデータの入っているディレクトリ。

*2:AtlassianSDKの場合だと target/confluence/webapp/WEB-INF/classes/log4j.properties