springboot接入elk分布式日志管理(并实现日志滚动更新,开发环境、生产环境动态灵活配置)

本文用于springboot项目介入elk分布式日志管理系统说明,springboot项目使用logback进行日志管理,通过logback直接写入logstash管道,再由管道输出至elasticsearch,由kibana进行配置展示。

  1. 版本说明:本文搭建elk为8.1.2版本,如升级版本,或版本不兼容情况,需要自行匹配版本
    依赖引入,在pom包中加入logback,logstash依赖:

	
		net.logstash.logback
		logstash-logback-encoder
		7.1.1
	
  1. 添加logback日志配置文件,实现本地环境和生产环境自动配置,本文提供了两套配置文件,由properties文件指定项目启动时的日志配置文件,关于xml文件中相关配置说明,本文不再做过多阐述
  • 项目properties配置项增加以下两个参数:
# 让apollo加载在xml加载之前
apollo.bootstrap.eagerLoad.enabled=true
# 指定日志的配置文件(开发环境配置)
logging.config=classpath:logback-dev.xml
# 指定日志的配置文件(生产环境配置)
# logging.config=classpath:logback-prod.xml
  • logback-dev.xml 开发环境无需过多配置,只需要在控制台正常打印info日志即可







<configuration scan="true" scanPeriod="10 seconds">
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    
    <property name="appName" value="ricefarm-common"/>
    
    <property name="LOG_HOME" value="./logs" />

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

configuration>
  • logback-prod.xml 生产环境日志配置文件参考,该配置,会将error日志写入logstash ,并在日志中加入appName字段,配合管道完成每日动态索引






<configuration scan="true" scanPeriod="10 seconds">
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    
    <property name="appName" value="ricefarm-common"/>
    
    <property name="LOG_HOME" value="./logs" />

        <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
                <level>ERRORlevel>
            filter>
            <!-- 此处填写logstash管道暴露端口,自行修改 --!>
            <destination>127.0.0.1:4560destination>
            <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <!-- 添加自定义服务标识字段,管道中可以将该字段处理成索引标识 --!>
                <customFields>{"appName":"${appName}"}customFields>
            encoder>
        appender>

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

    
    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <File>${LOG_HOME}/${appName}-info.logFile>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            
            <fileNamePattern>${LOG_HOME}/${appName}-info-%d{yyyy-MM-dd}.%i.logfileNamePattern>
            
            <maxHistory>7maxHistory>
            
            <maxFileSize>100MBmaxFileSize>
        rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%npattern>
        encoder>
    appender>

    
    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERRORlevel>
        filter>
        <File>${LOG_HOME}/${appName}-error.logFile>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${appName}-error-%d{yyyy-MM-dd}.%i.logfileNamePattern>
            <maxHistory>14maxHistory>
            <maxFileSize>100MBmaxFileSize>
        rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${PID:-} --- [%t] %logger{50} - %msg%npattern>
        encoder>
    appender>


        
        <root level="info">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="LOGSTASH" />
            <appender-ref ref="INFO_FILE" />
            <appender-ref ref="ERROR_FILE" />
        root>

configuration>
  1. 如果项目通过apollo进行配置管理,还需要在启动参数加上
-Dapollo.bootstrap.enabled=true
-Dapollo.bootstrap.eagerLoad.enabled=true
  1. 当前配置文件选择prod时,会在实现滚动更新日志文件的同时,将error日志写入logstash中。以下操作是利用sl4j 写入error日志:
    springboot接入elk分布式日志管理(并实现日志滚动更新,开发环境、生产环境动态灵活配置)_第1张图片

你可能感兴趣的:(程序人生,spring,boot,分布式,elk,java,maven)