1.Log4j和Log4j2
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。Log4j2也是是Apache的一个开源项目,它改进了Log4j的一些不足。
区别:
(1)配置文件类型的区别
log4j是通过一个.properties的文件作为主配置文件的,而现在的log4j 2则已经弃用了这种方式,采用的是.xml,.json或者.jsn这种方式来做。
(2)导入的jar包不一样
log4j需要导入一个,如:log4j-1.2.17.jar
而log4j需要导入两个核心包,如:log4j-core-2.11.1.jar,log4j-api-2.11.1.jar
(3)Log调用的方式不一样
log4j的调用方式,,如:
import org.apache.log4j.Logger;
private static Logger logger = Logger.getLogger(LogUtil.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(LogUtil.class.getName());
还有其他的区别,如配置文件方式的区别,文件渲染的区别。
2.Log4j2的配置使用
(1)导入两个相关核心jar包
(2)配置log4j2的配置文件
如:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="trace">
<!-- 配置日志信息输出目的地 -->
<Appenders>
<!-- 输出到控制台 -->
<Console name="Console" target="SYSTEM_OUT">
<!--配置日志信息的格式 -->
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<!-- 输出到文件,其中有一个append属性,默认为true,即不清空该文件原来的信息,采用添加的方式,若设为false,则会先清空原来的信息,再添加 -->
<File name="MyFile" fileName="D:/Log4j2.log" append="false">
<PatternLayout>
<!--配置日志信息的格式 -->
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
</File>
</Appenders>
<!-- 定义logger,只有定义了logger并引入了appender,appender才会有效 -->
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="MyFile"/>
</Root>
</Loggers>
</Configuration>
(3)使用示例
LogUtil类,生成Logger
package com.log4j2study.util;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class LogUtil {
private static Logger logger;
private static LogUtil util;
static {
logger = LogManager.getLogger(LogUtil.class.getName());
}
public Logger getLogger() {
return logger;
}
public static LogUtil getInstance() {
if(util==null) {
util = new LogUtil();
}
return util;
}
}
JSP页面中进行测试
<body>
<%
LogUtil.getInstance().getLogger().info("这是info信息");
LogUtil.getInstance().getLogger().warn("这是warn信息");
LogUtil.getInstance().getLogger().error("这是error信息");
%>
</body>
结果:
输出到控制台的内容:
输出到文件中的内容: