log4j简述
Log4j 是Apache的一个Java的日志库,通过使用Log4j,我们可以控制日志信息输送的目的地(控制台、文件、数据库等);我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。
Log4j2简述
Apache Log4j 2
是对 Log4j
的升级,它比其前身Log4j 1.x
提供了重大改进,并提供了Logback
中可用的许多改进,同时修复了Logback
架构中的一些问题。
现在最优秀的Java
日志框架是Log4j2
,没有之一。根据官方的测试表明,在多线程环境下,Log4j2的异步日志表现更加优秀。在异步日志中,Log4j2
使用独立的线程去执行I/O
操作,可以极大地提升应用程序的性能
日志级别
一般日志级别包括:ALL,DEBUG, INFO, WARN, ERROR,FATAL,OFF
Log4J推荐使用:DEBUG, INFO,WARN, ERROR,FATAL
输出级别的种类:
- OFF
- 最高等级的,用于关闭所有日志记录(包括自定义的级别)。
- FATAL
- 指出严重的错误事件将会导致应用程序的退出。(Logback无)。
- RRORE
- 表明出现了系统错误和异常,无法正常完成目标操作。(调用API的方法时有异常抛出,而且异常无法处理并影响业务功能时使用)
- WARN
- 表明会出现潜在错误的情形。(某个不常走到的分支,对于常规的操作是不应该打印WARN日志的,只有在满足某个条件才能走到的分支,且这个分支引起了“警觉”,此时就应该打印WARN日志。)
- INFO
- 在粗粒度级别上突出强调应用程序的运行过程。打印一些重要的信息,这个能够用于生产环境中输出程序运行的一些重要信息。(程序入口相关参数、计算结果)
- DEBUG
- 指出细粒度信息事件,对调试应用程序是非常有帮助的,主要用于开发过程当中打印一些运行信息。
- TRACE
- 用于展现程序执行的轨迹,如函数间的相互调用关系,函数的参数和返回值等现场信息。很低的日志级别,通常不会使用。
- ALL
- 最低等级的,用于打开所有日志记录(包括自定义的级别)。
log4j 和 log4j2 日志的使用
1,在log4j中,Logger对象是通过LogManager类的静态getLogger方法创建的。例如:
import org.apache.log4j.Logger;
import org.junit.Test;
public class test {
@Test
public void test2(){
Logger logger = Logger.getLogger(test.class);
//按照输出级别输出日志
//调试日志
logger2.debug("Debug");
//信息日志
logger.info("info");
//警告日志
logger.warn("warn");
//错误日志
logger.error("error");
//严重错误日志
logger.fatal("fatal");
}
}
运行结果如下:
2,在log4j2中,同样可以使用类似的方式创建Logger对象,但为了支持异步日志记录,推荐使用LogManager类的静态getLogger方法,并将LoggerConfig参数传递给它:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;
public class Demo2 {
protected static final Logger logger = LogManager.getLogger(Main.class);
@Test
public void a(){
logger.trace("trace message");
logger.debug("debug message");
logger.info("info message");
logger.warn("warn message");
logger.error("error message");
logger.fatal("fatal message");
}
}
运行结果如下: