classpath下名为 log4j2.xml 这句话是什么意思
那个就是要配置的文件名称啊
配置log4j2.xml
实现用Log4j2来打印Mybatis的SQL很简单,先配置一个name为consolePrint的附加器,指定输出格式
然后在loggers下配置一个logger,name指向项目持久层接口的package,也就是和Mybatis配置文件对应的接口包,再定义输出方式就可以了
<?xml version="1.0" encoding="UTF-8"?> <!-- 将业务dao接口填写进去,并用控制台输出即可 -->
这里要注意,如果将level定义为DEBUG则只会打印出SQL语句,SQL参数以及结果条数,例如下面
23:02:58 [http-apr-8090-exec-17] DEBUG com.amayadream.freemarker.dao.IPhysicalDao.showColumns - ==> Preparing: select t.column_name, nvl(c.comments, t.column_name) as comments, t.data_type, t.data_length, t.data_precision, t.data_scale, nullable from user_tab_columns t left join user_col_comments c on c.table_name = t.table_name and c.column_name = t.column_name where t.table_name = ? 23:02:58 [http-apr-8090-exec-17] DEBUG com.amayadream.freemarker.dao.IPhysicalDao.showColumns - ==> Parameters: WEBCHAT_LOG(String) 23:02:58 [http-apr-8090-exec-17] DEBUG com.amayadream.freemarker.dao.IPhysicalDao.showColumns - <== Total: 6
如果将level定义为TRACE则会打印出SQL语句,SQL参数以及结果集还有结果条数,例如下面:
23:00:36 [http-apr-8090-exec-11] DEBUG com.amayadream.freemarker.dao.IPhysicalDao.showColumns - ==> Preparing: select t.column_name, nvl(c.comments, t.column_name) as comments, t.data_type, t.data_length, t.data_precision, t.data_scale, nullable from user_tab_columns t left join user_col_comments c on c.table_name = t.table_name and c.column_name = t.column_name where t.table_name = ? 23:00:36 [http-apr-8090-exec-11] DEBUG com.amayadream.freemarker.dao.IPhysicalDao.showColumns - ==> Parameters: WEBCHAT_LOG(String) 23:00:36 [http-apr-8090-exec-11] TRACE com.amayadream.freemarker.dao.IPhysicalDao.showColumns - <== Columns: COLUMN_NAME, COMMENTS, DATA_TYPE, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, NULLABLE 23:00:36 [http-apr-8090-exec-11] TRACE com.amayadream.freemarker.dao.IPhysicalDao.showColumns - <== Row: ID, 日志编号, VARCHAR2, 32, null, null, N 23:00:36 [http-apr-8090-exec-11] TRACE com.amayadream.freemarker.dao.IPhysicalDao.showColumns - <== Row: USERID, 用户名, VARCHAR2, 32, null, null, N 23:00:36 [http-apr-8090-exec-11] TRACE com.amayadream.freemarker.dao.IPhysicalDao.showColumns - <== Row: TIME, 时间, VARCHAR2, 32, null, null, Y 23:00:36 [http-apr-8090-exec-11] TRACE com.amayadream.freemarker.dao.IPhysicalDao.showColumns - <== Row: TYPE, 类型, VARCHAR2, 32, null, null, Y 23:00:36 [http-apr-8090-exec-11] TRACE com.amayadream.freemarker.dao.IPhysicalDao.showColumns - <== Row: DETAIL, 详情, VARCHAR2, 300, null, null, Y 23:00:36 [http-apr-8090-exec-11] TRACE com.amayadream.freemarker.dao.IPhysicalDao.showColumns - <== Row: IP, ip地址, VARCHAR2, 32, null, null, Y 23:00:36 [http-apr-8090-exec-11] DEBUG com.amayadream.freemarker.dao.IPhysicalDao.showColumns - <== Total: 6
log4j这个打印日志的jar,对应的配置文件
log4j.rootLogger=DEBUG,Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p: %c#%M %x: %m%n
log4j.logger.net.sf.ehcache=ERROR
log4j.logger.org.springframework.security=ERROR
log4j.logger.org.apache.myfaces.shared_impl.renderkit.html=ERROR
log4j.logger.org.hibernate=ERROR
log4j.logger.org.springframework=ERROR
log4j.logger.com.newer=DEBUG
log4j.logger.com.newer.mapper=DEBUG
log4j.logger.org.apache.struts2.json=ERROR
log4j.logger.java.sql.Connection=ERROR
log4j.logger.java.sql.Statement=ERROR
log4j.logger.org.apache.ibatis=ERROR
是在web.xml里配置
我们使用log4j2一般做法是将log4j2.xml文件放在资源文件夹根目录。对于有强迫症的开发者来说,我更喜欢在资源文件夹下新建包或文件夹,然后把配置文件放在里面。本博客将介绍如何自定义log4j2.xml文件的位置和文件名。
web.xml配置
edu.example.holder.system.Log4j2ConfigListener 日志配置文件的路径 log4j.configurationFile log4j/log4j2.xml
Log4j2ConfigListener类是自定义的类,实现ServletContextListener接口,这样tomcat启动时可以更改日志配置文件的默认路径和文件名。
生效配置文件
package edu.example.holder.system; import java.util.Enumeration; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import org.apache.logging.log4j.core.config.Configurator; public class Log4j2ConfigListener implements ServletContextListener { private static final String KEY = "log4j.configurationFile"; @Override public void contextDestroyed(ServletContextEvent arg0) { } @Override public void contextInitialized(ServletContextEvent arg0) { String fileName = getContextParam(arg0); Configurator.initialize("Log4j2", "classpath:" + fileName); } @SuppressWarnings("unchecked") private String getContextParam(ServletContextEvent event) { Enumeration names = event.getServletContext().getInitParameterNames(); while (names.hasMoreElements()) { String name = names.nextElement(); String value = event.getServletContext().getInitParameter(name); if(name.trim().equals(KEY)) { return value; } } return null; } }
日志配置文件实例
${sys:catalina.home}/WebAppLogs/SSHExample %5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n %5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n %5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n %5p [%t] %d{yyyy-MM-dd HH:mm:ss} (%F:%L) %m%n