Spring Boot学习笔记-------(四)spring boot日志系统

一、现有日志框架及选用

现有日志框架有:JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j等。

日志抽象层日志实现

JCL(Jakarta Commons Logging)、SLF4j(Simple Logging Facade for java)、Jboss-logging

Log4j、JUL(java.util.logging)、Log4j2、Logback

SpringBoot:底层Spring框架,默认使用JCL。

                  Spring boot 选用slf4j 和logback。

我们选用Slf4j和Logback框架。

下图显示slf4j与各不同日志实现框架直接的关系,在选用不同的日志框架时配置文件使用具体实现框架的配置文件。

click to enlarge

二、日志框架统一

slf4j网址:http://www.slf4j.org/legacy.html

如何让系统中所有的日志都统一到slf4j

下图展示slf4j针对不同实现的框架兼容其他日志框架的替换实现方案。

1.将系统中其他日志框架先排除出去;

2.用中间包替换原有的日志框架;

3.用导入slf4j其他的实现。

三、SpringBoot的日志

1. SpringBoot底层使用slf4j+logback的方式进行日志记录。

2.SpringBoot也把其他的日志都替换成了slf4j。

3.如同引入了其他的日志框架一定要把这个框架的默认日志依赖除掉。

       <dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>5.0.8.RELEASE</version>
			<exclusions>
				<exclusion>
					<groupId>commons-logging</groupId>
					<artifactId>commons-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

四、logback.xml例子

logback.xml:直接被日志框架识别。

logback-spring.xml:由Springboot调用进行日志配置的识别,能使用springProfile 标签。

##spring.profiles.active=dev
##spring.profiles.active=!dev
<springProfile name="staging>

##配置在某个环境下生效。
</springProfile>

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="LOG_HOME" value="./log" />

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

	<appender name="logstash"
		class="net.logstash.logback.appender.LogstashTcpSocketAppender">
		<destination>114.67.83.201:9250</destination>
		<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
			<providers>
				<timestamp/>
				<version/>
				<message/>
				<loggerName/>
				<threadName/>
				<logLevel/>
				<callerData/>
			</providers>
		</encoder>
	</appender>
	<appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
	    <destination>114.67.83.201:9250</destination>
	    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
	        <jsonFactoryDecorator class="net.logstash.logback.decorate.CharacterEscapesJsonFactoryDecorator">
	            <escape>
	                <targetCharacterCode>10</targetCharacterCode>
	                <escapeSequence>\u2028</escapeSequence>
	            </escape>
	        </jsonFactoryDecorator>
	        <providers>
	            <pattern>
	                <pattern>
	                    {
	                    "timestamp":"%date{ISO8601}",
	                    "appname":"test",
	                    "message":"[%d{yyyy-MM-dd HH:mm:ss.SSS}][%p][%t][%l{80}|%L]%m"}%n
	                    }
	                </pattern>
	            </pattern>
	        </providers>
	    </encoder>
	    <keepAliveDuration>5 minutes</keepAliveDuration>
	</appender>
    <appender name="FILE"  class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/day.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxHistory>15</maxHistory>
            <maxFileSize>100MB</maxFileSize>  
            <totalSizeCap>50GB</totalSizeCap>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
        <appender-ref ref="STASH" />
    </root>
	<logger name="org.hibernate" level="WARN"/>
</configuration>

 

本文档为查看驰狼课堂的《Spring Boot视频教程(上)核心技术篇》所做的学习笔记,课堂地址:

http://www.chilangedu.com/course/1489582623.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值