【问题标题】:Multiple writers for tinylogtinylog 的多个作者
【发布时间】:2013-10-04 11:25:17
【问题描述】:

我正在使用tinylog 来满足我的日志记录需求,并且想知道是否有人知道如何记录到文件控制台。当我使用下面的配置时,我只能在控制台上获得输出。当我删除.writer(new ConsoleWriter())时,日志记录仅用于文件(正如人们所期望的那样)。

Configurator.currentConfig()
                          .level(LoggingLevel.valueOf("TRACE"))
                          .writer(new RollingFileWriter(file,10))
                          .writer(new ConsoleWriter())
                          .activate();

【问题讨论】:

  • 在旁注中,对于任何正在寻找非常简单的日志记录的人 - 我强烈推荐 tinylog。

标签: java logging tinylog


【解决方案1】:

根据文档,这是可能的(现在),“技巧”是调用 addWriter() 而不是多次调用 writer()方法。

引用http://www.tinylog.org/configuration#writers:

可以并行使用多个编写器。例如,可以将日志条目同时写入控制台和日志文件。 示例:

Configurator.currentConfig()    
  .writer(new ConsoleWriter())    
  .addWriter(new FileWriter("log.txt"))    
  .activate();

【讨论】:

    【解决方案2】:

    AFAIK 开箱即用的 tinylog 无法做到这一点,但您始终可以像这样实现自己的复合编写器:

    public class MultiWriter implements LoggingWriter {
       private List<LoggingWriter> writers;
    
       public MultiWriter(List<LoggingWriter> writers) {
          this.writers = writers;
       }   
    
       @Override
       public void write(LoggingLevel level, String logEntry) {
          for (LoggingWriter writer : writers) {
             writer.write (level, logEntry);
          }
       }
    }
    

    然后像这样使用它:

    Configurator.currentConfig()
                              .level(LoggingLevel.valueOf("TRACE"))
                              .writer(new MultiWriter(Arrays.asList(
                                 new RollingFileWriter(file,10), new ConsoleWriter()))
                              .activate();
    

    【讨论】:

    • 当然,您可能想做一些比保存传递给构造函数的 List 更健壮(即安全)的事情,但我更喜欢保持答案的代码最少,这样它会更容易阅读。
    • 感谢您的详尽回答。我想了很多,但只是想在开始编写自己的 Writer 之前确定一下。
    【解决方案3】:
    You can use multiple file writers to write logs on different logging level.
    According to docs
    
     1. Using property file
    
    tinylog.writer1 = console
            tinylog.writer1.level = trace
            tinylog.writer2 = file
            tinylog.writer2.filename = log.txt
            tinylog.writer2.level = info
    
     2. Using java code
    
    
    Configurator.currentConfig()
                  .writer(new ConsoleWriter(), Level.TRACE)
                  .addWriter(new FileWriter("log.txt"), Level.INFO)
                  .activate();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多