服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|JavaScript|易语言|

服务器之家 - 编程语言 - JAVA教程 - 详解SSM框架下结合log4j、slf4j打印日志

详解SSM框架下结合log4j、slf4j打印日志

2021-02-23 11:06javaobject JAVA教程

本篇文章主要介绍了详解SSM框架下结合log4j、slf4j打印日志,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

本文主要介绍了详解ssm框架下结合log4jslf4j打印日志,分享给大家,具体如下:

首先加入log4j和slf4j的jar包

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!-- 日志处理
  <!-- slf4j日志包-->
  <dependency>
   <groupid>org.slf4j</groupid>
   <artifactid>slf4j-api</artifactid>
   <version>1.7.21</version>
  </dependency>
  <dependency>
   <groupid>org.slf4j</groupid>
   <artifactid>slf4j-log4j12</artifactid>
   <version>1.7.21</version>
  </dependency>
  <!-- 引入log4j日志包-->
  <dependency>
  <groupid>log4j</groupid> -->
  <artifactid>log4j</artifactid>
  <version>1.2.16</version>
  </dependency>

mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种工具:

  1. slf4j
  2. apache commons logging
  3. log4j 2
  4. log4j
  5. jdk logging

1、具体选择哪个日志实现工具由mybatis的内置日志工厂确定。它会使用最先找到的(按上文列举的顺序查找)。 如果一个都未找到,日志功能就会被禁用。

不少应用服务器的classpath中已经包含commons logging,如tomcat和webshpere, 所以mybatis会把它作为具体的日志实现。记住这点非常重要。这将意味着,在诸如 websphere的环境中——websphere提供了commons logging的私有实现,你的log4j配置将被忽略。 这种做法不免让人悲催,mybatis怎么能忽略你的配置呢?事实上,因commons logging已经存 在了,按照优先级顺序,log4j自然就被忽略了!不过,如果你的应用部署在一个包含commons logging的环境, 而你又想用其他的日志框架,你可以通过在mybatis的配置文件mybatis-config.xml里面添加一项setting(配置)来选择一个不同的日志实现。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
<?xml version="1.0" encoding="utf-8" ?>
<!doctype configuration
  public "-//mybatis.org//dtd config 3.0//en"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
 
 <!-- 用于输出日志 log4j:log4j slf4j -->
 <settings>
  <setting name="logimpl" value="slf4j"/>
 </settings>
 
 <!-- 此文件可以为空文件, 但是必须要有这文件 -->
 
 <!-- plugins在配置文件中的位置必须符合要求,否则会报错,顺序如下: properties?, settings?, typealiases?,
  typehandlers?, objectfactory?,objectwrapperfactory?, plugins?, environments?,
  databaseidprovider?, mappers? -->
 <plugins>
  <!-- com.github.pagehelper为pagehelper类所在包名 -->
  <plugin interceptor="com.github.pagehelper.pagehelper">
   <!-- 4.0.0以后版本可以不设置该参数 -->
   <property name="dialect" value="mysql" />
   <!-- 该参数默认为false -->
   <!-- 设置为true时,会将rowbounds第一个参数offset当成pagenum页码使用 -->
   <!-- 和startpage中的pagenum效果一样 -->
   <property name="offsetaspagenum" value="true" />
   <!-- 该参数默认为false -->
   <!-- 设置为true时,使用rowbounds分页会进行count查询 -->
   <property name="rowboundswithcount" value="true" />
   <!-- 设置为true时,如果pagesize=0或者rowbounds.limit = 0就会查询出全部的结果 -->
   <!-- (相当于没有执行分页查询,但是返回结果仍然是page类型) -->
   <property name="pagesizezero" value="true" />
   <!-- 3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
   <!-- 启用合理化时,如果pagenum<1会查询第一页,如果pagenum>pages会查询最后一页 -->
   <!-- 禁用合理化时,如果pagenum<1或pagenum>pages会返回空数据 -->
<!--    <property name="reasonable" value="false" /> -->
   <!-- 3.5.0版本可用 - 为了支持startpage(object params)方法 -->
   <!-- 增加了一个`params`参数来配置参数映射,用于从map或servletrequest中取值 -->
   <!-- 可以配置pagenum,pagesize,count,pagesizezero,reasonable,orderby,不配置映射的用默认值 -->
   <!-- 不理解该含义的前提下,不要随便复制该配置 -->
<!--    <property name="params" value="pagenum=pagehelperstart;pagesize=pagehelperrows;" /> -->
   <!-- 支持通过mapper接口参数来传递分页参数 -->
   <property name="supportmethodsarguments" value="false" />
   <!-- always总是返回pageinfo类型,check检查返回类型是否为pageinfo,none返回page -->
   <property name="returnpageinfo" value="none" />
  </plugin>
 </plugins>
 
</configuration>

logimpl可选的值有:slf4j、log4j、log4j2、jdk_logging、commons_logging、stdout_logging、no_logging 或者是实现了接口org.apache.ibatis.logging.log的类的完全限定类名, 并且这个类的构造函数需要是以一个字符串(string类型)为参数的。 (可以参考org.apache.ibatis.logging.slf4j.slf4jimpl.java的实现)

你根据需要调用如下的某一方法:

?
1
2
3
4
5
org.apache.ibatis.logging.logfactory.useslf4jlogging();
org.apache.ibatis.logging.logfactory.uselog4jlogging();
org.apache.ibatis.logging.logfactory.usejdklogging();
org.apache.ibatis.logging.logfactory.usecommonslogging();
org.apache.ibatis.logging.logfactory.usestdoutlogging();

如果的确需要调用以上的某个方法,请在其他所有mybatis方法之前调用它。另外,只有在相应日志实现中存在 的前提下,调用对应的方法才是有意义的,否则mybatis一概忽略。如你环境中并不存在log4j,你却调用了 相应的方法,mybatis就会忽略这一调用,代之默认的查找顺序查找日志实现。

2、配置web.xml

?
1
2
3
4
5
6
7
8
<!-- 加载log4j -->
 <context-param>
  <param-name>log4jconfiglocation</param-name>
  <param-value>classpath:log4j.properties</param-value>
 </context-param>
 <listener>
  <listener-class>org.springframework.web.util.log4jconfiglistener</listener-class>
 </listener>

3、只要在应用的classpath中创建一个名称为log4j.properties的文件, 文件的具体内容如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
log4j.rootlogger=info,console,dailyfile
# todo 发布到阿里云记得添加,另外控制台不输出(只输出warn或者error信息)
#info,console,dailyfile
 
log4j.logger.org.mybatis =debug
log4j.logger.com.itzixi.mapper=debug
 
log4j.appender.console=org.apache.log4j.consoleappender
log4j.appender.console.encoding=utf-8
log4j.appender.console.layout=org.apache.log4j.patternlayout
log4j.appender.console.layout.conversionpattern=%-d{yyyy-mm-dd hh:mm:ss,sss} [%t] [%l] - [%p] %m%n
#mybatis显示sql语句日志配置
#log4j.logger.org.mybatis=debug
#log4j.logger.com.itzixi.mapper=debug
 
# 定期滚动日志文件,每天都会生成日志
log4j.appender.dailyfile=org.apache.log4j.dailyrollingfileappender
log4j.appender.dailyfile.encoding=utf-8
log4j.appender.dailyfile.threshold=info
# todo 本地日志地址,正式环境请务必切换为阿里云地址
#log4j.appender.dailyfile.file=c:/logs/itzixi-web/log.log4j
log4j.appender.dailyfile.file=/itzixi-disk1/logs/itzixi-web/log.log4j
log4j.appender.dailyfile.datepattern='.'yyyy-mm-dd
log4j.appender.dailyfile.layout=org.apache.log4j.patternlayout
log4j.appender.dailyfile.layout.conversionpattern=%-d{yyyy-mm-dd hh:mm:ss,sss} [%t] [%l] - [%p] %m%n
 
 
##显示sql语句部分
#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

如图当我们在运行进入debug时就有sql语句打印了

详解SSM框架下结合log4j、slf4j打印日志

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:http://www.cnblogs.com/a8457013/p/7909780.html

延伸 · 阅读

精彩推荐
  • JAVA教程java统计汉字字数的方法示例

    java统计汉字字数的方法示例

    这篇文章主要介绍了java统计汉字字数的方法,结合实例形式分析了java正则判定、字符串遍历及统计相关操作技巧,需要的朋友可以参考下...

    OilAlways2842020-09-25
  • JAVA教程JAVA异常处理机制之throws/throw使用情况的区别

    JAVA异常处理机制之throws/throw使用情况的区别

    这篇文章主要介绍了JAVA异常处理机制之throws/throw使用情况的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需...

    newname5122020-07-18
  • JAVA教程网页版在线聊天java Socket实现

    网页版在线聊天java Socket实现

    这篇文章主要为大家详细介绍了java Socket实现网页版在线聊天具体代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 ...

    lijiao3552020-05-03
  • JAVA教程crawler4j抓取页面使用jsoup解析html时的解决方法

    crawler4j抓取页面使用jsoup解析html时的解决方法

    crawler4j对response没有指定编码的页面,解析成乱码,很让人烦恼,下面给出解决方法,需要的朋友可以参考下 ...

    Java教程网4692019-11-18
  • JAVA教程java实现文件保存到本地的方法

    java实现文件保存到本地的方法

    本篇文章主要介绍了java实现文件保存到本地的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    园芳宝贝1402020-08-02
  • JAVA教程java String类常用方法练习小结

    java String类常用方法练习小结

    本文主要介绍了java String类常用方法的例子,具有很好的参考价值,下面跟着小编一起来看下吧...

    沐一1722020-08-12
  • JAVA教程MyBatis如何使用(二)

    MyBatis如何使用(二)

    这篇文章主要介绍了MyBatis如何使用(二)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 ...

    迷茫中守候2372020-05-31
  • JAVA教程详解JDBC使用

    详解JDBC使用

    JDBC(Java Database Connectivity),即Java数据库连接,是一种用于执行SQL语句的Java API,可以为多种关系数据库提供同一访问,它由一组用Java语言编写的类和接口...

    五月的仓颉2412020-09-22