ELK简单入门-Log4j2

Posted 字痕随行

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ELK简单入门-Log4j2相关的知识,希望对你有一定的参考价值。

最近正好上项目,又赶上我正在看一本网络小说,所以时间挤都挤不出来了。


今天简单介绍一下日志的输入端,这里使用Log4j2来采集日志。


简单介绍一下SpringBoot和Log4j2的整合:


  1.  要排除掉SpringBoot自带的logging日志框架。

  2. 加入log4j2的starter。


pom文件如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <!--排除SpringBoot默认的日志框架-->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>


在resources文件夹下加入log4j2.xml文件,开启Kafka:

<appenders>
    <kafka name="alarmKafka" topic="host" ignoreExceptions="false">
        <patternLayout pattern="${alarm_pattern}"/>
        <property name="bootstrap.servers">
127.0.0.1:9092</property>
        <!--默认kafka无法接收新消息会有
30s的阻塞等待时间,手动配置缩短时间-->
        <property name=
"timeout.ms">2000</property>
    </kafka>
</appenders>
<loggers>
    <root level=
"WARN">
        <AppenderRef ref=
"console"/>
        <AppenderRef ref=
"alarmKafka" />
    </root>
</loggers>


以上配置虽然能够正常运行,但是如果Kafka宕机,日志就会丢失。此时,就需要一种容错手段。


我这边的场景是,如果Kafka宕机,就把日志写在本地指定的文件中,以便后续进行处理。


这时候,就需要启用Log4j2的Failover,具体的配置如下:

<appenders>
    <kafka name="alarmKafka" topic="host" ignoreExceptions="false">
        <patternLayout pattern="${alarm_pattern}"/>
        <property name="bootstrap.servers">
127.0.0.1:9092</property>
        <property name=
"timeout.ms">2000</property>
    </kafka>

    <rollingFile name=
"failoverKafkaAlarmLog" fileName="/log/failoverKafka/log4jtest-alarm-request.log"
                 filePattern=
"/log/failoverKafka/log4jtest-alarm-request.%d{yyyy-MM-dd}.log">
        <ThresholdFilter level=
"INFO" onMatch="ACCEPT" onMismatch="DENY"/>
        <patternLayout>
            <Pattern>${alarm_pattern}</Pattern>
        </patternLayout>
        <policies>
            <TimeBasedTriggeringPolicy />
        </policies>
    </rollingFile>

    <console name=
"console" target="SYSTEM_OUT">
        <patternLayout>
            <Pattern>[%-
4level]%d{YYYY-MM-dd HH:mm:ss}:%m%n</Pattern>
        </patternLayout>
    </console>

    <!--retryIntervalSeconds重试主appender ‘Kafka’距离上次失败得时间-->
    <Failover name=
"alarmFailover" primary="alarmKafka" retryIntervalSeconds="60">
        <Failovers>
            <appenderRef ref=
"failoverKafkaAlarmLog"/>
        </Failovers>
    </Failover>

    <!--异步-->
    <Async name=
"kafkaAlarmLogger" level="INFO" additivity="false">
        <appender-ref ref=
"alarmFailover"/>
    </Async>
</appenders>


以上配置中的细节,有需要的可以自行百度,这里只是需要注意的是:


Kafka Appender中的ignoreExceptions一定要设置为false,另外这里log4j2 stater的版本是2.2.5.RELEASE。


其实我个人觉得这块没什么好说的,都是固定配置,不写错了就行,网络上的资料也很齐全,我这里只是做个记录而已。


以上,如有错误,欢迎指正。



以上是关于ELK简单入门-Log4j2的主要内容,如果未能解决你的问题,请参考以下文章

ELK菜鸟手记 环境配置+log4j日志记录

ELK入门与简单应用

集成log4jlog4j2logback与elk

ELK菜鸟手记 - 利用filebeat和不同端口把不同服务器上的log4j日志传输到同一台ELK服务器

ELK-log4j2异步输出+logstash

如何利用filebeat把不同服务器上的log4j日志传输到同一台ELK服务器