A-A+

ELK简单入门-Log4j2

2020年11月02日 技术, 默认 暂无评论 阅读 2,083 次

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

今天简单介绍一下日志的输入端,这里使用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">172.16.100.70: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。

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

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

觉的不错?可以关注我的公众号↑↑↑

给我留言

Copyright © 字痕随行 保留所有权利.   Theme  Ality

用户登录

分享到: