前言
一直没机会做spring生态圈的框架,公司选择的是一些小众的微服务,鉴于此考虑,丰富自己的技术栈,花了两天时间从网上各网站上学习了springboot一些基础知识。
本章只介绍springboot微服务的默认日志配置,logback组件。
环境准备
- IntelliJ IDEA
- 前一章中搭建的微服务框架
开始集成
-
pom.xml中增加依赖包
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
<!--用于简化java代码开发-->
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.8</version>
<scope>provided</scope>
</dependency>
-
application.yml中增加logging的配置
# Logging settings.
logging:
config: classpath:logback-spring.xml
-
右键resources目录,新增文件logback-spring.xml
内容:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<configuration>
<contextName>logback</contextName>
<!--读取配置中心的属性-->
<!-- <springProperty scope="context" name="logpath" source="logging.path"/>-->
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<property name="LOG_PATH" value="C:\\xuefly\\log\\" />
<!--输出到控制台-->
<!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%-5level:级别从左显示5个字符宽度,%msg:日志消息,%i索引【从数字0开始递增】 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>DEBUG</level>
</filter>
<encoder>
<!--%logger{50}:表示logger名字最长50个字符,否则按照句点分割-->
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50} -- %msg%n</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--输出到文件-->
<!-- 时间滚动输出 level为全部日志 -->
<appender name="RUNTIME" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 正在记录的日志文件的路径及文件名,注释掉这个按照每天生成一个日志文件 -->
<!--<file>${LOG_PATH}/public.log</file>-->
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50} -- %msg%n</pattern>
<charset>UTF-8</charset> <!-- 设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志归档 后面可以加.zip-->
<fileNamePattern>${LOG_PATH}public-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<!--日志文件保留天数-->
<maxHistory>100</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--文件达到 最大时会被压缩和切割 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志总保存量为200MB-->
<totalSizeCap>200MB</totalSizeCap>
</rollingPolicy>
</appender>
<!--时间滚动输出 level为 ERROR 日志 -->
<appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{50} -- %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_PATH}error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>100</maxHistory>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<!--文件达到 最大时会被压缩和切割 -->
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志总保存量为200MB-->
<totalSizeCap>200MB</totalSizeCap>
</rollingPolicy>
<!-- 此日志文件只记录ERROR级别的 -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--开发环境:打印控制台-->
<springProfile name="dev">
<!--<logger name="com.phfund" level="debug"/>-->
<root level="DEBUG">
<appender-ref ref="CONSOLE" />
<appender-ref ref="RUNTIME" />
<appender-ref ref="ERROR" />
</root>
</springProfile>
<!--生产环境:输出到文件-->
<springProfile name="prd">
<root level="INFO">
<appender-ref ref="RUNTIME" />
<appender-ref ref="ERROR" />
</root>
</springProfile>
</configuration>
为了区分开发环境和生产环境中日志记录方式以及日志记录的级别不同,在该配置文件中通过<springProfile>区分,本文中,定义了dev和prd两种模式,此值在application.yml中定义
- yml中增加配置
spring:
#日志记录模式
profiles:
active: dev #用来控制当前使用什么模式
#服务启动时打印的横幅
banner:
charset: "UTF-8"
location: classpath:banner.txt
4'. 番外话
此处banner是服务启动时展示的横幅,一般是工程名或服务名通过banner生成器生成的,网址为:http://patorjk.com/software/taag/
_____ _____ _____ _______
/\ \ /\ \ /\ \ /::\ \
/::\ \ /::\ \ /::\____\ /::::\ \
/::::\ \ /::::\ \ /::::| | /::::::\ \
/::::::\ \ /::::::\ \ /:::::| | /::::::::\ \
/:::/\:::\ \ /:::/\:::\ \ /::::::| | /:::/~~\:::\ \
/:::/ \:::\ \ /:::/__\:::\ \ /:::/|::| | /:::/ \:::\ \
/:::/ \:::\ \ /::::\ \:::\ \ /:::/ |::| | /:::/ / \:::\ \
/:::/ / \:::\ \ /::::::\ \:::\ \ /:::/ |::|___|______ /:::/____/ \:::\____\
/:::/ / \:::\ ___\ /:::/\:::\ \:::\ \ /:::/ |::::::::\ \ |:::| | |:::| |
/:::/____/ \:::| |/:::/__\:::\ \:::\____\/:::/ |:::::::::\____\|:::|____| |:::| |
\:::\ \ /:::|____|\:::\ \:::\ \::/ /\::/ / ~~~~~/:::/ / \:::\ \ /:::/ /
\:::\ \ /:::/ / \:::\ \:::\ \/____/ \/____/ /:::/ / \:::\ \ /:::/ /
\:::\ \ /:::/ / \:::\ \:::\ \ /:::/ / \:::\ /:::/ /
\:::\ /:::/ / \:::\ \:::\____\ /:::/ / \:::\__/:::/ /
\:::\ /:::/ / \:::\ \::/ / /:::/ / \::::::::/ /
\:::\/:::/ / \:::\ \/____/ /:::/ / \::::::/ /
\::::::/ / \:::\ \ /:::/ / \::::/ /
\::::/ / \:::\____\ /:::/ / \::/____/
\::/____/ \::/ / \::/ / ~~
~~ \/____/ \/____/
:: ${application.title} : ${application.formatted-version} ::
application.title和application.formatted-version可以通过在yml中增加配置实现替换表示应用名称和版本号
application:
title: "springboot-demo"
formatted-version: "1.0"
-
所有配置性的操作都做完了,该使用了
前面引入依赖的时候引入了lombok组件,(该组件可以简化代码,使用方法大家可以搜一下),引用注解@Slf4j,在本类中就可以使用静态变量log去记录日志了
-
服务运行后,控制台日志以及日志文件生成