廖雪峰Java学习笔记 — Java日志

1. JDK Logging

在调试时,反复增删System.out.println()非常麻烦,日志的目的是为了取代System.out.println()

相比System.out.println(),日志多了一些功能:

  • 可以设置输出样式。
  • 可以设置输出级别。
  • 可以重定向至文件。

在Java标准库中内置了java.util.logging包,但通常一般不用JDK自带的日志包,如下两个日志搭配方案比较流行。

  • Commons LoggingLog4j
  • SLF4JLogback




2. Commons Logging和Log4j

Commons Logging是一个由Apache创建的第三方日志库。

Commons Logging可以看作是一个日志接口,可以挂载不同的日志实现系统,默认挂载Log4j

接口如下:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;public class Main {public static void main(String[] args) {Log log = LogFactory.getLog(Main.class);log.info("start...");log.warn("end.");}
}

首先使用静态工厂方法LogFactory.getLog获得一个Log实例,然后就可以打印各种级别的日志信息了。

Commons Logging定义了6种日志级别,严重性从高到低如下:

/*** FATAL -> log.fatal(Object arg0) 或 log.fatal(Object arg0, Throwable arg1)* ERROR -> log.error(Object arg0) 或 log.error(Object arg0, Throwable arg1)* WARN  -> log.warn(Object arg0) 或 log.warn(Object arg0, Throwable arg1)* INFO  -> log.info(Object arg0) 或 log.info(Object arg0, Throwable arg1)* DEBUG -> log.debug(Object arg0) 或 log.debug(Object arg0, Throwable arg1)* TRACE -> log.trace(Object arg0) 或 log.trace(Object arg0, Throwable arg1)*/

其中,默认级别是INFO

在开发中,只使用Commons Logging进行调试就已经足够了。

但是在生产时,可能存在如下需求:

  • 需要将一些严重的错误重定向至文件数据库远程PC等。

  • 需要自定义格式化日志信息。

那么就需要搭配Log4j才能实现了,所以Log4j可以看作是日志的低层实现,需要在classpath写一个配置文件log4j2.xml来说明相应级别日志的格式化方式,以及重定向位置等。若需要将日志重定向至数据库或远程服务器,还需要编写相应的实现代码。

由于在开发过程中,通常只需要Commons Logging来打印日志信息进行调试,所以Log4j的具体细节在这里就没有深究了,实际需要时,再进一步学习。



3. SLF4J和Logback

SLF4J可以看作是Commons Logging的升级版,Logback可以看作是Log4j的升级版,它们的用法非常相似。

SLF4J通常搭配Logback进行使用,SLF4J负责API接口,Logback负责底层实现。

SLF4J相比Commons Logging的一个好处是可以格式化字符串。

// Commons Logging
log.info("Set score " + score + " for Person " + p.getName() + " ok.");// SLF4J
logger.info("Set score {} for Person {} ok.", score, p.getName());

SLF4J接口如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class Main {static final Logger logger = LoggerFactory.getLogger(Main.class);public static void main(String[] args) {logger.info("Process end.");logger.warn("end.");}
}

SLF4J定义了5种日志级别,严重性从高到低如下:

/**
* ERROR -> logger.error(Object arg0) 或 logger.error(Object arg0, Throwable arg1) 还有 ...
* WARN  -> logger.warn(Object arg0) 或 logger.warn(Object arg0, Throwable arg1) 还有 ...
* INFO  -> logger.info(Object arg0) 或 logger.info(Object arg0, Throwable arg1) 还有 ...
* DEBUG -> logger.debug(Object arg0) 或 logger.debug(Object arg0, Throwable arg1) 还有 ...
* TRACE -> logger.trace(Object arg0) 或 logger.trace(Object arg0, Throwable arg1) 还有 ...
*/

Logback功能与Log4j类似,需要在classpath写一个配置文件logback.xml来说明相应级别日志的格式化方式,以及重定向位置等。若需要将日志重定向至数据库或远程服务器,还需要编写相应的实现代码。



4. 参考

  1. 使用JDK Logging

  2. 使用Commons Logging

  3. 使用Log4j

  4. 使用SLF4J和Logback


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部