l 什么是log4j?
Log4J 是Apache 的一个开源项目,是一个在我们编写代码过程提供实现日志输出功能的包。Log4J 可以实现通过配置的方式日志输出、日志目的地定义、日志格式定义 等功能,有效的管理日志。在使用Log4J 之前先看一下几个概念:
l log4j 基本概念
在使用Log4j 之前,先看看3 个基本概念:Looger,Appender,PatternLayout
三者关系如下:
图1:Logger,Appender,PatternLayout关系图
1. Logger : 日志输出器,提供输出日志功能。
Log4J 内置了7 中Log 等级,从低到高分别为ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF 。每个Logger 都要默认定义一个等级。同时对于每一条要输出的日志也定义了等级,不同等级的日志用不同的方法调用,共5 种等级(DEBUG, INFO, WARN, ERROR, FATAL), 通过如下方法写出日志:
Logger logger=Logger.getLogger( “logname ”);
logger.info(“…”);
logger.error(“…”);
logger.debug(“…”);
logger.warn(“…”);
logger.fatal(“…”);
如果日志的等级高于等于日志输出器的等级,那么该日志才会被写入。
2.Appender : 日志目的地,用来定义日志目的地对象。
在日志写出之前还必须先定义好日志器对应的日志目的地。一个日志器可以定义多个目的地。日志目的地有多种类型。其结构如下:
图2:Appender结构图
其中Appender 是顶层接口,下面定义了很多种Appender ,几种常见的Appender 解释如下:
ConsoleAppender: 控制台作为日志输出地
FileAppender: 文件作为日志输出地
RollingFileAppender: 日志文件的大小受到限制,当内容超出最大的限制时,该文件将向上滚动。
其他的类型笔者也未曾深入研究。
3.PatternLayout :日志布局,用于定义日志格式。
定义日志布局,指定在日志输出到目的地的时候以怎样的格式被输出。
================================================================================================================
下面具体代码
1.web.xml
<span style="color:#333333;"> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>WEB-INF/log4j.xml</param-value> </span><span style="color:#ff0000;">这个指定了log4j.xml放置的目录</span><span style="color:#333333;"> </context-param> <listener> <listener-class> org.springframework.web.util.Log4jConfigListener </span><span style="color:#ff0000;">一定要加上这个listener</span><span style="color:#333333;"> </listener-class> </listener> </span>
<pre name="code" class="html"><?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> <appender name="debugappender" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="/tmp/log11111.log"/> <param name="MaxFileSize" value="10240KB"/> <param name="MaxBackupIndex" value="50"/> <param name="Encoding" value="UTF-8"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %m (%F:%M:%L)%n"/> </layout> </appender> <appender name = "file.log" class = "org.apache.log4j.FileAppender" > <param name = "File" value = "/tmp/log22222.log" /> <param name = "Append" value = "false" /> <layout class = "org.apache.log4j.PatternLayout" > <param name = "ConversionPattern" value = "%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %m (%F:%M:%L)%n" /> </layout > </appender > <appender name = "console.log" class = "org.apache.log4j.ConsoleAppender" > <layout class = "org.apache.log4j.PatternLayout" > <param name = "ConversionPattern" value = "%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p %m (%F:%M:%L)%n" /> </layout > </appender > <logger name="net.spring.controller"> 这里的name是对应项目包的路径,指定这个包路径下面都用这个logger的配置 <level value="DEBUG" /> <appender-ref ref="file.log" /> 这里指参照file.log这个appender </logger> </log4j:configuration>
import org.apache.log4j.Logger; //用apache下面的Logger @Controller public class HelloWorldController { Logger logger = Logger.getLogger(HelloWorldController.class); @RequestMapping("hello") public String helloWorld() { logger.error("zzzzzzzzzzzzzzzzzzzzzzzzz"); return "helloView"; } }