如果要使用Log4j,需要做一些配置,分3各步骤,
1. 建立log4j的配置文件,比如log4j.proiperties:
log4j.rootLogger=debug, A1 , R
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm} [%c]-[%p] %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=c:\\q\\qqqq.log
log4j.appender.R.MaxFileSize=100KB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n
这些配置使得Log4j往Console和文件输出Log信息。Log4j的详细配置,请参考apache的Log4j文档。
2. 建立commons-logging的配置文件,commons-logging.properties:
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
org.apache.commons.logging.impl.Log4jFactory是commons-logging为了log4j所实现的一个LogFactory派生类。
3. 在代码中写上:
//Log log = LogFactory.getLog(SimpleExample.class);
Log log=LogFactory.getLog(...);
然后就可以使用log直接写日志信息了,比如
log.debug(“...“)
log.error(“...“);
...
注意:这两个配置文件和相关JAR文件都必须在ClassPath下。
Log4j由三个重要的组件构成:日志信息的优先级,日志信息的输出目的地,日志信息的输出格式。日志信息的优先级从高到低有ERROR、WARN、INFO、DEBUG,分别用来指定这条日志信息的重要程度;日志信息的输出目的地指定了日志将打印到控制台还是文件中;而输出格式则控制了日志信息的显示内容。
一、 定义配置文件
Log4j支持两种配置文件格式,一种是Java特性文件(properties格式的属性文件),一种是XML格式的文件。
1. 以Java特性文件(properties格式的属性文件)做为配置文件
Java特性文件也位于WEB-INF/classes目录下,下面是一个Java特性文件(properties格式的属性文件)的例子:
# For JBoss: Avoid to setup log4j outside $JBOSS_HOME/server/default/deploy/log4j.xml # For all other servers: Comment out the Log4J listener in web.xml too
log4j.configuration=log4j.properties
log4j.rootCategory=info, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n
log4j.appender.logfile=org.apache.log4j.RollingFileAppender log4j.appender.logfile.File=D:/temp/SpringMVC.log log4j.appender.logfile.MaxFileSize=512KB # Keep three backup files log4j.appender.logfile.MaxBackupIndex=3 log4j.appender.logfile.layout=org.apache.log4j.PatternLayout # Pattern to output: date priority [category] - <message>line_separator log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - <%m>%n
#log4j.logger.com.opensymphony.oscache=ERROR #log4j.logger.net.sf.navigator=ERROR #log4j.logger.org.apache.commons=ERROR #log4j.logger.org.apache.struts=WARN #log4j.logger.org.displaytag=ERROR log4j.logger.org.springframework=WARN #log4j.logger.com.ibatis.db=WARN |
当Tomcat服务器启动时自动加载.properties配置文件。
其中,
log4j.configuration=log4j.properties 是指定配置文件的名字。
log4j.rootCategory= [ level ] , appenderName, appenderName, … 是配置根Logger。
level 是日志记录的优先级,分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来,默认日志级别是ERROR;appenderName就是指定Appender组件,确定日志输出目的地。如上例:log4j.rootCategory=info, stdout, logfile 配置根Logger的级别是INFO,日志输出的目的地是stdout, logfile。 |
log4j.appender. appenderName =org.apache.log4j.ConsoleAppender是配置日志信息输出目的地Appender。
Log4j提供的appender有以下几种: |
log4j.appender.appenderName.layout=org.apache.log4j.PatternLayout 配置日志信息的格式(布局)
Log4j提供的layout有以下几种: |
log4j.appender. appenderName.layout.ConversionPattern=%d %p [%c] - <%m>%n 是设置打印格式格式化日志信息。
打印参数如下: %m 输出代码中指定的消息 %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL |
如果log4j.appender. appenderName 属性配置的日志输出目的地是一个文件是,还有以下属性:
log4j.appender. appenderName.File=D:/temp/SpringMVC.log 配置日志文件的名称。即存放日志的文件。 log4j.appender. appenderName.MaxFileSize=512KB 配置日志文件的大小,最大可以设置为10M。 log4j.appender. appenderName.MaxBackupIndex=3 配置可有日志文件的个数。 |
Log4j.logger<.logger.name>= level 指定Logger.name这个记录器的级别。即,logger只输出这个级别或高出这个级别的日志。如:
log4j.logger.org.springframework=WARN 是配置Logger只输出关于org.springframework的WARN级别的日志和ERROR和FATAL级别的日志。 log4j.logger.org.displaytag=ERROR 是配置Logger只输出关于displaytag的ERROR 和FATAL级别的日志。 |
如果将日志以邮件的形式发送出去时得有以下属性:
log4j.appender.mail=org.apache.log4j.net.SMTPAppender 配置日志输出目的地是电子邮箱 log4j.appender.mail.To= lmbussiness@hotmail.com 设置日志将要输出到的电子邮箱 log4j.appender.mail.From=localhost@raibledesignes.com 设置发送日志信息的电子邮箱 log4j.appender.mail.SMTPHost=localhost 设置运行SMTP守护程序的主机的IP地址名称 log4j.appender.mail.Threshold=ERROR 设置记录日志的最低级别 log4j.appender.mail.BufferSize=1 设置写邮件的缓存大小 log4j.appender.mail.Subject=[localhost]dlhitech Application Error 设置电子邮件标题 |
如果将日志输出到数据库日志表时有以下属性:
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender 配置日志输出目的地是数据库 |
2.以XML格式的文件作为配置文件
下面是一个XML格式的文件作为配置文件的例子:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="ConsoleAppender" class="org.apache.log4j.ConsoleAppender"> <param name="threshold" value="error"/> <layout class="org.apache.log4j. PatternLayout"> <param name="Conversion" value="%d{(yyyy年MM月dd日-HH時mm分ss秒)} %p [%c] - <%m>%n "/> </layout> </appender>
<appender name="rollingFile.log" class="org.apache.log4j.RollingFileAppender"> <param name="File" value=" D:/temp/SpringMVC.log " /> <param name="threshold" value="info"/> <param name="Append" value="false" /> <param name="MaxBackupIndex" value="2" /> <param name="MaxFileSize" value="1024" /> <layout class="org.apache.log4j.PatternLayout" > <param name=" ConversionPattern " value="%d [%t] %p - %m%n" /> </layout> <!-- 实现过滤功能,用这个标签,当往这个指定文件记录日志时只记录指定级别的日志,别的不记录 。 Filter标签只能在xml配置文件好用,在.properties属性文件中不好用--> <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="LevelMin" value="ERROR"/> <param name="LevelMax" value="ERROR"/> <param name="acceptOnMatch" value="TRUE"/> </filter> </appender> <!—封装apache ,这样,可以在java程序中的 Category cat2 = Category.getInstance("your.category.name"); 来进行输出日志--> <category name="org.apache"> --设置封装的名称 <priority value="info" /> --输出指定级别的日志 <appender-ref ref="aplog"/> --设置输出的目的地 </category> <root> <level value ="debug" /> <appender-ref ref="ConsoleAppender"/> <appender-ref ref=" rollingFile.log "/> <!-- 经过过滤只记录error级别的日志 --> </root> </log4j:configuration> |
二.调用Log4j来输出日志
通过访问通用日志接口和在java程序手动打开配置文件都可以进行日志的输出。其中,通过访问通用日志接口来指定日志器时,Log4j的配置文件只能是java特定文件(.properties属性文件)。
1.通过访问通用日志接口来输出日志
当Tomcat服务器启动时,通用日志接口从名为“commons-logging.properties”的属性文件中获取实现日志接口日志器信息,这个文件位于WEB-INF/classes目录下。“commons-logging.properties”属性文件的内容:
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JCategoryLog
|
当Tomcat服务器运行时,通用日志接口会检索commons-logging.properties文件,并且实例化由“org.apache.commons.logging.Log”属性指定的日志实现例。上面给的日志器是Log4J日志器。
Tomcat服务器会自动加载.properties配置文件。
调用Log4j输出日志 如下例:
import org.apache.commons.logging.Log;
public class Test{ public static void main(args[] String){ Log logger = LogFactory.getLog(“test”); logger.info("开始操作"); int a = 5; int b = 6; System.out.println(a+b); logger.info("操作完毕"); } } |
2.手动打开配置文件输出日志
程序员用手动打开配置文件来输出日志时,得先打开配置文件然后才能进行输出日志操作。由于Log4J的配置文件可以是java特性文件(.properties属性文件)和.xml文件,所以打开配置文件的方式就不相同。当配置文件是java特性文件(.properties属性文件)时,打开配置文件的方法是:
PropertyConfigurator.configure ( String configFilename);
|
当配置文件是.xml文件时,打开配置文件的方法是:
DOMConfigurator.configure ( String filename );
|
当打开配置文件后,配置文件就一直打开着,所以配置文件就打开一遍就可以了。
打开配置文件后,构造Logger对象然后输出日志信息,以配置文件是.xml文件为例,输出信息实例如下:
import org.apache.log4j.Logger; import org.apache.log4j.xml.DOMConfigurator; public class Test{ public static void main(args[] String){ DOMConfigurator.configure ( String filename ); Logger logger = Logger.getRootLogger(); logger.info("开始操作"); int a = 5; int b = 6; System.out.println(a+b); logger.info("操作完毕"); } } |
2.不通过配置文件手动输出日志
使用Log4J来输出日志不一定非得通过配置文件来输出日志,也可以不通过配置文件来输出日志,手动在程序中创建Appender、Layout等对象,只不过这样做会在java程序用留下很大的代码量。下面是一个不通过配置文件手动输出日志的实例,程序实现了PatternLayout和FileAppender:
import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.SimpleLayout; import org.apache.log4j.FileAppender; public class simpandfile { static Logger logger = Logger.getLogger(simpandfile.class); public static void main(String args[]) { String pattern = "Milliseconds since program start: %r %n"; pattern += "Classname of caller: %C %n"; pattern += "Date in ISO8601 format: %d{ISO8601} %n"; pattern += "Location of log event: %l %n"; pattern += "Message: %m %n %n"; PatternLayout layout = new PatternLayout(pattern); FileAppender appender = null; try { appender = new FileAppender(layout,"output1.txt",false); } catch(Exception e) {} logger.addAppender(appender); logger.setLevel((Level) Level.DEBUG); logger.debug("Here is some DEBUG"); logger.info("Here is some INFO"); logger.warn("Here is some WARN"); logger.error("Here is some ERROR"); logger.fatal("Here is some FATAL"); } } |