Java:Log4j

来源:互联网 发布:plc编程 工资高吗 编辑:程序博客网 时间:2024/05/24 02:43

日志是在开发过程中不可缺少的功能。
这里使用了Apache的Log4j作为记录日志的功能。

这里使用了gradle构建工具,gradle地址为:

compile group: 'org.apache.logging.log4j', name: 'log4j-api', version: '2.1'compile group: 'org.apache.logging.log4j', name: 'log4j-core', version: '2.1'

这里使用了IntelliJ IDEA作为IDE,不同IDE之间开发还是有区别的。IntelliJ IDEA确实比其他Java IDE要优秀很多。我们先看看项目结构
这里写图片描述
一定需要新建一个资源文件名。这里的名字叫做resources(名字可以随意取,只是一般来说都会叫做这个名字)。因为只有设置为资源文件,才会和java编译的class文件一起output。
文件的名字也一定要是log4j.properties。因为Logger会主动的去加载这个文件。

先看看log4j.properties。

log4j.rootLogger=DEBUG, stdout, FILElog4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss a}]:%p %l%m%nlog4j.appender.FILE=org.apache.log4j.FileAppenderlog4j.appender.FILE.File=log.txtlog4j.appender.FILE.layout=org.apache.log4j.PatternLayoutlog4j.appender.FILE.layout.conversionPattern=%m%n

这里配置了两种日志输出,一种是DEBUG,还有一种是STDOUT(控制台)。
日志的配置也很简单。就不细说了。

public class MainClass {  private static Logger logger = Logger.getLogger(MainClass.class);  public static void main(String[] args) {    logger.debug("This is debug message.");    logger.info("This is info message.");    logger.error("This is error message.");  }}

编写好了主函数,接着我们就直接运行吧。
控制台输出

[2017-06-22 09:23:30 上午]:DEBUG com.log.MainClass.main(MainClass.java:10)This is debug message.[2017-06-22 09:23:30 上午]:INFO com.log.MainClass.main(MainClass.java:11)This is info message.[2017-06-22 09:23:30 上午]:ERROR com.log.MainClass.main(MainClass.java:12)This is error message.

同时也会新建一个叫做log.txt(log4j.properties配置出来的)的文件的。

This is debug message.This is info message.This is error message.

可以看出文件输出和控制台输出是不一样的。这是因为log4j.properties文件配置的log4j.appender.stdout.layout.ConversionPattern是不一样的。

log4j还有更多的配置功能,基本上只需要查看文档即可,所以说还是比较简单的。

如果运行程序出现

log4j:WARN No appenders could be found for logger *****.log4j:WARN Please initialize the log4j system properly.

那么首先需要查看log4j.properties这个文件是否存在。再看看这个文件是否和class文件一起编译output了。
这里写图片描述
如果一起output了,那么再查看下log4j.properties 这个文件是否为每个rootLogger写了appender。。。