Log4j2
Log4j2

-
API 分离 –Log4j 的API 和其实现进行分类( 注:我讨厌这样,本来一个jar 包搞定的,要变成好几个,跟slf4j 似的的) -
为日志审计而设计,与
Log4j 1.x 和Logback 不同的是Log4j 2 将不会在重新配置期间丢失事件,支持消息可方便进行审计 -
性能方面的提升,在关键领域比
Log4j 1.x 的性能提升不少,大部分情况下性能跟Logback 差不多 -
支持多
APIs ,支持SLF4J 和Commons Logging API -
自动配置重载,支持
XML 和JSON 格式的配置 -
插件体系架构,所有可配置的组件都是通过
Log4j 插件进行定义,包括Appender, Layout, Pattern Converter, 等等 -
配置属性支持

配置文件
如果需要使用
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.4.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.4.1</version>
</dependency>
</dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.0-beta9</version>
</dependency>
而后在代码文件中,可以使用
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger log = LoggerFactory.getLogger(Test.class);
如果是直接使用的
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;
public class HelloLog4j {
private static Logger logger = LogManager.getLogger("HelloLog4j");
public static void main(String[] args) {
MyApplication myApplication = new MyApplication();
logger.entry();
logger.info("Hello, World!");
myApplication.doIt();
logger.error("Hello, World!");
logger.exit();
}
}
需要注意的是,
classpath 下名为log4j-test.json 或者log4j-test.jsn 文件classpath 下名为log4j2-test.xml classpath 下名为log4j.json 或者log4j.jsn 文件classpath 下名为log4j2.xml
Logger 配置
<?xml version="1.0" encoding="UTF-8"?>
<!-- status=debug 可以查看log4j的装配过程 -->
<configuration status="off" monitorInterval="1800">
<properties>
<property name="LOG_HOME">/log/fish</property>
<!-- 日志备份目录 -->
<property name="BACKUP_HOME">{LOG_HOME}/backup</property>
<property name="STAT_NAME">stat</property>
<property name="SERVER_NAME">global</property>
</properties>
<appenders>
<!-- 定义控制台输出 -->
<Console name="Console" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
</Console>
<!-- 程序员调试日志 -->
<RollingRandomAccessFile name="DevLog" fileName="${LOG_HOME}/${SERVER_NAME}"
filePattern="${LOG_HOME}/${SERVER_NAME}.%d{yyyy-MM-dd-HH}.log">
<PatternLayout pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingRandomAccessFile>
<!-- 游戏产品数据分析日志 -->
<RollingRandomAccessFile name="ProductLog"
fileName="${LOG_HOME}/${SERVER_NAME}_${STAT_NAME}"
filePattern="${LOG_HOME}/${SERVER_NAME}_${STAT_NAME}.%d{yyyy-MM-dd-HH}.log">
<PatternLayout
pattern="%date{yyyy-MM-dd HH:mm:ss.SSS} %level [%thread][%file:%line] - %msg%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1"
modulate="true" />
</Policies>
</RollingRandomAccessFile>
</appenders>
<loggers>
<!-- 3rdparty Loggers -->
<logger name="org.springframework.core" level="info">
</logger>
<logger name="org.springframework.beans" level="info">
</logger>
<logger name="org.springframework.context" level="info">
</logger>
<logger name="org.springframework.web" level="info">
</logger>
<logger name="org.jboss.netty" level="warn">
</logger>
<logger name="org.apache.http" level="warn">
</logger>
<logger name="com.mchange.v2" level="warn">
</logger>
<!-- Game Stat logger -->
<logger name="com.u9.global.service.log" level="info"
additivity="false">
<appender-ref ref="ProductLog" />
</logger>
<!-- Root Logger -->
<root level="DEBUG" includeLocation="true">
<appender-ref ref="DevLog" />
<appender-ref ref="Console" />
</root>
</loggers>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="OFF">
<appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</appenders>
<loggers>
<logger name="com.relin.HelloLog4j" level="error" additivity="false">
<appender-ref ref="Console"/>
</logger>
<root level="trace">
<appender-ref ref="Console"/>
</root>
</loggers>
</configuration>
此时,
<loggers>
<logger name="com.mvc.login" level="info" additivity="false">
<appenderRef ref="LoginController" level="error"/>
<appenderRef ref="InfoController" level="info"/>
</logger>
</loggers>