自定义logger写入日志到kafka中

1.引入开源组件logback-kafka-appender

<!-- kafka-appender -->
        <dependency>
            <groupId>com.github.danielwegener</groupId>
            <artifactId>logback-kafka-appender</artifactId>
            <version>0.2.0-RC2</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
        </dependency>

2.logback-spring.xml添加核心配置

<!-- kafka的appender -->
<appender name="kafkaAppender" class="com.github.danielwegener.logback.kafka.KafkaAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%msg%n</pattern>
        </encoder>
        <topic>${topic.name}</topic>
        <keyingStrategy class="com.github.danielwegener.logback.kafka.keying.NoKeyKeyingStrategy" />
        <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" />
        <producerConfig>retries=3</producerConfig>
        <producerConfig>linger.ms=1000</producerConfig>

        <producerConfig>bootstrap.servers=${mvn.log.kafkaAppender}</producerConfig>
        <producerConfig>client.id=delta</producerConfig>
        <producerConfig>compression.type=snappy</producerConfig>
    </appender>
<!-- 设置异步appender,入队列方式-->
<appender name="KAFKA-ASYNC" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="kafkaAppender" />
        <!-- 设置队列入队时非阻塞,当队列满时会直接丢弃日志。-->
        <neverBlock>true</neverBlock>
    </appender>	
<!-- 将ModifyLog类下的日志发送到kafka -->
<logger name="delta.api.domain.customization.ModifyLog" level="INFO" additivity="false">
	<appender-ref ref="KAFKA-ASYNC"/>
</logger>

3.使用

类中引入logger

 private Logger operatorLogger = LoggerFactory.getLogger(ModifyLog.class);

类中记录日志

ModifyLog modifyLog = ModifyLog.builder()
                    .traceId(IdUtil.randomUUID())
                    .appName(ApplicationRunner.APP_NAME)
                    .erp(LoginContext.getLoginContext().getPin())
                    .modifyTime(System.currentTimeMillis())
                    .entityName(request.getDefinition())
                    .operate(OperatorType.CREATE.name())
                    .before(EMPTY)
                    .after(JsonUtils.toJSONString(request))
                    .build();
operatorLogger.info(JsonUtils.toJSONString(modifyLog));
posted @   SpecialSpeculator  阅读(240)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示
历史上的今天:
2022-06-06 tcp重传排查
点击右上角即可分享
微信分享提示