问题标签 [jul-to-slf4j]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
293 浏览

logging - 使用 jul-to-slf4j WildFly 记录未格式化的消息

我们的应用程序在 WildFly 中运行,但我们使用自定义日志记录,因此jboss-deployment-structure.xml有以下几行:

我们使用 SLF4j 和 Logback 后端,因此项目依赖项(Gradle 格式)包括:

最近我添加了另一个使用java.util.loggingSLF4j 而不是 SLF4j 的库,因此它的日志只会转到标准输出。为了解决这个问题,我添加了另一个依赖项:

并将以下两行 Java 代码添加到应用程序初始化代码中:

现在该库也可以正常记录。

但是,出现了另一个问题:现在 WildFly 消息也写入了我们的日志(似乎它也使用了 java.util.logging)。这并没有那么糟糕(即使我们更喜欢将应用程序和 Web 服务器日志分开),但它们是非格式化的,带有未转换的占位符。例如,在jul-to-slf4j添加 WildFly 之前会记录此消息:

[...] UT005023:对 /Main.html 的异常处理请求

但现在我看到了这个:

[...] UT005023:对 %s 的异常处理请求

我是否需要添加一些额外的配置jul-to-slf4j才能正确格式化消息?或者在处理带有参数的消息时是否存在一些基本限制?

0 投票
0 回答
474 浏览

java - 通过 logging.properties 配置文件安装 SLF4JBridgeHandler 不起作用

我有一个项目,我使用:

  • 阿帕奇 Maven 3.3.3
  • 泽西计划 1.17
  • 春天 3.3.1
  • 雄猫 6
  • Eclipse IDE

我需要记录请求和响应。为了实现它,我将 LoggingFilter 添加到我的web.xml

我在 Eclipse 中运行项目并在 Eclipse 控制台上查看日志记录。

现在,我想使用 Logback 来编写日志文件并使用自定义附加程序,所以我添加到我的pom.xml

要将所有 JUL 日志记录路由到 SLF4J API,我使用org.slf4j.bridge.SLF4JBridgeHandler

我尝试通过创建src/main/resources/logging.properties内容来安装 SLF4JBridgeHandler:

正如它在这里提到的,没有任何事情发生。

如果我使用另一种方法(程序安装)一切正常。

为什么它不适用于logging.properties配置?我错过了什么?

0 投票
2 回答
3400 浏览

java - 将 JUL 日志记录定向到 SLF4J 不起作用

我正在使用使用 java.util.logging的第三方库 ( Sphinx )。我一直在尝试几种方法将其日志路由到 slf4j。我希望使用的日志库是 Log4j2,它的配置如下:

我申请了在这个论坛和其他论坛上能找到的所有解决方案,但没有成功。其中:

我将此 maven 依赖项添加到我的 POM 中:

我还尝试在静态块中调用它:

并尝试设置系统属性:

在我最后一次尝试中,我通过了 VM 参数:

-Djava.util.logging.manager=org.apache.logging.log4j.jul.LogManager

并得到以下异常:

难道我做错了什么?我还能尝试什么?

更新:

我还尝试将 jul 重定向到 log4j2,绕过 slf4j,从而改变了我原来的策略(感谢@rgoers 的建议)。为了做到这一点,我添加了以下依赖项:

并将System 属性设置 java.util.logging.manager为: org.apache.logging.log4j.jul.LogManager

然后狮身人面像日志不见了。我知道它们没有路由到我的 log4j2 记录器,因为大多数 Sphinx 日志都具有 INFO 级别,它们应该由 log4j2 处理。所以还是不正确。

0 投票
1 回答
2311 浏览

java - 将 java.util.logging 重定向到 log4j

我正在使用一个外部 JAR 库,每次使用时都会创建一个日志文件:

这,创建文件lib.loglib.log.lck等...

问题是我的应用程序正在使用 log4j(来自 maven xml):

我想要的很简单,我想将该库日志的所有调用重定向到我的记录器。

我试过使用jul-to-slf4j

https://www.slf4j.org/legacy.html

使用此配置(控制台 + 每日文件):

然后把这段代码放在开头:

有了这个,文件被创建(lib.log),但它是空的。并且输出不会转到pos.log(在 log4j 中配置的那个)。

我错过了什么?谢谢!

0 投票
1 回答
547 浏览

java - 来自 Ignite 的重复日志记录

我在 Dropwizard 应用程序中使用 Apache Ignite,似乎无法让 Ignite 仅通过 slf4j 登录。Dropwizard 带有jul-to-slf4j桥,并在应用程序启动之前安装所有桥。

我已按照设置日志记录的说明进行操作,但仍会出现重复日志:

这是控制台输出:

输出中的第一行看起来像是通过 slf4j,然后带有时间戳的那些看起来像是来自 JUL。还有其他方法可以禁用来自 JUL 的内容吗?

0 投票
1 回答
399 浏览

java - 以编程方式为所有 java.util.logging 记录器设置级别

我在一个使用 slf4j 和 log4j2 作为底层日志框架的应用程序上工作。该应用程序根据应用程序的当前用户提供自定义日志过滤器。一些第三方库java.util.logging在内部使用 (JUL)。我希望这些日志也提交给我的基于用户的过滤器。即,虽然默认日志级别可能是ERROR,但我可以将应用程序配置为在DEBUG特定用户使用它时登录级别。

因此,我集成了jul-to-slf4j桥,以便将 JUL 日志重定向到 slf4j。我还创建了一个自定义的 java.util.logging.Filter ,如此处所述,它实现了我的基于用户的过滤器逻辑。

现在我的问题是 JUL 中的默认日志级别似乎是INFO,并且还有逻辑首先检查要记录的消息的级别是否低于记录器的级别,在这种情况下,消息会立即被拒绝而不会通过过滤器(在本例中是我的自定义过滤器)。正因为如此,我希望所有 JUL 记录器(也是第三方库中使用的)默认具有该级别ALL,以便所有 JUL 日志语句都将通过我的过滤器,在该过滤器中确定是记录消息还是丢弃它。

我已经尝试将 JULs 根记录器及其处理程序级别设置ALL为在 SO 上的多个帖子中所描述的那样,但这似乎并没有像这里看到的那样产生技巧。看起来我必须LogManager相应地配置 JUL,我想知道是否可以在不引入新日志文件的情况下以编程方式进行配置?

0 投票
1 回答
1054 浏览

tomcat - Logback Logstash Tomcat 访问 JSON 日志

有没有人使用 Logstas Logback 编码器将 Tomcat 的访问日志作为 JSON 获得?

即使它应该是可能的(根据文档)我无法让它工作,我一直在与 Tomcat 的类路径地狱作斗争。即使我 100% 确定类必须存在于类路径中,Tomcat 仍在抛出 NoClassDefFoundErrors。它只是没有任何意义了......

我将所有必需的 JAR 放入 Tomcatslib/目录,将它们添加到类路径并设置所需的每个配置文件(遵循多个官方和非官方教程)。

Tomcat 的日志 (catalina.out -> catalina.json) 与 Logstash Logback 编码器一起工作正常,但 Tomcat 的访问日志是一个完全不同的问题......

无论我尝试什么,每次都会导致其中之一:

通过 bin/setenv.sh 将 logback-access.jar(除了所有其他 logback/slf4j/logstash JAR)添加到类路径会破坏整个类路径(带有 的崩溃循环NoClassDefFoundError: org/apache/catalina/Lifecycle)。在没有 logback-access.jar 的情况下添加所有其他 logback/slf4j/logstash JAR 工作正常(但后来导致ClassNotFoundException: ch.qos.logback.access.spi.IAccessEvent但 Tomcat 在没有写入访问日志的情况下运行良好)......

我什至无法提供我当前的状态,因为我不知道最接近解决方案的最“正确”状态是什么......

如果有人将 Tomcat 的访问日志作为 JSON,请告诉我如何(即使您使用不同的编码器)。

已经花费了我几天的谷歌搜索、反复试验和我所有的神经......

更新

这是 Tomcat 的 Classpath 或 ClassLoading 非常完善且毫无意义的证明(使用 JVM 启动-verbose:class),catalina.out输出:

...

该类必须加载到另一个上下文/Classpath/ClassLoader ...我不知道这是如何工作的...

0 投票
1 回答
66 浏览

java - Logback 的“方法”转换字输出问号“?” 使用 AsyncAppender 时

Logback 提供method转换字,但是在我的机器上它在使用 AsyncAppender 时只输出问号:

我正在使用相对简单的配置:

当切换到常规 FileAppender(例如ch.qos.logback.core.rolling.RollingFileAppender)时,它工作正常。

这是一个已知的问题?

0 投票
1 回答
28 浏览

java - SpringBoot 2.6.0 内的项目工作,被迫使用 Log4J1 和 JCL 重定向工作,但 JUL 没有

我有一个项目,其中最新版本现在是 SpringBoot 2.6.0(旧版本是 Tomcat 8 的 WAR)。我有一个子项目/组件连接到迫使我使用 Log4J1 的东西。Logback 运行良好,但我不得不禁用它(由于 Log4J2 遮蔽并破坏了需要 Log4J1 的代码以及需要 Log4J2 的新供应商组件)。

我有:

  1. 通过排除 spring-boot-starter-logging 禁用 Logback
  2. 添加了 spring-boot-starter-log4j 的依赖项

通过 Dependency hierarchy 选项卡(在 Eclipse 中),我可以看到 jcl 和 jul 库,并且在我的日志(控制台和文件附加程序)中,很明显 SpringBoot(jcl 东西)和我的任何项目 jcl 调用都已记录,但任何 JUL 都是不是。

我在这里阅读了大量不同的门票,收集了信息并达到了这一点。所以这一切都很好,除了我似乎无法将 JUL 调用传递给 Log4J1 设置。

我可以看到通过 spring-boot-starter-log4j 引入的 jul-to-slf4j。

我想我会写在这里,因为我确定这是我错过的一些简单的东西,但我想我今天下午已经盯着它太久了!:)

我错过了什么?