yamashiro0110の日記

yamashiro0110の日記です。おもにIT技術のメモを綴っていきます(^o^)

Log4j2の使い方めも


Log4j2がよさそうだったので、使ってみたときのめも



使い方

とりあえず使ってみる

package test;

public class Test {
    private static Logger LOG = LogManager.getLogger();

    public static void main(String[] args) {
        LOG.trace("Run {}!!", Test.class.getSimpleName());
    }
}

{}を出力する内容の中に埋め込むと、引数を展開してくれる。超便利(^o^)

引数の型とか、気にしなくていい

出力結果

2014-08-24 09:21:16,950 | [main] | TRACE | test.Test | Run Test!!

インストール

ダウンロードページ

ダウンロードしたバイナリのzipを解凍したら、jarファイルがいろいろあるので↓のjarをclassparhに追加

あと設定ファイルをclasspathが通ってるディレクトリに↓のファイル名で配置する


設定

とりあえず参考の設定

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{DEFAULT} | [%t] | %-5level | %c{36} | %msg%n"/>
        </Console>
        <File name="File" fileName="logs/normal_app.log">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} | [%t] | %-5level | %c{36} | %msg%n"/>
        </File>
        <RollingFile name="RollingFile" fileName="logs/rolling\_app.log" filePattern="logs/rolling\_app\_%d{yyyy-MM-dd}.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} | [%t] | %-5level | %c{36} | %msg%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy />
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Root level="error">
            <AppenderRef ref="File" />
            <AppenderRef ref="RollingFile" />
        </Root>
        <Logger name="test" level="trace" additivity="false">
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File" />
            <AppenderRef ref="RollingFile" />
        </Logger>
    </Loggers>
</configuration>

設定内容について

  • <Appenders> ~ </Appenders>

    • ログ出力先の設定
      • <Console> ~ </Console>
        • 標準出力にログを出力
      • <File> ~ </File>
        • ファイルにログを出力
      • <RollingFile> ~ </RollingFile>
        • ファイルにログを出力。ログローテーションをしてくれる。
  • <Appenders> ~ </Appenders>の属性について

    • name
      • <Logger> ~ </Logger>の設定のときに、参照する名前
    • target
      • Consoleのログ出力先
        • SYSTEM_OUTSYSTEM_ERRを設定。デフォルトはSYSTEM_ERR
    • fileName
      • FileRollingFileのログ出力先
  • <PatternLayout> ~ </PatternLayout>

    • ログ出力のフォーマット。pattern属性にフォーマットを設定する
      • %d{DEFAULT}
        • 時間。%d{yyyy-MM-dd HH:mm:ss.SSS}のようにフォーマットを指定することもできる
      • %t
        • ログ出力を実行したスレッド名
      • %-5level
        • ログレベル
      • %c{}
        • ログ出力を実行したクラス名。{}内に数字を指定すると、呼び出し元クラスからのパッケージを何階層まで表示するか指定できる。コストの高い処理なのでパフォーマンスに影響を与えるらしい。
      • %msg
        • ログ内容
  • <Loggers> ~ </Loggers>

    • <Logger> ~ </Logger>の設定をする要素
  • <Root> ~ </Root>

    • RootLogger、全てのLoggerの親になるLogger
      • level
        • ログ出力のレベル
  • <Logger> ~ </Logger>

    • 個々のLoggerの設定
      • name
        • Loggerの名前
  • <AppenderRef />

    • ref
      • ログ出力先の参照。<Appenders> ~ </Appenders>内で定義したname属性を指定する

JSON形式やHTML形式でも出力できるらしいし、また何かわかったら追記。