log4j的使用及其原理

log4j的简单使用方法

我的项目是mvn,ssm环境,需要debug环境下mybatis执行sql时打印对应sql和参数

1mvn引入相关包,在pom.xml中加入如下配置:

		log4jlog4j1.2.17

2log4j.properties文件所在位置和内容

位置如下:

内容如下:

log4j.rootLogger=INFO,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[%p] %d{yyyy-MM-dd HH:mm:ss} %l: %m%n#此处com包,会包含com及其子目录下的所有命名空间
#log4j.logger.com=debug#推荐写法如下,对应与mapper.xml中的namespace对应的命名空间:
log4j.logger.com.ruisitech.bi.mapper.bireport=debuglog4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
#log4j.logger.com.bonc.ext.engine = DEBUG, a2#log4j.appender.a2=org.apache.log4j.FileAppender
#log4j.appender.a2.layout=org.apache.log4j.PatternLayout
#log4j.appender.a2.layout.ConversionPattern=[%p] %d{yyyy-MM-dd HH:mm:ss} %l: %m%n
#log4j.appender.a2.File=E\:example.log
#log4j.appender.a2.MaxFileSize= 100KB

有一点特别说明下:

log4j.logger.com.ruisitech.bi.mapper.bireport=debug中的om.ruisitech.bi.mapper.bireport是mapper.xml中的命名空间 ,如:

com.ruisitech.bi.mapper.bireport 需要修改成你自己的命名空间,否则不会生效!!!!!
 

上面别的配置的含义可以参考:https://www.cnblogs.com/tengqiuyu/p/7535373.html和

http://www.cnblogs.com/ITtangtang/p/3926665.html

3在debug模式下启动web项目,会发现执行的时候会答应对应的sql了,效果如下图:

4在java文件中使用

import org.apache.log4j.Logger;/*** @author:mazhen* @date:2018/10/31 11:31:* @description:*/
public class LoggerTest {static Logger logger = Logger.getLogger ( LoggerTest.class ) ;public static void main(String[] args) {logger.debug("Debug ...");logger.info("Info ...");logger.warn("Warn ...");logger.error("Error ...");}}

logger.info("错误"+e);和logger.info("错误",e);的区别

代码如下:

try {int status = 5;int stau = 0;stau = 2/stau;} catch (Exception e) {
//            e.printStackTrace();logger.info("错误"+e);System.out.println("---------");System.out.println("错误"+e);System.out.println("---------");logger.info("错误",e);} 

执行结果如下:

明显发现 :logger.info("错误",e);方式才能正确打印异常堆栈信息。

log4j.properties为什么无需在web.xml等配置文件中引入?

其他地方并没有配置读取log4j配置文件,但程序运行后log4j配置文件会自动起作用。下图展示的是apache.log4j.java

可以看出在Logger中通过LogManager获取Logger对象,LogManager.java代码如下:

上图红色框中显示LogManager的静态代码块中会先查找程序中有没有override相关功能,如果没有就查找log4j.xml,如果还没有就查找log4j.properties文件,即当我们引用了org.apache.log4j,配置好log4j.xml或者log4j.properties后,可以不用在配置文件中或者程序中再显示地读取log4j的配置文件,在jvm加载LogManager.class时候会执行静态代码块中的查找代码。

图2中Loader.getResource()代码如下:

ClassLoader位于 java.lang包下,是一个重要的Java运行时系统组件,它使用C++编写,负责装载JRE的核心类库。
借鉴:https://blog.csdn.net/yangfengjueqi/article/details/77095235

 

 

log4j别的使用方法

可以参考:https://blog.csdn.net/caomiao2006/article/details/22062001/


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部