LoginSignup
7
9

More than 5 years have passed since last update.

Log4j2で全設定をコードで行う方法

Last updated at Posted at 2016-10-05

Log4j2で設定ファイルを使用せずにコードで設定を行う方法のメモ

サンプルソース

ConsoleAppenderとRollingFileAppenderを使用した例

sample.java

// ログ出力パターン
// 例) 2016-10-05 11:30:53.749  INFO   Hello world
private static final String LOG_PATTERN = "%d{yyy-MM-dd HH:mm:ss.SSS}  %-5level %logger{0} %msg%n";

// ログファイル名
private static final String LOG_NAME = "sample.log";

// ローテーション後のログファイル命名パターン
private static final String LOG_NAME_PATTERN = "sample_%i.log";

// ConsoleAppender名
private static final String CONSOLE_APPENDER_NAME = "CONSOLE_APPENDER";

// RollingFileAppender名
private static final String ROLLING_APPENDER_NAME = "FILE_APPERNDER";

// ログファイル最大サイズ
private static final String LOG_FILE_SIZE = "10MB";

// ログファイル世代管理数
private static final String LOG_ROLLOVER_STRATEGY = "10";

// ログレベル
private static final Level LOG_LEVEL = Level.INFO;

/**
 * ロガー生成
 **/
private static Logger getLogger() {

    try {
        String logDir = "logs" +  File.separator;

        // create LoggerContext
        LoggerContext context = (LoggerContext) LogManager.getContext(false);
        Configuration config = context.getConfiguration();
        PatternLayout layout = PatternLayout.createLayout(
                LOG_PATTERN, 
                null, 
                null, 
                Charset.defaultCharset(), 
                false,
                false, 
                null, 
                null);

        SizeBasedTriggeringPolicy policy = SizeBasedTriggeringPolicy.createPolicy(LOG_FILE_SIZE);
        DefaultRolloverStrategy strategy = DefaultRolloverStrategy.createStrategy(
                LOG_ROLLOVER_STRATEGY, 
                "0", 
                null, 
                null, 
                config);

        RollingFileManager fileManager = RollingFileManager.getFileManager(
                logDir + LOG_NAME,
                logDir + LOG_NAME_PATTERN,
                false,
                false,
                policy,
                strategy,
                null,
                layout,
                128);
        policy.initialize(fileManager);

        // create Appenders
        Appender rollingAppender = RollingFileAppender.createAppender(
                logDir + LOG_NAME,
                logDir + LOG_NAME_PATTERN,
                "false",
                ROLLING_APPENDER_NAME,
                "false",
                "128",
                "true",
                policy,
                strategy,
                layout,
                (Filter) null,
                "false",
                "false",
                (String) null,
                config);
        rollingAppender.start();

        Appender consoleAppender = ConsoleAppender.createAppender(
                layout,
                null,
                null,
                CONSOLE_APPENDER_NAME,
                null,
                null);
        consoleAppender.start();

        // Appender ref
        AppenderRef ref = AppenderRef.createAppenderRef(CONSOLE_APPENDER_NAME, LOG_LEVEL, null);
        AppenderRef ref2 = AppenderRef.createAppenderRef(ROLLING_APPENDER_NAME, LOG_LEVEL, null);
        AppenderRef[] refs = new AppenderRef[] { ref, ref2 };

        // LoggerConfig
        LoggerConfig loggerConfig = LoggerConfig.createLogger(
                "true",
                LOG_LEVEL,
                LogManager.ROOT_LOGGER_NAME,
                "true",
                refs,
                null,
                config,
                null);
        loggerConfig.addAppender(rollingAppender, LOG_LEVEL, null);
        loggerConfig.addAppender(consoleAppender, LOG_LEVEL, null);

        config.addLogger(LogManager.ROOT_LOGGER_NAME, loggerConfig);
        context.updateLoggers(config);

    } catch (Exception e) {
        System.out.println(e);

    }
    return LogManager.getLogger(LogManager.ROOT_LOGGER_NAME);
}

XMLだとこんな感じ

lo4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="error">

    <!-- Properties -->
    <Properties>
        <Property name="pattern">%d{yyy-MM-dd HH:mm:ss.SSS}  %-5level %logger{0} %msg%n</Property>
    </Properties>

    <!-- Console Appender -->
    <Appenders>
        <Console name="CONSOLE_APPENDER" target="SYSTEM_OUT">
            <PatternLayout pattern="${pattern}" />
        </Console>

        <!-- Rolling File Appender -->
        <RollingFile name="FILE_APPERNDER"
            fileName="logs/sample.log"
            filePattern="logs/sample_%i.log">
            <PatternLayout pattern="${pattern}" />
            <Policies>
                <SizeBasedTriggeringPolicy size="10MB" />
                <TimeBasedTriggeringPolicy />
            </Policies>
            <DefaultRolloverStrategy max="10" />
        </RollingFile>
    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="CONSOLE_APPENDER" />
            <AppenderRef ref="FILE_APPERNDER" />
        </Root>
    </Loggers>
</Configuration>
7
9
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
7
9