我正在使用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失败时将日志行写入磁盘中的文件吗?
答案 0 :(得分:3)
使用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>
我还添加了异步appender,因为慢速/不可用的Redis会减慢/中断您的应用程序,因为所有Redis通信都是使用TCP同步的。使用logstash从日志文件中解析连续的JSON流或使用GELF可以解耦事物,因此您的应用程序不会受到损害。