springcloud项目logback配置异步打印日志到磁盘

前言

最近在项目中对服务器磁盘读写性能做了一个测试,发现服务器性能实在太差了,写入速度一般在13-15M/s的范围,速度太小了
因为这个是新项目来的,想着提高服务性能,减少磁盘io,因此,准备对项目日志进行改造,改为异步写入磁盘

项目框架

基于springcloudalibaba,版本如下:

        <spring-boot.version>2.2.10.RELEASE</spring-boot.version>
        <spring-cloud.version>Hoxton.SR4</spring-cloud.version>
        <spring-cloud-alibaba.version>2.2.5.RELEASE</spring-cloud-alibaba.version>

项目中使用logback来打印日志

改造

logback打印日志是同步写入磁盘的,改成异步,直接修改logback.xml配置就可以了。

<!-- Logback configuration. See http://logback.qos.ch/manual/index.html -->
<configuration debug="false" scan="true"
	scanPeriod="10 seconds">
	<property name="LOG_PATH" value="logs"></property>

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

	<appender name="INFO_FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<File>${LOG_PATH}/info.log</File>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_PATH}/info-%d{yyyy-MM-dd}.log.%i
			</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>100MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<maxHistory>30</maxHistory>
			<totalSizeCap>900MB</totalSizeCap>
		</rollingPolicy>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
			</Pattern>
		</layout>
	</appender>

	<appender name="ERROR_FILE"
		class="ch.qos.logback.core.rolling.RollingFileAppender">
		<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
			<level>ERROR</level>
		</filter>
		<File>${LOG_PATH}/error.log</File>
		<rollingPolicy
			class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
			<fileNamePattern>${LOG_PATH}/error-%d{yyyy-MM-dd}.log.%i
			</fileNamePattern>
			<timeBasedFileNamingAndTriggeringPolicy
				class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
				<maxFileSize>100MB</maxFileSize>
			</timeBasedFileNamingAndTriggeringPolicy>
			<maxHistory>30</maxHistory>
			<totalSizeCap>900MB</totalSizeCap>
		</rollingPolicy>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
			</Pattern>
		</layout>
	</appender>

	<!-- logstash设置 -->
	<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
		<param name="Encoding" value="UTF-8"/>
		<!-- logstash服务器ip -->
		<remoteHost>10.196.201.80</remoteHost>
		<!-- logstash tcp 端口-->
		<port>4569</port>
		<!-- <filter class="com.program.interceptor.ELKFilter"/>-->//引入过滤类
		<!-- encoder is required -->
		<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" >
			<customFields>{"appname":"rocketcenter"}</customFields> // 索引名
		</encoder>
	</appender>

	<appender name="ASYNC_INFO_LOG" class="ch.qos.logback.classic.AsyncAppender">
	    <!-- 不丢失日志,默认值80,如果队列的80%已满,则会丢弃TRACT、DEBUG、INFO级别的日志 -->
	    <discardingThreshold>0</discardingThreshold>
	    <!-- 更改默认的队列的深度,该值会影响性能.默认值256 -->
	    <queueSize>1000</queueSize>
	    <!-- 添加附加的appender,最多只能添加一个 -->
	    <appender-ref ref="INFO_FILE"/>
    </appender>

	<root level="INFO">
		<appender-ref ref="STDOUT" />
		<appender-ref ref="ASYNC_INFO_LOG" />
		<appender-ref ref="logstash"/>
	</root>
	<logger name="com.alibaba.nacos.client" level="WARN" />
	<logger name="RocketmqClient" level="WARN"/>
	<logger name="RocketmqRemoting" level="WARN"/>
</configuration>

只需要增加一个异步的appender就可以了,就不详细说明了,相信通过看注释就可以明白了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值