我正在使用 logback redis appender 将 logback 日志存储到 redis。 redis-logback-appender 的 pom 依赖如下。
<dependency>
<groupId>com.cwbase</groupId>
<artifactId>logback-redis-appender</artifactId>
<version>1.1.0</version>
</dependency>
logback.xml 文件如下所示。作为后备机制,如果 redis 出现故障,我需要将日志文件存储在本地磁盘中。
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<timestamp key="byDay" datePattern="yyyyMMdd'T'HHmmss" />
<appender name="LOGSTASH" class="com.cwbase.logback.RedisAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %-5line %logger{36} - %msg%n
</pattern>
</encoder>
<host>localhost</host>
<port>6379</port>
<source>my-test-app</source>
<type>test</type>
<key>my-testlog-app</key>
</appender>
<root level="debug">
<appender-ref ref="LOGSTASH" />
</root>
</configuration>
谁能告诉我如何配置 logback.xml 以在 redis 失败时将日志行写入磁盘中的文件?
最佳答案
使用 JSON 编写日志文件,例如:
<configuration>
<timestamp key="byDay" datePattern="yyyyMMdd'T'HHmmss"/>
<appender name="LOGSTASH" class="com.cwbase.logback.RedisAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %-5line %logger{36} - %msg%n
</pattern>
</encoder>
<host>localhost</host>
<port>6379</port>
<source>my-test-app</source>
<type>test</type>
<key>my-testlog-app</key>
</appender>
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="LOGSTASH"/>
</appender>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>testFile.log</file>
<append>true</append>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<layout class="ch.qos.logback.contrib.json.classic.JsonLayout">
<jsonFormatter class="ch.qos.logback.contrib.jackson.JacksonJsonFormatter">
<!-- prettyPrint is probably ok in dev, but usually not ideal in production: -->
<prettyPrint>true</prettyPrint>
</jsonFormatter>
<context>api</context>
<timestampFormat>yyyy-MM-dd'T'HH:mm:ss.SSS'Z'</timestampFormat>
<timestampFormatTimezoneId>UTC</timestampFormatTimezoneId>
<appendLineSeparator>true</appendLineSeparator>
</layout>
<!-- <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> -->
</encoder>
</appender>
<root level="debug">
<appender-ref ref="FILE"/>
<appender-ref ref="ASYNC"/>
</root>
</configuration>
我还添加了异步附加程序,因为缓慢/不可用的 Redis 会减慢/破坏您的应用程序,因为所有 Redis 通信都是使用 TCP 同步的。使用 logstash 从您的日志文件解析连续的 JSON 流或使用 GELF 可以解耦事物,因此您的应用程序不会受到损害。
关于java - 如果 redis 失败,如何在使用 redis-logback-appender 时将日志行写入磁盘中的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28764640/