About

本サイトについて

趣味で開発したプログラムや開発メモを載せています。
ソースコードはGithubで公開しつつ、なるべく後から分かるように解説に努めてますので、
誰かのお役に立てれば嬉しいです。

プロフィール

kght6123

佐賀県出身で1985年生まれ。
三重県四日市市在住のシステムエンジニア。家庭を大事にしたい2児の父。

kght6123.page

設定ファイル不要で標準出力にLog4jを使いたい

2022-10-01T11:54:24.865Z

解説

Javaで、さくっとCLIのアプリケーションを作るときに、

他のlog4jを使って実装された古いロジックを流用するために

log4jを使いたいことがあるので

その時によく使う自作のユーティリティを紹介します!

(最近は、SLF4Jを使って実装を統一した方が良いと思う・・・💦)

下記のような感じで、一意のロガーの名前を指定すると、ログ出力に使えるLoggerが作成されます。

final Logger logger = Log4jUtils.newConsoleCsvAllLogger("hello");

その後は、こんな感じでログ出力ができます。

logger.debug("world");

ソースコード

import org.apache.log4j.Appender;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.SimpleLayout;
import org.apache.log4j.TTCCLayout;

public class Log4jUtils {
    
    // 一番基底のLoggerを作るだけのメソッド
    public static Logger newLogger(final String name, final Appender appender, final Level level) {
        final Logger logger = Logger.getLogger(name);
        logger.addAppender(appender);
        logger.setLevel(level);
        return logger;
    }
    
    // SimpleLayoutでログを標準出力するLoggerを作るメソッド
    public static Logger newConsoleSimpleAllLogger(final String name) {
        return newConsoleAllLogger(name, new SimpleLayout());
    }
    
    // TTCCLayoutでログを標準出力するLoggerを作るメソッド
    public static Logger newConsoleTTCCAllLogger(final String name) {
        return newConsoleAllLogger(name, new TTCCLayout());
    }
    
    // PatternLayout(CSV)でログを標準出力するLoggerを作るメソッド
    public static Logger newConsoleCsvAllLogger(final String name) {
        return newConsolePatternAllLogger(name, "%d{yyyy/MM/dd HH:mm:ss.SSS},%x,%r,%t,%-5p,%m%n");
    }
    
    // PatternLayout(パターンは指定する)でログを標準出力するLoggerを作るメソッド
    public static Logger newConsolePatternAllLogger(final String name, final String pattern) {
        return newConsoleAllLogger(name, new PatternLayout(pattern));
    }
    
    // コンソールにログを出力するLoggerを作るだけのメソッド
    public static Logger newConsoleAllLogger(final String name, final Layout layout) {
        return newLogger(name, new ConsoleAppender(layout), Level.ALL);
    }
}