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,要实现日志的多环境配置,比如test\dev\uat\prod,这时需要把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来选择。

原文地址:https://www.cnblogs.com/songxingzhu/p/10060976.html

时间: 2024-08-29 18:28:21

Java中多环境Logback配置与ELK日志发送的相关文章

JAVA中的环境变量配置 PATH CLASSPATH

1.CLASSPATH是什么?它的作用是什么? 首先,classpath 是javac编译器的一个环境变量.它的作用与import.package关键字有关.当你写下improt java.util.*时,编译器面对import关键字时,就知道你要引入java.util这个package中的类:但是编译器如何知道你把这个package放在哪里了呢?所以你首先得告诉编译器这个package的所在位置:如何告诉它呢?就是设置CLASSPATH啦 :) 如果java.util这个package在c:/

java中的环境变量的配置

作为初学者来说配置环境变量是初学者的第一步: 下载并安装JDK1.60(或以上版本),假设安装在X:\jdk150目录下 打开:控制面板 系统 高级 环境变量 变量名 变量值 path .;X:\jdk140\bin ClassPath .;X:\jdk140\lib\tools.jar; .;X:\jdk140\lib\dt.jar; JAVA_HOME X:\jdk140 path 路径是为了保证在任何路径下都能找到,使用java的指令. 配置ClassPath路径是为了虚拟机能够找到我们要

Java开发常用环境变量配置

1. JDK变量名:JAVA_HOME变量值:D:\Program Files\Java\jdk1.7.0_25(即JDK的安装路径)配置解析:方便引用.归一原则(%JAVA_HOME%),第三方软件约定. 变量名:Path(该变量名在系统变量中已经存在)变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin配置解析:使系统在任何路径下都可以识别javac,java命令. 变量名:classpath变量值:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib

Spring装配bean(在java中进行显式配置)

1.简单介绍 Spring提供了三种装配机制: 1.在XML中进行显式配置: 2.在java中进行显式配置: 3.隐式的bean发现机制和自动装配. 其中,1和3项在项目中经常使用,而在java中进行显示配置方式很少使用.本文专门介绍第2种方式. 如果在项目中,我们需要将第三方库装配到spring中,这时候就没法使用隐式装配方式(没法在第三方库中加@Component等注解),这时候, 就需要在两种显式配置中选方法配置. 其中在java中进行显式配置方式是更好的方案,因为它更为强大.类型安全并且

java中获取环境变量

分为获取java自身的一些环境变量和和操作系统相关的环境变量. 获取JVM相关的一些变量 在运行时设置一个环境变量 debug 为 true: java -Ddebug=true YourClass在程序中设置一个环境变量 debug 为 true: System.setProperty( "debug", "true" );获取一个环境变量 debug : String debug = System.getProperty( "debug" )

java中JDK环境变量的配置

JDK的配置在 window中的配置,我的电脑-->属性-->高级系统设置-->高级-->环境变量中配置,具体下图 用户变量是指此配置在当前用户中生效 系统变量是指此配置在当前系统中生效 JDK需要配置的环境变量包括 JAVA_HOME:配置到jdk的安装目录 PATH:配置为%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;"或者是直接"%JAVA_HOME%\bin; CLASSPATH:%JAVA_HOME%\lib\dt.jar;%

Java基础—JDK环境变量配置

1.安装JDK 下载网址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 注意点:一般只修改安装路径的盘符(C换D即可) 2.配置环境变量 以WIN8.1为例,依次操作步骤:这台电脑->右键属性->高级系统设置->环境变量 配置JAVA_HOME:点击[新建],新建一个系统环境变量 名称为:JAVA_HOME 值为:JDK安装路径(这里以安装时将默认路径盘符C换为D为例

JAVA笔记一环境变量配置

1:下载对应版本的JDK1.8并安装安装过程中可以自定义安装目录等信息,例如我们选择安装目录为:C:\Program Files\Java\jdk1.8.0 2:安装完成后,右击“我的电脑”点击“属性”: 3:单击“高级系统设置”: 4:在“系统变量”中,设置3项属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓),若已存在则点击“编辑”,不存在则点击“新建”: (1).JAVA_HOME指明JDK安装路径,就是刚才安装时所选择的路径C:\Program Files\Java\

Java+Python+Jython环境变量配置

一.Java 环境变量配置: 新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变量值:C:\Program Files\Java\jdk1.7.0变量名:CLASSPATH 变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; 其中变量值为你自己安装jdk的文件目录这里要注意. 选择“系统变量”中变量名为“Path”的环境变量,双击该变量,把JDK安装路径中bin目录的绝对路径,添加到Path变量的值中,