log4j2基础入门(超详细)
一.导包
(1)到官网下载log4jar包 https://logging.apache.org/log4j/2.x/download.html
(2)将下载的.zip(windows中)加压,并将
- log4j-api-×××.jar
- log4j-core-×××.jar
导入项目中,并BuildPath
二.调用
(1)log4j的级别
log4j规定了默认的几个级别:all<trace<debug<info<warn<error<fatal<off (off是最高等级,即关闭所有日志记录;all是最低等级,即打开所有日志记录)
| Level | 描述 |
|---|---|
| ALL | 各级包括自定义级别 |
| DEBUG | 指定细粒度信息事件是最有用的应用程序调试 |
| ERROR | 错误事件可能仍然允许应用程序继续运行 |
| FATAL | 指定非常严重的错误事件,这可能导致应用程序中止 |
| INFO | 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息 |
| OFF | 这是最高等级,为了关闭日志记录 |
| TRACE | 指定细粒度比DEBUG更低的信息事件 |
| WARN | 指定具有潜在危害的情况 |
(2)log4j测试
导包后测试一下log4j。
代码如下:
public class Log4jTest { private static Logger logger = LogManager.getLogger(Log4jTest.class.getName()); public static void main(String[] args) { logger.trace("entry"); //trace级别的信息,和logger.entry() 基本一个意思,但已经过时 logger.debug("我是debug信息"); logger.info("我是info信息"); logger.warn("我是warning信息"); logger.error("我是error信息"); logger.fatal("我是fatal信息"); logger.trace("exit");// //和entry()对应的结束方法,和logger.exit()一个意思,同样已经过时 } }
输出信息:
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. Set system property 'log4j2.debug' to show Log4j2 internal initialization logging. 09:48:26.531 [main] ERROR com.sp.test.Log4jTest - 我是error信息 09:48:26.533 [main] FATAL com.sp.test.Log4jTest - 我是fatal信息
结果只输出了error和fatal的信息,并且给出了原因,原因就是:没有找到log4j2的配置文件,便使用了默认的配置,仅仅显示error及以上级别的日志。那么,我们便需要创建一个配置文件,并且log4j2默认会在classpath目录下寻找log4j.json、log4j.jsn、log4j2.xml等名称的文件
在src下创建log4j2.xml文件
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"></PatternLayout> </Console> </Appenders> <Loggers> <Root level="error">//此处级别 <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration>
再次运行,显示:
10:15:17.001 [main] ERROR com.sp.test.Log4jTest - 我是error信息
10:15:17.004 [main] FATAL com.sp.test.Log4jTest - 我是fatal信息
没有了第一行的没有找到配置文件的信息,说明配置文件已经找到,但是还是只显示error和fatal的输出信息,那是因为配置文件中的level设置的是error---和默认配置中的一样,现在改成trace则我们写的代码中要输出的日志信息全部打印出来:
10:18:37.898 [main] TRACE com.sp.test.Log4jTest - entry
10:18:37.901 [main] DEBUG com.sp.test.Log4jTest - 我是debug信息
10:18:37.901 [main] INFO com.sp.test.Log4jTest - 我是info信息
10:18:37.901 [main] WARN com.sp.test.Log4jTest - 我是warning信息
10:18:37.901 [main] ERROR com.sp.test.Log4jTest - 我是error信息
10:18:37.901 [main] FATAL com.sp.test.Log4jTest - 我是fatal信息
10:18:37.901 [main] TRACE com.sp.test.Log4jTest - exit
另,对log4j.xml的PatternLayout 节点中的pattern属性的解释如下:
%d{HH:mm:ss.SSS} 表示输出到毫秒的时间(.SSS即是毫秒)
%t 输出当前线程名称
%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补空格
%logger 输出logger名称,因为Root Logger没有名称,所以没有输出
%msg 日志文本
%n 换行
其他常用的占位符有:
%F 输出所在的类文件名,如Client.java
%L 输出行号
%M 输出所在方法名
%l 输出语句所在的行数, 包括类名、方法名、文件名、行数
(3)自定义Appender及logger
1.log4j2.xml在loggers节点下新建一个logger 2.在Appenders节点下新建一个File(将日志输出到文件)
添加以后log4j2.xml代码如下:
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"></PatternLayout> </Console> <File name="myFile" fileName="./mylog.log"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"></PatternLayout> </File> </Appenders> <Loggers> <logger name="mylogger" level="info" additivity="false"> <AppenderRef ref="Console"/> </logger> <Root level="trace"> <AppenderRef ref="myFile"/> </Root> </Loggers> </Configuration>
在测试类中测试新的logger
public class Log4jTest { private static Logger myLogger = LogManager.getLogger("myLogger");//此处mylogger即为xml文件中的mylogger public static void main(String[] args) { myLogger.trace("entry"); //trace级别的信息,和logger.entry() 基本一个意思,但已经过时 myLogger.debug("我是debug信息"); myLogger.info("我是info信息"); myLogger.warn("我是warning信息"); myLogger.error("我是error信息"); myLogger.fatal("我是fatal信息"); myLogger.trace("exit");// //和entry()对应的结束方法,和logger.exit()一个意思,同样已经过时 } }
由于myFile中的fileName设置的路径为当前目录下,查看项目所在文件夹,发现已经自动创建了一个mylog文件并写入了log信息

参考博客:https://www.cnblogs.com/sa-dan/p/6837225.html
http://blog.csdn.net/moonpure/article/details/51034656
http://blog.csdn.net/duruiqi_fx/article/details/52689130

浙公网安备 33010602011771号