一. logback
Logback旨在作为流行的log4j项目的后续版本,在log4j离开的地方启动。
Logback的架构足够通用,以便在不同情况下应用。
目前,logback分为三个模块:logback-core,logback-classic和logback-access。
logback-core模块为其他两个模块奠定了基础。 logback-classic模块可以被同化为log4j的显着改进版本。 此外,logback-classic本身实现了SLF4J API,因此您可以在logback和其他日志框架(如log4j或java.util.logging(JUL))之间来回切换。
logback-access模块与Servlet容器(如Tomcat和Jetty)集成,以提供HTTP访问日志功能。 请注意,您可以在logback-core之上轻松构建自己的模块。
二. maven引入
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
注意,可以观察到 logback-classic 的传递性依赖:
所以,在maven里引入logging-classic即可;
三. logback.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<!--scan: 当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod: 设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。
当scan为true时,此属性生效。默认的时间间隔为1分钟(60 seconds)。
debug: 当此属性设置为true时,将打印出logback内部日志信息,默认值为false。
-->
<configuration scan="true" scanPeriod="120 seconds" debug="false">
<!--用于区分不同应用程序的记录
<contextName>springmvc</contextName>
-->
<!-- 定义日志文件所在目录 -->
<property name="LOG_HOME" value="E:/Users/用户名/logs/" />
<!--控制台输出 -->
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--解决乱码问题 -->
<charset>UTF-8</charset>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %logger输出日志的logger名
%msg:日志消息,%n是换行符 -->
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36}: %msg%n</pattern>
</encoder>
</appender>
<!--滚动文件 -->
<appender name="infoLogFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- ThresholdFilter:临界值过滤器,过滤掉 TRACE 和 DEBUG 级别的日志
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
-->
<!-- 过滤掉ERROR日志 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>DENY</onMatch>
<onMismatch>ACCEPT</onMismatch>
</filter>
<encoder>
<charset>UTF-8</charset>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36}: %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory><!--保存最近30天的日志 -->
</rollingPolicy>
</appender>
<!--滚动文件 -->
<appender name="errorLogFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- ThresholdFilter:临界值过滤器,过滤掉 TRACE 和 DEBUG 级别的日志 -->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>error</level>
</filter>
<encoder>
<charset>UTF-8</charset>
<pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] [%thread] %-5level %logger{36}: %msg%n</pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/error.%d{yyyy-MM-dd}.log
</fileNamePattern>
<maxHistory>30</maxHistory><!--保存最近30天的日志 -->
</rollingPolicy>
</appender>
<!--这里如果是info,spring、mybatis等框架则不会输出:
TRACE < DEBUG < INFO < WARN < ERROR
-->
<!--root是所有logger的祖先,均继承root,如果某一个自定义的logger没有指定level,就会寻找 父logger看有没有指定级别,直到找到root。 -->
<root level="info">
<appender-ref ref="stdout" />
<appender-ref ref="infoLogFile" />
<appender-ref ref="errorLogFile" />
</root>
<!--为某个包单独配置logger 比如定时任务,写代码的包名为:com.seentao.task 步骤如下:
1、定义一个appender,取名为task(随意,只要下面logger引用就行了)
appender的配置按照需要即可
2、定义一个logger: <logger name="com.seentao.task" level="DEBUG"
additivity="false"> <appender-ref ref="task" /> </logger> 注意:additivity必须设置为false,这样只会交给task这个appender,否则其他appender也会打印com.seentao.task里的log信息。
3、这样,在com.seentao.task的logger就会是上面定义的logger了。 private static Logger logger
= LoggerFactory.getLogger(Class1.class); -->
</configuration>
四. 使用
private static Logger logging = LoggerFactory.getLogger(TestController.class);
@RequestMapping("/testLogger")
public void testLogger(int id, String name) {
logging.info("id:{}, name:{}",id,name);
}