将日志写入日志文件以及kafka

时间:2018-06-14 14:54:27

标签: logging apache-kafka logback distributed-system

我目前有微服务环境,每个服务都会将日志写入自己的文件。 我想实现分布式日志记录,为此我找到了使用elk的解决方案。但我不想打扰我目前将日志写入多个文件的架构。

我是否可以将日志写入文件,然后将其发送到kafka主题。

PS。我目前正在使用logback进行日志记录。

2 个答案:

答案 0 :(得分:2)

你只需要在现有配置上添加一个appender,你就不需要打扰"打扰"你的建筑。

Here一个logback kafka appender,您只需添加到pom.xml

<dependency>
    <groupId>com.github.danielwegener</groupId>
    <artifactId>logback-kafka-appender</artifactId>
    <version>0.2.0</version>
    <scope>runtime</scope>
</dependency>
<!-- probably you already have the following or the ones provided by spring, this is an example -->
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.2</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>4.8</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-core</artifactId>
    <version>1.1.6</version>
    <scope>runtime</scope>
</dependency>

并在src/main/resources/logback.xml中,您可以添加appender并使用它:

<appender name="kafkaAppender" class="com.github.danielwegener.logback.kafka.KafkaAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
        <topic>logs</topic>
        <keyingStrategy class="com.github.danielwegener.logback.kafka.keying.NoKeyKeyingStrategy" />
        <deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" />
        <appender-ref ref="STDOUT" />
    </appender>

<root level="info">
    <appender-ref ref="kafkaAppender" />
</root>

如果您查看文档,可以使用其他appender。

答案 1 :(得分:0)

更标准的模式只是将您的微服务中的事件直接发送到Kafka。从那里,您可以将其流式传输到Elasticsearch和任意数量的其他目标。写入日志然后从日志中读取是完全多余的。