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

对日志返回xml中的不同追加器共享相同的编码器设置

孟茂
2023-03-14

例如。

<configuration>
  <appender name="FILE_LOG" class="ch.qos.logback.core.FileAppender">
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
      ... configuration can be shared ...
    </encoder>
  </appender>
  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
      ... repeated the exact same configuration ...
    </encoder>
  </appender>

我知道有这个“include”特性,但似乎必须从根级别(即appender)开始进行包含。是否有一种方法可以在编码器级别“包含”?

共有1个答案

孟均
2023-03-14

不幸的是,登录并没有提供在xml配置文件中完全共享编码器配置的方法。

相反,你可以

  1. 定义扩展net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder
  2. 的类
  3. 在该类中以编程方式执行配置,然后
  4. 在XML中引用类。
public class JsonEncoder extends LoggingEventCompositeJsonEncoder {
    public JsonEncoder() {
    }
    @Override
    public void start() {
        // Note: you can access logback properties via getContext().getProperty(...)

        JsonProviders<ILoggingEvent> providers = getProviders();
        providers.addProvider(new LoggingEventFormattedTimestampJsonProvider());
        providers.addProvider(new LogLevelJsonProvider());
        providers.addProvider(new MessageJsonProvider());
        providers.addProvider(new ThreadNameJsonProvider());
        providers.addProvider(new LoggerNameJsonProvider());
        providers.addProvider(new MdcJsonProvider());
        providers.addProvider(new LogstashMarkersJsonProvider());
        providers.addProvider(new StackTraceJsonProvider());
        providers.addProvider(new ArgumentsJsonProvider());
        super.start();
    }
}
<configuration>
  <appender name="FILE_LOG" class="ch.qos.logback.core.FileAppender">
    <encoder class="your.package.JsonEncoder"/>
  </appender>
  <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder class="your.package.JsonEncoder"/>
  </appender>
 类似资料:
  • 以下是我的java logback配置: 我想在这里做的是:我有两个日志追加器:一个用于控制台,另一个用于日志文件;但是对于相同的java软件包(例如:组织.apache.zookeeper),我想使用两个不同的日志级别,INFO用于文件追加器和错误用于康多尔;但是我的日志配置优势无法正常工作。任何人都可以找出我的错误或一些解决方案吗?

  • 由于log4j的官方文档是一个断开的链接,而且入门指南对我没有帮助,所以我想知道如何使用文件而不是文件为同一个记录器使用两个具有不同日志级别的追加器。 例如,像这样:

  • 我希望文件记录器以这样的方式配置日志类别'X' 记录器one在信息级别上记录“X”,在调试级别上记录其他东西 记录器在调试级别上有两个日志“x”

  • 我想做的很直截了当: 我只希望在控制台追加器上显示重要的消息,而我希望将详细的消息路由到文件追加器。 我还尝试向添加一个ThresholdFilter,但这也不能过滤它。

  • 我已经为log4net实现了一个自定义附加器,我正在其中记录到文件并发送邮件。我想为每个案例记录不同的消息字符串。下面的代码在文件中创建两个日志条目,一个带有附加的字符串 但是我不想在做的时候登录到文件。 我的配置文件,一个追加器是使用配置文件添加的,另一个是dll,所以它在运行时添加。 第一附录: 第二个追加器(在运行时添加):

  • 问题内容: 我需要不同的类加载器才能卸载类。但是我需要在它们之间共享对象(实际上我正在获得ClassCastException)。那么解决该问题的解决方案是什么?谢谢 问题答案: 来自不同类加载器的对象可以通过公共类加载器加载的接口和类彼此交互。