LoginSignup
0
1

More than 3 years have passed since last update.

Tomcat 8 でTomcat自体が出力するログのフォーマット

Last updated at Posted at 2018-09-02

Tomcat7からTomcat8に移行した時のメモ

変更点

  • Tomcat 7 + Java 6 でのログ内容
catalina.out
2015/01/16 9:26:31 org.apache.catalina.core.StandardService startInternal
情報: サービス Catalina を起動します
  • Tomcat 8 + Java 7 でのログ内容
catalina.out
16-Jan-2015 9:26:31.518 INFO [main] org.apache.catalina.core.StandardService.startInternal サービス Catalina を起動します

2行だったものが1行に変更されている。

2行に戻す

これを元の2行に戻すには、conf/logging.propertiesの以下の箇所を

conf/logging.properties
java.util.logging.ConsoleHandler.formatter = org.apache.juli.OneLineFormatter

以下に変えることでTomcat 7と同じ2行になる。(OneLineFormatter -> SimpleFormatter)

conf/logging.properties
java.util.logging.ConsoleHandler.formatter = java.util.logging.SimpleFormatter

これで以下のように2行表示になる。

catalina.out
1 15, 2015 12:06:25 午後 org.apache.catalina.core.StandardService startInternal
情報: サービス Catalina を起動します

よく見ると日付のフォーマットも変わっている

今まではjava.util.logging.SimpleFormatterで保持しているformatで処理されていたが、
Java 7からsun.util.logging.LoggingSupportgetSimpleFormatで取得したフォーマットが使われる。

Tomcatのconf/logging.propertiesに以下を追加することでJava 6 の時と同じ内容が得られる。

conf/logging.properties
java.util.logging.SimpleFormatter.format = %1$tY/%1$tm/%1$td %1$tk:%1$tM:%1$tS %2$s%n%4$s: %5$s%6$s%n

やっとTomcat 7 + Java 6と同じになった。

catalina.out
2015/01/16 9:26:31 org.apache.catalina.core.StandardService startInternal
情報: サービス Catalina を起動します

補足情報

日付書式確認用ソース

package jp.kajiken.format;

import java.text.MessageFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.SimpleFormatter;

public class TestFormat {

    public static void main(String[] args) {
        // テストする日付
        Calendar cal = new GregorianCalendar(2015, 0, 2, 8, 50, 59);
        Date dat = new Date(cal.getTimeInMillis());

        // Java6
        System.out.print(new MessageFormat("{0,date} {0,time}").format(new Object[]{dat}));
        System.out.println(" org.apache.catalina.core.StandardService startInternal");
        System.out.println("情報: サービス Catalina を起動します");
        System.out.println("---");

        // Java7
        System.setProperty("java.util.logging.SimpleFormatter.format",
                "%1$tY/%1$tm/%1$td %1$tk:%1$tM:%1$tS %2$s%n%4$s: %5$s%6$s%n");
        LogRecord log = new LogRecord(Level.INFO, "サービス Catalina を起動します");
        log.setSourceClassName("org.apache.catalina.core.StandardService");
        log.setSourceMethodName("startInternal");
        log.setMillis(dat.getTime());
        SimpleFormatter sf = new SimpleFormatter();
        System.out.println(sf.format(log));
    }
}

実行結果

stdout
2015/01/02 8:50:59 org.apache.catalina.core.StandardService startInternal
情報: サービス Catalina を起動します
---
2015/01/02 8:50:59 org.apache.catalina.core.StandardService startInternal
情報: サービス Catalina を起動します

無事に移行前の状態を再現できました。
なぜこんなことをしているのかと言うと、この文字列を使って処理している既存スクリプトがあったのですよ…

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1