廖雪峰Java学习笔记 — Java日志
1. JDK Logging
在调试时,反复增删System.out.println()非常麻烦,日志的目的是为了取代System.out.println()。
相比System.out.println(),日志多了一些功能:
- 可以设置输出样式。
- 可以设置输出级别。
- 可以重定向至文件。
- …
在Java标准库中内置了java.util.logging包,但通常一般不用JDK自带的日志包,如下两个日志搭配方案比较流行。
Commons Logging和Log4j。SLF4J和Logback。
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. 参考
-
使用JDK Logging
-
使用Commons Logging
-
使用Log4j
-
使用SLF4J和Logback
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
