今更、サンプルとしてメモしておきたかったので。。。
log4j2
Maven pom.xml の記述
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.20.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.20.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-jcl</artifactId> <version>2.20.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-1.2-api</artifactId> <version>2.20.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.20.0</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.36</version> </dependency>
Log4j 1.2 → Log4j2 の為に、log4j-1.2-api を使う。
Commons Logging → Log4j2 の為に、log4j-jcl を使う。
SLF4J → Log4j2 の為に、log4j-slf4j-impl
(参考)https://howtodoinjava.com/log4j2/maven-gradle-config/
slf4j-api を使うなら、1.7.36 でないと
以下のメッセージが出てしまう。
SLF4J: No SLF4J providers were found. SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See https://www.slf4j.org/codes.html#noProviders for further details. SLF4J: Class path contains SLF4J bindings targeting slf4j-api versions 1.7.x or earlier. SLF4J: Ignoring binding found at [jar:file:/C:/Users/xxxxx/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.20.0/log4j-slf4j-impl-2.20.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See https://www.slf4j.org/codes.html#ignoredBindings for an explanation.
log4j2.xml
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="off"> <Properties> <Property name="format1">[%d{yyyy-MM-dd HH:mm:ss.SSS}],[%-5p],[%c#%M]-%L, %m%n</Property> </Properties> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout> <pattern>${format1}</pattern> </PatternLayout> </Console> <RollingFile name="File" fileName="/var/log/sample.log" filePattern="/var/log/sample.%d{yyyy-MM-dd}.log"> <PatternLayout> <pattern>${format1}</pattern> </PatternLayout> <TimeBasedTriggeringPolicy interval="12" modulate="true" /> </RollingFile> </Appenders> <Loggers> <Root level="DEBUG"> <AppenderRef ref="Console" level="INFO"/> </Root> <Logger name="software.amazon.awssdk" level="WARN" /> <Logger name="software.amazon.awssdk.request" level="INFO" /> <Logger name="org.apache.ibatis.transaction" level="WARN" /> <Logger name="org.mybatis.guice.transactional" level="WARN" /> <Logger name="org.labo" level="DEBUG"> <AppenderRef ref="File"/> </Logger> </Loggers> </Configuration>
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.4.6</version> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.4.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>2.0.7</version> </dependency>
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE logback> <configuration> <statusListener class="ch.qos.logback.core.status.NopStatusListener" /> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <Target>System.out</Target> <encoder> <Pattern>%-23d{yyyy/MM/dd HH:mm:ss.SSS} %-5p[%thread][%class#%method]%m%n</Pattern> </encoder> </appender> <appender name="STDOUT_DEBUG" class="ch.qos.logback.core.ConsoleAppender"> <Target>System.out</Target> <encoder> <Pattern>%-23d{yyyy/MM/dd HH:mm:ss.SSS} %-5p[%thread][%class#%method:%line]%m%n</Pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>/var/log/sample.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <FileNamePattern>/var/log/sample.%d{yyyy-MM-dd}.log</FileNamePattern> <maxHistory>12</maxHistory> </rollingPolicy> <encoder> <charset>UTF-8</charset> <Pattern>%-23d{yyyy/MM/dd HH:mm:ss.SSS} %-5p[%thread][%class#%method:%line]%m%n</Pattern> </encoder> </appender> <root level="OFF"> <appender-ref ref="STDOUT" /> </root> <logger name="org.abc" level="info" /> <logger name="org.labo"> <level value="debug" /> <appender-ref ref="FILE" /> </logger> </configuration>
root の level を OFF にすることで下記 logger でレベルを override