个人学习 Log4j总结--什么是Log4j

提示:小白学习积累


前言

提示:以下是本篇文章正文内容,解决方案均亲测有效,案例仅供参考:

一、Lo4j

1.1 什么是Log4j

Log4j 是Apache为Java提供的日志管理工具。他与System.out.println()的作用相似,用来跟踪、调试、维护程序。

在没有这个插件以前,我们为了调试程序,总是需要在程序使用System.out.println()来输出一些信息,来检查以确保自己的某些内容是否正确。

1.2 Log4j的核心概念

Log4j中有三大组件:日志器(Logger)、日志输出目标(Appender)、格式化器(Layout)

1、Logger:用来输出日志消息的类,它可以输出不同级别的消息,例如错误消息、警告消息等;

2、Appender;通常我们希望日志输出到文件中,以及控制台,也可能希望日志输出数据库,该类就表示一个输出的目标;

3、Layout:对输出的消息进行格式化,例如在消息中添加日期,以及级别等。

1.3 为什么要用Log4j

在学习MyBatis 增删改查的过程中,会出现SQL语句编写错误的情况,为了在运行的过程中,看到包括SQL语句在内的整个项目的执行流程,所以今天接触了Log4j,并且对其进行了进一步的学习和了解。

二、使用Log4j流程

本次使用Log4j是在MyBatis增删改查的过程中,具体的使用流程如下:

2.1 Log4j maven依赖配置

我创建的是Maven项目,所以直接在父工程的pom.xml中导入Log4j依赖即可自动下载导入。本篇MyBatis项目,如若想要全部代码,可移步【个人学习 MyBatis 问题及解决方法总结】进行学习。https://blog.csdn.net/junR_980218/article/details/123994912

 <!--日志 start-->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.25</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.25</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.25</version>
            <scope>test</scope>
        </dependency>
        <!--日志end-->

在这里插入图片描述

也可进行手动导入相关jar包,可参考:
https://zhuanlan.zhihu.com/p/134209984

2.2 Log4j配置文件

src目录下,创建 log4j.prooerties文件,并在其中添加如下内容:

# Global logging configuration 开发时候建议使用 debug
log4j.rootLogger=DEBUG, stdout
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

在这里插入图片描述

2.3 测试

UserMapperTest.java测试类中编写测试内容,查看log4j的使用是否成功

UserMapperTest.java

@Test
    public void getUserById01(){
        //第一步:获得sqlSession对象
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        //获得当前绑定的接口  获得接口以后,返回接口,mapper就是具体的对象
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);

        Map<String,Object> map = new HashMap<String,Object>();
        //map.put("userid",1);
        map.put("name","张三");
        User user = mapper.getUserById01(map);

        System.out.println(user);
        //关闭SqlSession
        sqlSession.close();

    }

2.4 测试结果

可以从下面的截图中看到SQL语句的执行以及项目其他部分执行的过程,至此,Log4j学习完成,设置成功。
在这里插入图片描述

三、出现错误总结

3.1 查看可扫描到的配置文件范围

在这里插入图片描述
这一步在导入别人项目的过程中非常重要,防止自己创建的配置文件不在扫描范围内,出现读不到的情况

3.2 SLF4J: Class path contains multiple SLF4J bindings.

错误提示:

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/E:/Program%20Files/apache-maven-3.6.1/repository/org/slf4j/slf4j-log4j12/1.7.25/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/E:/Program%20Files/apache-maven-3.6.1/repository/org/slf4j/slf4j-simple/1.7.25/slf4j-simple-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]

详情截图:
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。通过研究发现,是Log4j依赖出来了问题,在父工程中添加了log4j、rg.slf4j等依赖,出现了依赖冲突:jar包冲突,slf4j就是所谓的门面模式,提供了一个接口,自己不去实现,让其他日志jar包去实现这个接口。logback、log4j什么的,都有实现这个接口,但运行的时候,必须保证只能有一个接口实现类,如果有两个或以上,就抛上面那个异常了。做下依赖排除就行了,有的时候是其他包里面引进了日志包,不是你自己引进的。
解决办法
鉴于大多数模块,都有实现这个接口,那么要做的就是,保证只有一个实现就可以了。其他的排除掉就可以了,对于maven,只需要将原来添加在父工程pom.xml文件中日志相关的依赖删除,只剩下log4j依赖就可以了

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

在这里插入图片描述
具体也可参考:https://feeler.blog.csdn.net/article/details/52267203?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1.pc_relevant_default&utm_relevant_index=1
注意:
maven具有缓存功能,修改配置文件或者多次云心错误以后,记得清理一下maven项目,防止缓存记忆使得配置文件的修改无用。
在这里插入图片描述

总结

你说 1*365 等于几?
积累学习过程中的每一个小错误,终究会达到自己的目标
一起加油呀~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值