在实际开发工作中,微服务日志收集、安全日志上报等功能是志在必行的功能,以下就是一种日志上报方式。参考 https://github.com/danielwegener/logback-kafka-appender

1.使用maven引入所需要的jar包

		<!-- logback-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>
			<version>1.2.3</version>
			<scope>runtime</scope>
		</dependency>

2.application.properties文件添加一下配置

# kafka配置
spring.kafka.appender.bootstrap.servers=localhost:9092
spring.kafka.appender.topic=test

3.修改logback.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- 日志存放路径 -->
    <property name="log.path" value="/mnt/logs" />
    <!-- 日志输出格式 -->
    <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - [%method,%line] - %msg%n" />
    <!-- kafka 配置 -->
    <springProperty scope="context" name="kafka.servers" source="spring.kafka.appender.bootstrap.servers"/>-->
    <springProperty scope="context" name="kafka.topic" source="spring.kafka.appender.topic"/>
    <!-- 控制台输出 -->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%black %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger) - %cyan(%msg%n)</pattern>
        </encoder>
    </appender>

    <!-- 日志文件输出 -->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}/logger.log</file>
        <!-- 循环政策:基于时间创建日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件名格式 -->
            <fileNamePattern>${log.path}/logger.%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志最大的历史 30天 -->
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%black %red(%d{yyyy-MM-dd HH:mm:ss}) %green([%thread]) %highlight(%-5level) %boldMagenta(%logger) - %cyan(%msg%n)</pattern>
        </encoder>
    </appender>

    <!-- 日志信息发送kafka -->
    <appender name="kafkaAppender" class="com.github.danielwegener.logback.kafka.KafkaAppender">
        <encoder>
            <pattern>
                {
                "service":"${kafka.servers}",
                "date":"%d{yyyy-MM-dd HH:mm:ss}",
                "level":"%level",
                "thread": "%thread",
                "logger": "%logger{36}",
                "msg":"%msg"
                }
            </pattern>
        </encoder>
        <!-- kafka topic -->
        <topic>${kafka.topic}</topic>
        <!--<topic>test</topic>-->
        <keyingStrategy class="com.github.danielwegener.logback.kafka.keying.NoKeyKeyingStrategy" />
        <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" />
        <!-- kafka 地址 -->
        <producerConfig>bootstrap.servers=${kafka.servers}</producerConfig>
    </appender>

    <!-- 异步传递策略,建议选择异步,不然连接kafka失败,会阻挡服务启动 -->
    <appender name="Async" class="ch.qos.logback.classic.AsyncAppender">
        <appender-ref ref="kafkaAppender" />
    </appender>

    <!--日志-->
    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="file" />
        <appender-ref ref="Async" />
    </root>

</configuration>

 

 

 

 

Logo

Kafka开源项目指南提供详尽教程,助开发者掌握其架构、配置和使用,实现高效数据流管理和实时处理。它高性能、可扩展,适合日志收集和实时数据处理,通过持久化保障数据安全,是企业大数据生态系统的核心。

更多推荐