当前位置: 首页 > 知识库问答 >
问题:

将failsafe登录到控制台日志记录

轩辕嘉平
2023-03-14

我正在迁移一个遗留的应用程序来使用logback,在这个过程中我试图保持所有的旧功能以相同的方式工作。遗留应用程序所做的一件事是,如果无法写入日志文件(由于空间不足、权限不正确等原因),则将日志记录到控制台

对于logback,似乎应该由StatusListener来处理这个问题,我可以使用getOrigin获得筛选后的附加程序,但我不知道如何获得与origin附加程序相关联的日志记录程序。有可能吗?

<statusListener class="com.example.LogStatusListener"/>

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
  <encoder>
    <pattern>WARNING: %logger is only being logged to CONSOLE!%n%msg%n</pattern>
  </encoder>
</appender>

<appender name="FILE-SIMPLE" class="ch.qos.logback.classic.sift.SiftingAppender">
  <discriminator class="com.example.CustomDiscriminator"/>
  <sift>
    <appender name="FILE-${logfile}" class="ch.qos.logback.core.rolling.FileAppender">
      <file>${logfile}.log</file>
      <encoder>
        <pattern>%msg%n</pattern>
      </encoder>
    </appender>
  </sift>
</appender>

<logger name="debug">
  <appender-ref ref="FILE-SIMPLE" />
</logger>
public class LogStatusListener implements StatusListener {
    @Override
    public void addStatusEvent(Status status) {
        if (status instanceof ErrorStatus) {
            System.err.println(status);
            if (status.getOrigin() instanceof Appender) {
                Appender origin = (Appender) status.getOrigin();
                if (!origin.isStarted()) {
                    // find the logger associated with origin, and add ConsoleAppender
                }
            }
        }
    }
}

共有1个答案

孔逸春
2023-03-14

状态消息可以由任何日志回传组件生成,而不仅仅是附加器。状态消息没有与其关联的记录器,因此无法获取状态消息的记录器。顺便说一下,logback实现了从I/O错误中的优雅恢复。例如,如果磁盘已满,则logback将停止日志记录,并在磁盘上有可用空间时再次自动开始日志记录。请注意,在此期间发生的日志记录事件将丢失。

 类似资料:
  • 问题内容: 当运行Spring / Hibernate应用程序时,我在控制台上看到以下不需要的输出: 我已经像这样配置了Log4j记录器: 如何使这些消息静音? 问题答案: 我相当确定您正在看到这些SQL语句,因为Hibernate配置中某处的属性“ hibernate.show_sql”设置为true。找到该设置并将其更改为false。

  • 当我尝试运行这段代码时,我在Level Object中面临一些问题。 错误:

  • 问题内容: 我正在使用hibernate3,并希望阻止它将所有启动消息转储到控制台。我尝试注释掉log4j.properties中的stdout行,但是没有运气。我在下面粘贴了我的日志文件。另外,我在标准项目结构中使用eclipse,并且在项目文件夹的根目录和bin文件夹中都有一个log4j.properties副本。 问题答案: 尝试设置更合理的日志记录级别。日志级别设置为仅记录在事件的装置或更

  • 控制台运行在具有nova-dashboard这一服务器角色的节点上。 向这个云服务的管理员咨询能登录控制台的主机名,IP地址,账号和密码。 打开一个启用了JavaScript和Cookies的浏览器。 注意: 如果要使用VNC客户端,你的浏览器需要支持HTML5 Canvas和HTML5 WebSockets。VNC浏览器基于noVNC。详情请查阅noVNC: HTML5 VNC Client。想

  • 当JMeter以非gui模式启动时,它显示了控制台上的一些日志,如下所示 但实际的测试执行日志会写入一个名为jmeter的单独日志文件。日志,它记录log4J级别的执行日志。 我们可以把这个jmeter.log内容也直接到STDOUT控制台吗?我知道我们可以将日志管道到控制台。但是有没有一种方法可以使用JMeter配置来做到这一点? 我将JMeter作为Kubernetes集群上的容器运行,并希望

  • 我曾试图使用log4j2在一个Spring Boot应用程序中进行日志记录,它工作正常,但问题是,并非所有日志记录都按照log4j2中的配置进入日志文件。xml很少有日志被引导到控制台,后面是我的pom片段,后面是log4j2。xml和控制台的输出,以及日志文件的输出 波姆。xml log4j2。xml 控制台输出 日志文件输出