0

我正在使用 Tinylog 记录我的 java 应用程序中的所有内容。我捕获所有异常并记录它们。

<dependency>
    <groupId>org.tinylog</groupId>
    <artifactId>tinylog-api</artifactId>
    <version>2.2.1</version>
</dependency>

<dependency>
    <groupId>org.tinylog</groupId>
    <artifactId>tinylog-impl</artifactId>
    <version>2.2.1</version>
</dependency>

我正在控制台和文件上写日志。这是我的tinylog.properties文件

writer1= console
writer2 = rolling file
writer2.file = /var/log/oozie-monitor-log/monitor-{count}.log
writer2.charset  = UTF-8
writer2.append   = true
writer2.buffered = false
writer2.backups  = 15
#writer1.level = debug
#writer2.level = debug
writer2.policies = daily
writer1.format = {date: HH:mm:ss.SSS} {level}: {message}
writer2.format = {date: HH:mm:ss.SSS} {level}: {message}

现在的问题是 Tinylog 没有捕获到一些系统错误和警告。例如,我在控制台上看到以下日志,但这些日志在日志文件中可用

log4j:WARN No appenders could be found for logger (org.apache.hadoop.util.Shell).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/neeleshnirmal/.m2/repository/org/slf4j/slf4j-simple/1.6.6/slf4j-simple-1.6.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/neeleshnirmal/.m2/repository/org/slf4j/slf4j-log4j12/1.6.6/slf4j-log4j12-1.6.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.SimpleLoggerFactory]

所以我的问题是如何配置 Tinylog 来捕获系统错误流?

4

1 回答 1

1

tinylog 不提供任何适配器来将控制台输出转发到日志框架。只需几行代码就可以开发出这样的适配器。但是,它对您没有帮助,因为它会在您的用例中创建一个无限循环,因为您还使用控制台编写器将日志条目输出到控制台。因此,这种假设的控制台适配器还将捕获来自控制台编写器的控制台输出并再次发送到控制台编写器。

相反,我建议修复警告。您的警告示例很容易修复:从类路径中删除 slf4j-simple-1.6.6.jar、slf4j-log4j12-1.6.6.jar 和 log4j JAR。之后您可以添加slf4j-tinyloglog4j1.2-api。这不仅会修复警告,还会将所有日志条目从 SLF4J 和 Log4j 转发到 tinylog。

于 2021-08-27T14:42:56.127 回答