log4j的使用及其原理

log4j的简单使用方法

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

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

		<dependency>
		    <groupId>log4j</groupId>
		    <artifactId>log4j</artifactId>
		    <version>1.2.17</version>
		</dependency>

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对应的命名空间:<mapper namespace="com.ruisitech.bi.mapper.bireport.RhJobMapper">
log4j.logger.com.ruisitech.bi.mapper.bireport=debug

log4j.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中的命名空间 ,如:

<mapper namespace="com.ruisitech.bi.mapper.bireport.RhJobMapper">

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/

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值