注意:本篇文章是以log4j2.x 为例的,并不是log4j 1.x
log4j 就是log for java , log4j已经被移植到了C,C++,C#,Perl,Python和Ruby等语言中
一.首先下载去官网下载log4j的jar 包
http://logging.apache.org/log4j/2.x/download.html
一般来说:Source是源代码版,你需要自己编译成可执行软件。
Binary是可执行版,直接可以拿来用的,他已经给你编译好的版本
二.下载后解压,找到log4j-core-2.11.1.jar 和log4j-api-2.11.1.jar 这两个jar包,主要是这两个包
三.打开eclipse,新建最简单的java project
然后右键项目Bulid Path---->Confirgure Bulid Path ---->Libraries---->Add External JARs,选择两个主要的jar包
可以看到,加入jar包后 ,会自动添加一个Referenced Libraries的目录,既“引用的库”,里面就是加入的两个包
四.在src下新建配置文件log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="error">
<!-- 先定义所有的appender -->
<appenders>
<!-- 这个输出控制台的配置 -->
<Console name="Console" target="SYSTEM_OUT">
<!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
<ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 这个都知道是输出日志的格式 -->
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</Console>
<!-- 文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用 -->
<!-- append为TRUE表示消息增加到指定文件中,false表示消息覆盖指定的文件内容,默认值是true -->
<File name="log" fileName="log/test.log" append="false">
<PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
<!-- 添加过滤器ThresholdFilter,可以有选择的输出某个级别以上的类别 onMatch="ACCEPT" onMismatch="DENY"意思是匹配就接受,否则直接拒绝 -->
<File name="ERROR" fileName="logs/error.log">
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
<PatternLayout pattern="%d{yyyy.MM.dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
</File>
<!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
<RollingFile name="RollingFile" fileName="logs/web.log"
filePattern="logs/$${date:yyyy-MM}/web-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd 'at' HH:mm:ss z} %-5level %class{36} %L %M - %msg%xEx%n"/>
<SizeBasedTriggeringPolicy size="2MB"/>
</RollingFile>
</appenders>
<!-- 然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
<loggers>
<!-- 建立一个默认的root的logger -->
<root level="trace">
<appender-ref ref="RollingFile"/>
<appender-ref ref="Console"/>
<appender-ref ref="ERROR" />
<appender-ref ref="log"/>
</root>
</loggers>
</configuration>
五.在src下新建一个package----log4j_test , 在log4j_test包下新建一个测试类common.java
package log4j_test;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class common {
private static Logger logger = LogManager.getLogger(common.class.getName());
public static void main(String[] args) throws Exception {
// 记录debug级别的信息
logger.debug("This is debug message.");
// 记录info级别的信息
logger.info("This is info message.");
// 记录error级别的信息
logger.error("This is error message.");
}
}
至此已经搭建完毕,项目结构图如下:
最后:运行程序,可以看到console窗口输出:
我们打开workspace,项目目录下,查看会发现多了两个文件夹 log,logs,里面会有test.log,web.log,error.log这几个文件,都是xml文件配置后自动输出的结果:
常见报错:
LogManger找不到类似的,应该都是包导入错误,应该是log4j2.x的版本,不要弄错
简单说下log4j和log4j2的区别
1.log4j的配置文件是log4j.properties,而log4j2的配置文件变成了log4j2.xml格式的
2.log4j的只需引入一个jar包 log4j.1.x.xx.jar, 而log4j2则需要两个 log4j.core.xxx.jar和log4j.api.xxx.jar
3.调用方式不一致:
log4j:
import org.apache.log4j.Logger;
private final Logger LOGGER = Logger.getLogger(Test.class.getName());
log4j2:
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
private static Logger logger = LogManager.getLogger(Test.class.getName());
4.文件渲染:
log4j想要生效,我们需要在web.xml中进行配置,而log4j2则不需要,只需要配置好log4j2.xml即可
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener> <context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath:config/log4j.properties</param-value>
</context-param>
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
详细的区别可参考:www.cnblogs.com/williamjie/p/9197738.html
未完待续.......