日志,是开发和运维人员定位错误,分析应用使用情况的一种重要手段。开发中最常见的情景就是测试时,一旦程序出现了异常,就立马想到通过查看程序日志来定位问题所在。
目前的Java应用主流的日志框架有Log4J和Logback等。而Logback又是Log4J作者再设计开发的改进版,所以本系列使用Logback作为日志框架。
采用Intellij IDEA 2018.1作为开发工具,使用Maven做依赖管理,示例项目基于Spring Boot 2.0.1.RELEASE和Java 10。
1. 环境准备
首先在pom.xml中引入Logback的依赖:
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency>
在Spring Boot 2.0.1.RELEASE中,logback-classic的版本号为1.2.3.
2. 日志配置
在引用导入完成后,需要对Logback进行设置,Logback配置文件名称为logback.xml,放置在项目的resources目录下:
配置文件具体内容如下:
<?xml version="1.0" encoding="UTF-8" ?> <configuration> <contextName>log-sample</contextName> <!-- 将日志写入控制台输出中 --> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{55} - %msg%n</pattern> </encoder> </appender> <!-- 将日志写入文件中 --> <appender name="rolling" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>log-sample.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"> <!-- 每天一归档 --> <fileNamePattern>log-sample-%d{yyyy-MM-dd}.%i.txt</fileNamePattern> <!-- 单个日志文件最多 100MB, 60天的日志周期,最大不能超过20GB --> <maxFileSize>100MB</maxFileSize> <maxHistory>60</maxHistory> <totalSizeCap>20GB</totalSizeCap> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{55} - %msg%n</pattern> </encoder> <!-- 默认true日志追加到文件结尾,false清空现存文件--> <append>true</append> </appender> <!-- 针对包路径设置不同的日志等级 --> <logger name="com.zxyankh.log.sample" level="debug"/> <root level="info"> <appender-ref ref="console"/> <appender-ref ref="rolling"/> </root> </configuration>
完成了logback.xml文件的编写之后,需要在Spring boot的配置文件application.properties或application.yml文件中指定logback配置文件的路径,在示例中,使用application.yml文件作为Spring boot的配置文件:
logging: config: classpath:logback.xml
3. 代码使用
现在Logback的配置已经完成,接下去就是在代码中使用Logback来完成日志的记录。简单起见,示例代码只是在启动类启动完成后加了一条日志输出,表明项目在何时启动完成:
package com.zxyankh.log.sample; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import java.time.Instant; @SpringBootApplication public class LogSampleApplication { private static final Logger LOGGER = LoggerFactory.getLogger(LogSampleApplication.class); public static void main(String[] args) { SpringApplication.run(LogSampleApplication.class, args); LOGGER.info("Log Sample start finished at {}.", Instant.now()); } }
实际的输出结果如下:
第一条输出是Spring boot启动后的输出,第二条输出是添加在启动类启动方法调用之后的自定义输出。
由于刚才Logback的配置文件中也配置了日志文件的输出,所以可以在项目当前目录下看到名为log-sample.log的日志文件。
4. 总结
以上就是最简单的Spring boot和logback的结合使用方式。虽然项目已经配置了控制台输出和写日志文件两种方式的日志记录方式,但对于大型应用来说这显然是不够的。每次登录不同的服务器查看应用日志文件,对于开发运维人员来说是一件很痛苦的事情,所以需要结合其他工具实现更完善的日志监控系统,接下去的文章将会介绍ELK(ElasticSearch + Logstash + Kibana)。