ssm环境下配置log4j打印mybatis的sql语句

概念:slf4j-api : Simple Logging Facade for Java

slf4j-api为java提供的简单日志的Facade(Facade:门面,更底层一点说就是接口)。它允许用户以自己的喜好,在工程中通过slf4j接入不同的日志系统。
因此,slf4j入口就是众多接口的集合,它不负责具体的日志实现,只在编译时负责寻找合适的日志系统进行绑定。具体有哪些接口,全部都定义在slf4j-api中。
查看slf4j-api源码就可以发现,里面除了public final class LoggerFactory类之外,都是接口定义。因此slf4j-api本质就是一个接口定义。
它只提供一个核心slf4j api(即slf4j-api.jar包),这个包只有日志的接口,并没有实现,所以如果要使用它就得再给它提供一个实现了这些接口的日志包,比 如:log4j、common logging、jdk logging等。
但是这些日志实现又不能通过接口直接调用,实现上他们根本就和slf4j-api不一致,因此slf4j又增加了一层来转换各日志实 现包的使用,比如slf4j-log4j12等。


slf4j+log4j组合使用模式:

  • slf4j-api-X.X.X.jar
  • slf4j-log4j12-X.X.X.jar
  • log4j-X.X.X.jar
  • log4j.properties(也可以是 log4j.xml)

具体使用日志类的API:

  • log4j:
import org.apache.log4j.Logger;
Logger logger= Logger.getLogger(xx.class);
  • slf4j+log4j:(推荐)
import  org.slf4j.Logger;
import  org.slf4j.LoggerFactory;
Logger logger = LoggerFactory.getLogger(xx.class);

SSM框架环境下配置log4j打印MyBatis的SQL语句

按照官方文档的叙述,mybatis会根据下面的顺序寻找log4具体的实现类:

  1. SLF4J
  2. Apache Commons Logging
  3. Log4j 2
  4. Log4j
  5. JDK logging

所以要先指定使用哪个日志框架。

1.配置web.xml

<!-- 加载log4j配置文件 -->
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.properties</param-value>
    <!-- <param-value>/WEB-INF/log4j.xml</param-value> -->
</context-param>
<listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>

2.编写log4j.properties文件

# log4j.rootLogger=level, appenderName, appenderName, …
# level:日志记录的优先级
#   |-  level分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL
#   |-  Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG
#   |-  级别详解
#       |- off 最高等级,用于关闭所有日志记录。
#       |- fatal 指出每个严重的错误事件将会导致应用程序的退出。
#       |- error 指出虽然发生错误事件,但仍然不影响系统的继续运行。
#       |- warm 表明会出现潜在的错误情形。
#       |- info 一般和在粗粒度级别上,强调应用程序的运行全程。
#       |- debug 一般用于细粒度级别上,对调试应用程序非常有帮助。
#       |- all 最低等级,用于打开所有日志记录。
#   |-  通过在这里定义的级别,可以控制到应用程序中相应级别的日志信息的开关
#       比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。
#
# appenderName:level级别的日志信息输出到哪个地方,可以同时指定多个输出目的地。
log4j.rootLogger=INFO,Console,File

# 定义日志输出目的地
# Log4j提供的appender有以下几种:
#   |- org.apache.log4j.ConsoleAppender(控制台)
#   |- org.apache.log4j.FileAppender(文件)
#   |- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
#   |- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
#   |- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

# 下面是输出到控制台的设置
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.Target=System.out
#可以灵活的指定日志输出格式,下面一行是指定具体的格式
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=[%c]-%m%n

# 下面是输出到指定文件
# 指定输出目录
log4j.appender.File.File = /home/matto/IdeaProjects/WorkSpaceGit/TestMaven/logs/ssm.log
#定义文件最大大小
log4j.appender.File.MaxFileSize = 10MB
# 文件大小到达指定尺寸的时候产生一个新的文件
log4j.appender.File = org.apache.log4j.RollingFileAppender
# 每天产生一个日志文件
log4j.appender.File = org.apache.log4j.DailyRollingFileAppender
# 输出所有warn 以上级别的日志,Threshold是个全局的过滤器,它将把低于所设置的level的信息过滤不显示出来。一般比log4j.rootLogger设置的等级高,否则没什么意义。
log4j.appender.File.Threshold = warn  
# 配置日志信息的格式(布局)
# Log4j提供的layout有以下几种:
#   |- org.apache.log4j.HTMLLayout(以HTML表格形式布局)
#   |- org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
#   |- org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
#   |- org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
log4j.appender.File.layout = org.apache.log4j.PatternLayout
# 打印参数如下:
#   |- %m 输出代码中指定的消息
#   |- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL 
#   |- %r 输出自应用启动到输出该log信息耗费的毫秒数 
#   |- %c 输出所属的类目,通常就是所在类的全名 
#   |- %t 输出产生该日志事件的线程名 
#   |- %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n” 
#   |- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,
#       比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 
#   |- %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
#       举例:Testlog4.main(TestLog4.java:10)
log4j.appender.File.layout.ConversionPattern =[%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%c]%m%n

#mybatis显示SQL语句日志配置  
#是此SSM项目接口所在的包名 
log4j.logger.XXX.XXX.XXX=DEBUG

其中,log4j.logger.XXX.XXX.XXX=DEBUG这行代码会在日志中显示mybaties的SQL语句。

另外,在代码中如果要使用日志,可以这么写:

public class App {

    //1,获取日志记录器,这个记录器将负责控制日志信息。
    private static final Logger LOG = LoggerFactory.getLogger(App.class);
    
    public static void main(String[] args) {
    
        /*
        2,配置Log4j环境(Web框架中这步已经交给容器,可以省略)
        BasicConfigurator.configure():自动快速地使用缺省Log4j环境
        PropertyConfigurator.configure(String configFilename):读取使用property文件编写的配置文件
        DOMConfigurator.configure(String filename):读取XML形式的配置文件
        */
        
        //3.记日志
        LOG.info("info");
        LOG.debug("debug");
        LOG.error("error");
    }
}  

运行结果如图:

猜你喜欢

转载自www.cnblogs.com/fanzuojia/p/10493355.html