我正在使用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可以将事情解耦,因此应用程序不会受到损害。
我决定使用slf4j而不是Java自己的日志记录。我已经成功地使用SLF4J登录到控制台。但我不知道如何将其写入日志文件。日志文件将帮助我们收集运行时可能出现的错误。 我通过这样做来实现slf4j, 私有静态最终org.slf4j.LOGGER LOGGER=org.slf4j.loggerfactory.getlogger(class1.class); PropertyConfigurator.
问题内容: 我遇到一种情况,我想将我创建的所有日志写入文本文件。 我们正在使用java.util.logging.Logger API生成日志。 我试过了: 但是仍然只能在控制台上获取我的日志。 问题答案: 试试这个样本。这个对我有用。 在MyLogFile.log产生输出 编辑: 要删除控制台处理程序,请使用 因为ConsoleHandler已向父记录器注册,所有记录器都源自该记录器。
问题内容: 我正在尝试使用Go写入日志文件。 我尝试了几种方法,但都失败了。这是我尝试过的: 日志文件被创建,但是没有任何打印或附加到该文件。为什么? 问题答案: 过去的工作方式一定不同,但这对我有用: 基于Go文档,不能用于,因为它会打开文件“供阅读:” 打开命名文件以供读取。如果成功,则可以使用返回文件上的方法进行读取;关联的文件描述符具有mode 。如果有错误,它将是类型。 编辑 检查后移至
我正在docker容器中运行Apache2,不想向磁盘写入任何内容,只想向stdout和stderr写入日志。我见过几种不同的方法(Supervisord和stdout/stderr,Apache访问stdout日志),但这些方法看起来像是黑客。难道就没有办法默认这样做吗? 需要说明的是,我不想对日志进行跟踪,因为这将导致将内容写入容器中的磁盘。 签入Docker Hub(https://Hub.
问题内容: 我目前正在实施ping / pong缓冲方案,以安全地将文件写入磁盘。我在Linux / CentOS计算机上使用C ++ / Boost。现在,我面临的问题是强制将文件实际写入磁盘。不管文件系统的所有缓存策略(ext3 / ext4)/ SO自定义规则/ RAID控制器/硬盘控制器如何,都可以这样做吗? 最好使用普通的fread()/ fwrite(),c ++ ostream或bo