Java中多环境Logback配置与ELK日志发送

Posted 宋兴柱-Sindrol

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中多环境Logback配置与ELK日志发送相关的知识,希望对你有一定的参考价值。

Java中多环境Logback配置与ELK日志发送
 
一、项目基于SpringBoot实现,引入SpringBoot相关库后,本文还要讲上传到ELK的Logstash,所以需要在pom.xml中加入:
        <!-- https://mvnrepository.com/artifact/net.logstash.logback/logstash-logback-encoder -->
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>5.2</version>
        </dependency>
 
二、基于SpringBoot,要实现日志的多环境配置,比如testdevuatprod,这时需要把logback.xml改为logback-spring.xml,否则无法使用基于 spring.profiles.active=dev 等方式来配置环境。
 
<?xml version="1.0" encoding="UTF-8" ?>
<!-- scan="true"    当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。 -->
<!-- scanPeriod="30 seconds"   设置每30秒自动扫描,若没有指定具体单位则以milliseconds为标准(单位:milliseconds, seconds, minutes or hours)  -->
<!-- debug="false"当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。-->
<configuration scan="true" scanPeriod="30 seconds">
    <!-- 上下文名称  -->
    <contextName>test</contextName>

    <!-- 存放日志文件路径 -->
    <property name="Log_Home" value="./logs"/>

    <!-- INFO级别 -->
    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <File>${Log_Home}/info.log</File>
        <!-- 根据时间来制定滚动策略 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <FileNamePattern>
                ${Log_Home}/info.%d{yyyy-MM-dd}.%i.log.gz
            </FileNamePattern>
            <!-- 多久后自动清楚旧的日志文件,单位:月 -->
            <MaxHistory>12</MaxHistory>
            <TimeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- 默认值是 10MB,文档最大值 -->
                <MaxFileSize>100MB</MaxFileSize>
            </TimeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>

        <encoder>
            <Pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</Pattern>
        </encoder>
    </appender>
    <!-- ch.qos.logback.core.ConsoleAppender 控制台输出 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 -->
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>

    <!--上传日志到LogStash-->
    <appender name="LOGSTASH_uat"
              class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>172.16.4.141:5044</destination>
        <!-- encoder必须配置,有多种可选 -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <customFields>{"appName":"backend-sync"}</customFields>
        </encoder>
        <connectionStrategy>
            <roundRobin>
                <connectionTTL>5 minutes</connectionTTL>
            </roundRobin>
        </connectionStrategy>
    </appender>
    <!--上传日志到LogStash-->
    <appender name="LOGSTASH_dev"
              class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>172.16.4.141:5044</destination>
        <!-- encoder必须配置,有多种可选 -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <customFields>{"appName":"backend-sync"}</customFields>
        </encoder>
        <connectionStrategy>
            <roundRobin>
                <connectionTTL>5 minutes</connectionTTL>
            </roundRobin>
        </connectionStrategy>
    </appender>
    <springProfile name="uat,prod">
        <!-- 当前日志总级别为TRACE、DEBUG、INFO、 WARN、ERROR、ALL和 OF -->
        <root level="WARN">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE_INFO"/>
            <appender-ref ref="LOGSTASH_uat"/>
        </root>
        <logger name="com.yungoal" level="INFO">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE_INFO"/>
            <appender-ref ref="LOGSTASH_uat"/>
        </logger>
    </springProfile>
    <springProfile name="dev,test">
        <!-- 当前日志总级别为TRACE、DEBUG、INFO、 WARN、ERROR、ALL和 OF -->
        <root level="WARN">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE_INFO"/>
            <appender-ref ref="LOGSTASH_dev"/>
        </root>
        <logger name="com.yungoal" level="INFO">
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="FILE_INFO"/>
            <appender-ref ref="LOGSTASH_dev"/>
        </logger>
    </springProfile>
</configuration>

 

 
 
三、使用方法
    方法一:java -jar myapplication.jar --spring.profiles.active=dev
    方法二:创建spring boot的application.properties在类目录下,然后里面加入一行spring.profiles.active=dev,然后再建立几个环境文件,如application-dev.properties、application-uat.properties等,系统将自动通过application.properties中的spring.profiles.active=dev来选择。
 
 

以上是关于Java中多环境Logback配置与ELK日志发送的主要内容,如果未能解决你的问题,请参考以下文章

springboot整合logback集成elk实现日志的汇总分析统计和检索功能

ELK 上手3 logback接入logstash

ELK 上手3 logback接入logstash

Spring Boot 使用 Log4j2 & Logback 输出日志到 EKL

ELK-- ELK5.X+logback搭建日志平台

springboot如何实现logback不同环境日志输出路径不同