引(废)言(话)

本文的核心内容在于如何快速在maven项目中配置logback日志框架,使日志即输出在控制台,又以log文件的形式输出到本地磁盘保存。

1.logback的优点

logback日志框架的优点:
(1)内核重写,测试充分,初始化内存加载更小;
(2)logback非常自然地直接实现了slf4j;
(3)有比较齐全地200多页地文档;
(4)配置修改后,支持自定重新加载配置文件;
(5)支持自动去除旧的日志文件。

2.如何配置logback

第一步:在pom.xml中引入对logback的依赖,并指定scope为test。

<!-- logback日志框架-->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
             <!-- 指定应用范围为test,在项目打包时不会出现此项依赖-->
            <scope>test</scope>
        </dependency> 
         <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
             <!-- 指定应用范围为test,在项目打包时不会出现此项依赖-->
            <scope>test</scope>
        </dependency>

第二步:配置logback.xml
这里提供一个配置,里面包含了比较详细的说明。代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<!-- 负责控制台日志输出 -->
	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<!-- 日志格式 -->
			<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
		</encoder>
	</appender>
	<!-- 负责滚动记录日志文件 -->
	<appender name="ROLLING-FILE-1" class="ch.qos.logback.core.rolling.RollingFileAppender">
		<!-- 滚动策略采用TimeBasedRollingPolicy,每天一个文件 -->
		 <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
		 	 <!-- 日志文件名字,包含了日期 -->
              <fileNamePattern>D:/loggingFiles/ssm_20190109_shopping/rolling-file-%d{yyyy-MM-dd}.log</fileNamePattern>   
              <!-- 保存近期30个月的日志文件 -->
              <maxHistory>30</maxHistory>    
        </rollingPolicy>   
        <encoder>
        		<!-- 日志格式 -->
              <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>   
        </encoder>   
	</appender>		
	 <!-- 异步输出日志-->  
    <appender name ="ASYNC" class= "ch.qos.logback.classic.AsyncAppender">  
        <!-- 不丢失日志.默认值为20,表示如果队列还剩20%容量,则会丢弃TRACT、DEBUG、INFO级别的日志 -->  
        <discardingThreshold>0</discardingThreshold>  
        <!-- 更改默认的队列的容量,该值会影响性能.默认值为256 -->  
        <queueSize>256</queueSize>  
        <!-- 添加附加的appender,最多只能添加一个,且必须要添加一个,否则无法输出日志,因为AsyncAppender只作为一个缓存容器 -->  
        <appender-ref ref ="ROLLING-FILE-1"/>  
    </appender>
    <!-- 这个root在这里用于日志文件异步输出,日志等级为INFO -->
    <root level="INFO">
    	<!-- 指定“ASYNC”作为日志输出 -->
        <appender-ref ref="ASYNC" />
    </root>
	<!-- 这个root在这里用于控制台输出 -->
    <root level="DEBUG">
    	<!-- 指定“STDOUT”作为日志输出 -->
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

3.测试

在完成上述配置后,我们打开任意的位于src/test/java包下的程序,控制台都会按照我们的logback配置输出日志信息,如下:

java logback唯一标识记录到数据库 java logback日志序列化_日志文件


同时,在本地磁盘D:/loggingFiles/ssm_20190109_shopping路径下,我们可以看到自动生成的相应log文件:

java logback唯一标识记录到数据库 java logback日志序列化_日志文件_02


大功告成!

PS:logback配置中还可以定义logger标签,其name指定java类或者包,然后日志输入相应类或者包下面的所有类的日志。