赞
踩
Mybatis 通过使用内置的日志工厂提供日志功能。 内置日志工厂将会把日志工作委托给下面的实现之一:
MyBatis 内置日志工厂会基于运行时检测信息选择日志委托实现。它会(按上面罗列的顺序)使用第一个查找到的实现。当没有找到这些实现时,将会禁用日志功能。
不少应用服务器(如 Tomcat 和 WebShpere)的类路径中已经包含 Commons Logging。注意,在这种配置环境下,MyBatis 会把 Commons Logging 作为日志工具。这就意味着在诸如 WebSphere 的环境中,由于提供了 Commons Logging 的私有实现,你的 Log4J 配置将被忽略。这个时候你就会感觉很郁闷:看起来 MyBatis 将你的 Log4J 配置忽略掉了(其实是因为在这种配置环境下,MyBatis 使用了 Commons Logging 作为日志实现)。
如果你的应用部署在一个类路径已经包含 Commons Logging 的环境中,而你又想使用其它日志实现,你可以通过在 MyBatis 配置文件 mybatis-config.xml 里面添加一项 setting 来选择其它日志实现。
setting配置日志的有效取值
SLF4J将日志分为trace、debug、info、warn、error五个级别,每个级别对应记录不同的日志,对应不同的使用场景。
(1)日志门面
(2)日志实面
(3)关系
(4)优点
<settings>
<setting name="logImpl" value="SLF4J"/>
</settings>
(1)slf4j + log4j
<!-- slf4j日志门面 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <!-- 引入slf4j对应log4j的桥接器 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency> <!-- log4j日志实面(日志实现框架) --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
(2)slf4j + log4j2
<!-- slf4j日志门面 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <!-- 引入slf4j对应log4j2的桥接器 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <scope>runtime</scope> <version>2.11.0</version> </dependency> <!-- log4j2日志实面(日志实现框架) --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <scope>runtime</scope> <version>2.11.0</version> </dependency>
Log4j 是 Apache 的一个开放源代码项目,通过使用 Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI 组件、甚至是套接口服务 器、NT 的事件记录器、UNIX Syslog 守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。最令人感兴趣的就 是,这些可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
每个Logger都被了一个日志级别(log level),用来控制日志信息的输出。
日志级别从高到低分为:
(1)Logger
# 自定义logger(指定要输出日志的全限定路径、日志级别、选择的appender)
log4j.logger.com.qf.dao=debug,CONSOLE
<!-- 自定义logger,additivity 日志是否在父Logger中输出(即root中))-->
<!-- 自定义logger(指定要输出日志的全限定路径、日志级别、选择的appender)-->
<logger name="com.qfedu.dao" additivity="false">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="LOGFILE"/>
</logger>
(2)Appender
# CONSOLE is set to be a ConsoleAppender using a PatternLayout.
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c:%L] [%p] - %m%n
<!-- 日志控制台输出配置-->
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c:%L] [%p] - %m%n"/>
</layout>
</appender>
(3)Layout
(1)(日志门面+日志实面):slf4j + log4j
<settings>
<setting name="logImpl" value="SLF4J"/>
</settings>
<!-- slf4j日志门面 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <!-- 引入slf4j对应log4j的桥接器 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> </dependency> <!-- log4j日志实面(日志实现框架) --> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
log4j基于自动配置,所以配置文件名称只能为:log4j.properties
或log4j.xml
以下示例仅展示文件输出与控制台输出配置
配置1:log4j.properties
# Set root category priority to INFO and its only appender to CONSOLE. log4j.rootLogger=debug, CONSOLE, LOGFILE # 表示自定义的logger不会继承父Logger的appender输出,默认为true及输出 lo4j.log4j.additivity.org.apache=false # CONSOLE is set to be a ConsoleAppender using a PatternLayout. log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c:%L] [%p] - %m%n # LOGFILE is set to be a File appender using a PatternLayout. log4j.appender.LOGFILE=org.apache.log4j.FileAppender log4j.appender.LOGFILE.File=d:\mybatis.log log4j.appender.LOGFILE.Append=true log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout log4j.appender.LOGFILE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c:%L] [%p] - %m%n # 自定义logger(指定要输出日志的全限定路径、日志级别、选择的appender) log4j.logger.com.qf.dao=debug,CONSOLE
配置2:log4j.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd"> <log4j:configuration debug="true"> <!-- 日志控制台输出配置--> <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c:%L] [%p] - %m%n"/> </layout> </appender> <!-- 日志文件输出配置--> <appender name="LOGFILE" class="org.apache.log4j.FileAppender"> <param name="File" value="d:\mybatis.log"/> <param name="Append" value="true"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c:%L] [%p] - %m%n"/> </layout> </appender> <!-- 自定义logger,additivity 日志是否在父Logger中输出(即root中))--> <!-- 自定义logger(指定要输出日志的全限定路径、日志级别、选择的appender)--> <logger name="com.qfedu.dao" additivity="false"> <appender-ref ref="CONSOLE"/> <appender-ref ref="LOGFILE"/> </logger> <!-- 根logger--> <root> <level value="debug "/> <appender-ref ref="CONSOLE"/> </root> </log4j:configuration>
(2)(不使用日志门面–不推荐): log4j
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
log4j.properties
或log4j.xml
Apache Log4j2 是对Log4j 的升级:(Log4j2已经不仅仅是Log4j的一个升级版本了,而是从头到尾被重写的,这可以认为这其实就是完全不同的两个框架。)
slf4j + log4j2
会是后续流行的搭配! <settings>
<setting name="logImpl" value="LOG4J2"/>
</settings>
<!-- log4j2日志门面-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.11.2</version>
</dependency>
<!-- log4j2日志实面(日志实现)-->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.11.2</version>
</dependency>
(2)slf4j + log4j2
<settings>
<setting name="logImpl" value="SLF4J"/>
</settings>
<!-- slf4j日志门面 --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <!-- 引入slf4j对应log4j2的桥接器 --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <scope>runtime</scope> <version>2.11.0</version> </dependency> <!-- log4j2日志实面(日志实现框架) --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <scope>runtime</scope> <version>2.11.0</version> </dependency>
(1)配置文件格式
(2)配置文件内容(只展示控制台输出和文件输出)
<?xml version="1.0" encoding="UTF-8"?> <Configuration> <Appenders> <!-- 日志输出到控制台--> <Console name="CONSOLE" target="SYSTEM_OUT"> <PatternLayout pattern="[%t] %-5level %logger{36} - %msg%n"/> </Console> <!-- 日志输出到文件--> <File name="LOGFILE" fileName="d:\mybatis.log" append="true"> <PatternLayout pattern="[%t] %-5level %logger{36} - %msg%n"/> </File> </Appenders> <Loggers> <!-- 自定义日志记录器--> <Logger name="com.j2205.wangwenfei.mapper" level="trace" additivity="false"> <AppenderRef ref="CONSOLE"/> <AppenderRef ref="LOGFILE"/> </Logger> <!-- 根日志记录器--> <Root level="error" > <AppenderRef ref="CONSOLE"/> </Root> </Loggers> </Configuration>
(3)log4j2 配置文件含义
Loggers 指定logger,logger与appeder进行关联,将logger中的日志输出到appender,由appender实现日志的控制台输出或者文件记录。
Logger 自定义的子日志
如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出
,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。