1:
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.6.2</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.6.2</version>
</dependency>
2:
<?xml version="1.0" encoding="UTF-8"?>
<!--
status : 这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出
monitorInterval : Log4j能够自动检测修改配置文件和重新配置本身, 设置间隔秒数。
-->
<Configuration status="WARN" monitorInterval="60000">
<!-- 配置日志文件输出目录 -->
<Properties>
<property name="LOG_HOME">F:/projects/logs/nano_wallet_server</property>
<property name="DEFAULT_LOGGER_FILE">default</property>
<property name="EXCEPTION_LOGGER_FILE">exception</property>
<property name="ERROR_LOGGER_FILE">error</property>
<property name="INFO_LOGGER_FILE">info</property>
<property name="WARN_LOGGER_FILE">warn</property>
</Properties>
<!-- 日志输出配置 -->
<Appenders>
<!-- 输出控制台的配置 -->
<Console name="console" target="SYSTEM_OUT">
<!-- 控制台只输出level以及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 输出日志的格式 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %M-%L - %msg%xEx%n"/>
</Console>
<!-- 文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个适合零食测试用 -->
<File name="test_logger_appender" fileName="${LOG_HOME}/test.log" append="false">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %M-%L - %msg%xEx%n"/>
</File>
<!-- 设置默认日志格式并配置日志压缩格式() -->
<RollingFile name="default_logger_appender" immediateFlush="true" fileName="${LOG_HOME}/today/${DEFAULT_LOGGER_FILE}.log"
filePattern="${LOG_HOME}/%d{yyyy-MM-dd}/${DEFAULT_LOGGER_FILE}_%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %M-%L - %msg%xEx%n" />
<Policies>
<!-- 设置每天打包日志一次 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 设置日志文件满1MB后打包 -->
<SizeBasedTriggeringPolicy size="1MB"/>
</Policies>
<DefaultRolloverStrategy fileIndex="max" max="10"/>
</RollingFile>
<!-- 设置异常日志格式并配置日志压缩格式() -->
<RollingFile name="exception_logger_appender" immediateFlush="true" fileName="${LOG_HOME}/today/${EXCEPTION_LOGGER_FILE}.log"
filePattern="${LOG_HOME}/%d{yyyy-MM-dd}/${EXCEPTION_LOGGER_FILE}_%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %M-%L - %msg%xEx%n" />
<Policies>
<!-- 设置每天打包日志一次 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 设置日志文件满1MB后打包 -->
<SizeBasedTriggeringPolicy size="1MB"/>
</Policies>
<DefaultRolloverStrategy fileIndex="max" max="10"/>
</RollingFile>
<!-- 设置错误日志格式并配置日志压缩格式() -->
<RollingFile name="error_logger_appender" immediateFlush="true" fileName="${LOG_HOME}/today/${ERROR_LOGGER_FILE}.log"
filePattern="${LOG_HOME}/${ERROT_LOGGER_FILE}_%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %M-%L - %msg%xEx%n" />
<Policies>
<!-- 设置日志文件满1MB后打包 -->
<SizeBasedTriggeringPolicy size="1MB"/>
</Policies>
<DefaultRolloverStrategy fileIndex="max" max="5"/>
</RollingFile>
<!-- 设置一般日志格式并配置日志压缩格式() -->
<RollingFile name="info_logger_appender" immediateFlush="true" fileName="${LOG_HOME}/today/${INFO_LOGGER_FILE}.log"
filePattern="${LOG_HOME}/%d{yyyy-MM-dd}/${INFO_LOGGER_FILE}_%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %M-%L - %msg%xEx%n" />
<Policies>
<!-- 设置每天打包日志一次 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 设置日志文件满1MB后打包 -->
<SizeBasedTriggeringPolicy size="1MB"/>
</Policies>
<DefaultRolloverStrategy fileIndex="max" max="10"/>
</RollingFile>
<!-- 设置警告日志格式并配置日志压缩格式() -->
<RollingFile name="warn_logger_appender" immediateFlush="true" fileName="${LOG_HOME}/today/${WARN_LOGGER_FILE}.log"
filePattern="${LOG_HOME}/%d{yyyy-MM-dd}/${WARN_LOGGER_FILE}_%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level %class{36} %M-%L - %msg%xEx%n" />
<Policies>
<!-- 设置每天打包日志一次 -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!-- 设置日志文件满1MB后打包 -->
<SizeBasedTriggeringPolicy size="1MB"/>
</Policies>
<DefaultRolloverStrategy fileIndex="max" max="10"/>
</RollingFile>
</Appenders>
<!-- 日志配置 -->
<Loggers>
<!-- 配置日志的根节点 -->
<root level="trace">
<appender-ref ref="console" />
</root>
<!-- 配置默认的日志 -->
<logger name="default_logger" level="trace" includeLocation="true" additivity="true">
<appender-ref ref="default_logger_appender" />
</logger>
<!-- 配置异常日志 -->
<logger name="exception_logger" level="trace" includeLocation="true" additivity="true">
<appender-ref ref="exception_logger_appender" />
</logger>
<!-- 配置错误日志 -->
<logger name="error_logger" level="trace" includeLocation="true" additivity="true">
<appender-ref ref="error_logger_appender" />
</logger>
<!-- 配置一般日志 -->
<logger name="info_logger" level="trace" includeLocation="true" additivity="true">
<appender-ref ref="info_logger_appender" />
</logger>
<!-- 配置警告日志 -->
<logger name="warn_logger" level="trace" includeLocation="true" additivity="true">
<appender-ref ref="warn_logger_appender" />
</logger>
<!-- 配置测试文件 -->
<logger name="test_logger" level="trace" includeLocation="true" additivity="true">
<appender-ref ref="test_logger_appender" />
</logger>
</Loggers>
</Configuration>
3:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* @author zhaowei 2018.08.09
*/
public final class LogUtils
{
private LogUtils() {
}
/**
* 默认日志文件输出位置
*/
private static final Logger DEFAULT_LOGGER = LogManager.getLogger("default_logger");
/**
* 异常日志文件输出位置
*/
private static final Logger EXCEPTION_LOGGER = LogManager.getLogger("exception_logger");
/**
* 错误日志文件输出位置
*/
private static final Logger ERROR_LOGGER = LogManager.getLogger("error_logger");
/**
* 一般日志文件输出位置
*/
private static final Logger INFO_LOGGER = LogManager.getLogger("info_logger");
/**
* 测试日志文件输出位置
*/
private static final Logger TEST_LOGGER = LogManager.getLogger("test_logger");
/**
* 警告日志文件输出位置
*/
private static final Logger WARN_LOGGER = LogManager.getLogger("warn_logger");
public static Logger getDefault()
{
return DEFAULT_LOGGER;
}
public static Logger getException()
{
return EXCEPTION_LOGGER;
}
public static Logger getError()
{
return ERROR_LOGGER;
}
public static Logger getInfo()
{
return INFO_LOGGER;
}
public static Logger getTest()
{
return TEST_LOGGER;
}
public static Logger getWarn()
{
return WARN_LOGGER;
}
/**
* 自定义文件输出位置
* @param loggerFile
* @return
*/
public static Logger getLogger(String loggerFile)
{
return LogManager.getLogger(loggerFile);
}
}