tomcat 7,spring 3,mybatis 3 配置log4j日志组件

tomcat,spring,mybatis都内置通用的日志输出框架,可以配合各种具体的日志组件实现来输出日志,而log4j是最常用的日志组件。

tomcat和spring都使用JCL(Jakarta Commons Logging)日志框架,而mybatis貌似是自己实现的日志框架,三者都可以使用常见的日志组件来输出日志。

tomcat 7

tomcat使用JCL日志框架,默认配置使用JDK提供的JUL(java.util.logging)输出tomcat内部日志。也可以配置使用log4j来输出tomcat内部日志
注意这里是配置tomcat自身日志的输出,在tomcat上运行的应用程序可以单独配置日志输出组件比如log4j,二者互不影响。

在tomcat上运行的应用程序可以使用以下方式来输出日志:

  • 使用JAVA API java.util.logging

  • 使用servlet规范提供的API javax.servlet.ServletContext.log(…)

  • 使用自己选择的日志组件,比如使用log4j

tomcat控制台输出

当在unix like系统上运行tomcat时,控制台输出被重定向到一个名字可配置的文件中,通常这个文件为catalina.out。因此所有写到System.err/out的输出都被写入这个文件中。包括:

  • 使用java.lang.ThreadGroup.uncaughtException(..)输出的未捕获异常

  • 线程dump

  • 应用程序的System.out/System.err输出,这是不推荐的方式,尽量不要使用,推荐使用日志输出组件

spring 3

spring 3 使用JCL日志框架,可以动态发现可以使用的日志组件,只要将日志组件的jar包扔到classpath路径里面就可以了,如果不使用其他日志组件,则spring 3使用java.util.logging来输出日志。

不过spring工程更倾向于使用SLF4J,历史原因选择了JCL框架。

spring配置使用log4j也比较简单,只要将log4j-x.x.x.jar包放入classpath,然后提供一个配置文件log4j.properties放置在classpath根路径下,比如WEB-INF/classes目录下即可。

spring提供了一个listener来配置log4j,可以设置配置文件路径等相关设置,在web.xml中配置此listener:
[xml]


webAppRootKey
webapp.root



log4jConfigLocation
WEB-INF/log4j.properties


log4jRefreshInterval
3000


org.springframework.web.util.Log4jConfigListener

[/xml]

这里将log4j.properties配置到WEB-INF目录下,方便统一管理应用程序的配置文件

mybatis 3

mybatis 3 也支持使用log4j日志组件,在spring mybatis集成应用程序中,mybatis直接使用spring的log4j设置即可,只要将mybaits相关的日志配置写入共用的配置文件log4j.properties即可。比如对映射器日志设置如下:

log4j.logger.net.openwares.test.mapper = TRACE
甚至可以对映射器里面映射的语句设置日志数据级别
log4j.logger.net.openwares.test.mapper.selectXXX = TRACE

对于独立使用的mybatis,需要在mybatis-config.xml文件中添加:
[xml]







[/xml]
然后将log4j jar包和log4j.properties文件放入classpath。

log4j简单配置

[xml]
#Global configuration
log4j.rootLogger = DEBUG, stdout, logfile

log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %5p [%t] - %m%n

log4j.appender.logfile = org.apache.log4j.FileAppender
log4j.appender.logfile.File = ${webapp.root}/WEB-INF/logs/debug.log
log4j.appender.logfile.layout = org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern = %5p [%t] - %m%n

#Spring config
#log4j.logger.org.springframewaork = DEBUG

#Mybatis config
#log4j.logger.org.apache.ibatis = DEBUG
log4j.logger.net.openwares.test.mapper = TRACE

#JDBC config
#log4j.logger.java.sql.Connection = DEBUG
#log4j.logger.java.sql.Statement = DEBUG
#log4j.logger.java.sql.PreparedStatement = DEBUG
#log4j.logger.java.sql.ResultSet = DEBUG

[/xml]

log4j的主要概念就是logger,appender,layout还有logging level。
log4j的详细用法参见官方文档

log4j简单使用
[java]
import org.apache.log4j.Logger;

public class helloLog {
private static Logger logger = Logger.getLogger(helloLog.class.getName());
public void MethodXXX(){
logger.debug(“xxx”);
logger.info(“xxx”);

}
}
[/java]