问题标签 [apache-commons-logging]

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 投票
3 回答
24771 浏览

java - 如何一起使用 log4j 2.0 和 slf4j 和 Commons Logging

我目前正在启动一个新的 Webapp(在 tomcat 6 上运行)我有使用 slf4j 的组件和使用 commons 日志记录的组件由于多种原因我计划使用 log4j 2.0 作为日志实现(主要用于附加程序:SocketAppender 和 SyslogAppender,但也因为在不丢失日志事件的情况下提升配置重新加载)

现在我的问题是: - 我将新类编程到哪个接口?loag4j 还是 slf4j?甚至公共记录?

  • 部署 jar 的首选方式是什么?将它们放入我的应用程序战争中还是将它们放入 tomcat 库中?

  • 我需要部署什么罐子?log4j(包括 slf4j 和 commons 绑定)、commons logging (slf4j-api-1.7.2.jar) 和 slf4j api (slf4j-api-1.7.2.jar)

0 投票
1 回答
4928 浏览

exception - bean 实例化失败;嵌套异常是 java.lang.NoClassDefFoundError: org/apache/log4j/Logger

我正在尝试让公共日志记录为 log4j 配置工作,但在启动服务器时我不断收到异常。尝试使用可通过另一个公共库获得的 StringUtils 时,我也遇到了类似的异常。

pom依赖:

0 投票
1 回答
1579 浏览

java - Spring 和日志记录属性文件

我正在尝试使用 Spring。Spring的一个依赖是

所以我已经添加commons-logging-1.1.1.jar到我的构建路径中。这一切都很好。我得到这样的东西:

这一切都很好,但我不想把它打印到我的标准输出,我希望它被发送到一个文件中。

目录结构:

所以我想将所有日志从标准输出重定向到日志文件。这可能与春天?

我使用了这里的属性文件:http ://www.tutorialspoint.com/spring/logging_with_log4j.htm ,我从那里得到了我的 Spring 示例。但这似乎没有任何区别。我也在那里添加了一些垃圾,看看是否有任何异常被抛出,但什么也没有。我尝试将文件移动到不同的目录,但它仍然不起作用。

这里是:

有人有什么想法吗?

提前致谢。

0 投票
1 回答
4753 浏览

log4j - jboss 作为 7.1.1 的最终日志

我的耳朵有一个作为子部署的战争。ear 文件有一个 META-INF 目录,其中有一个 jboss-ejb-client.xml 文件,该文件只有一个 ejb-recievers 元素和一个 webscheduler.war。这场战争使用了 commons-logging-api.jar。此应用程序在 jboss 上部署为 7.1.1.final。我想使用 apache log4j 进行日志记录。于是我在ear的meta-inf目录下添加了一个jboss-deployment-structure.xml

我在战争的 lib 目录中有一个 commons-logging.properties 文件,其中包含以下内容,

log4j.configuration=/usr/share/wth/jboss/jboss-as-7.1.1/standalone/configuration/log4j.xml

此外,除了 log4j-1.2.11.jar,我在 lib 中没有任何其他日志框架 jar。(如 SLF4j 等)。如您所见,log4j.xml 位于上述属性所描述的目录中。

问题是当我启动 jboss 时,一些应用程序日志确实被写入 log4j.xml 中描述的日志文件(比如 /a/b/c/srv.log),但同时日志也被写入默认 srv。直接登录 jboss 日志。(jboss/standalone/log/srv.log)。

我缺少什么让 jboss 不使用自己的日志记录并使用我提供的 log4j 配置。

0 投票
2 回答
2732 浏览

java - Log4j 和 commons-logging 的混合使用会导致“类加载死锁”?

我想我发现了一种情况,即 log4j a) 直接和 b) 通过 commons-logging 混合使用会导致某种类加载死锁。我不确定这种情况是否可能发生(JVM 不应该检测到这种情况吗?)以及如何处理它。

问题

在我们的构建系统中,我们目前正在按顺序运行我们的单元测试——为了使构建更快,我们显然可以改变它来并行运行我们的单元测试。但是,如果我们这样做,一些构建会遇到执行超时。在分析这种“挂起构建”的线程转储时,我们发现自己在不同的模块中大部分时间都涉及不同的测试。但它总是归结为尝试初始化 Logger 的两个线程:一个使用Logger.getLogger(直接使用 log4j),另一个使用LogFactory.getLog(使用 commons-logging)。

我的分析

所以我们有一个线程(直接使用 log4j 的那个)在这个地方等待:

不幸的是,这是一条相当“拥挤”的路线:

另一个线程(使用 commons-logging)在这里等待:

这很简单:

所以对我来说,似乎第二个线程正在初始化类Priority并等待加载Level类。第一个线程可能会尝试加载Level类(该行中的其他内容似乎无关),并且随着Level类 extends Priority,等待Priority类被加载。
我们有我们的僵局。

那么,你能告诉我这个分析是否正确吗?还是我错过了什么?

更新我

我写了一些测试用例,你可以在这里找到它们:https ://github.com/sebastiankirsch/classloading

有几个测试用例证明了这个问题:

  1. TestLoadingByClassForName应该很快导致死锁(在我的机器上每运行三次)
  2. TestLoadingMixed表示问题的一个版本被剥离到观察到的堆栈跟踪的最小值;这个失败的频率要低得多(大约是 4 倍)
  3. TestMixedLoggerInstantiation模仿行为:一个类使用 log4j 实例化记录器,另一个使用 commons-logging。在这里很难发现死锁,因为涉及更多代码 - 我需要添加一个随机睡眠,这当然需要适应您的机器

TestMixedLoggerInstantiation这是挂起的测试用例的堆栈跟踪。

重现死锁

从https://github.com/sebastiankirsch/classloading下载代码。
TestLoadingByClassForName应该很容易为您造成死锁(只需运行几次),这是您的系统/JVM 最终会在复杂场景中陷入死锁的先决条件。

现在运行TestMixedLoggerInstantiation几次。注意平均运行时间,打开UseLog4JLogger并将睡眠定时器总和设置为略小于平均运行时间。这最终会导致死锁,但这种情况很少发生。

因此,像这样在命令行上运行它:

无需testExecution手动将它们放在一起,只需在测试中设置断点,调试,键入ps -ef | grep TestMixedLoggerInstantiationshell,然后复制 IDE 使用的命令。

0 投票
2 回答
254 浏览

logging - 如何为我的包裹以外的所有东西设置错误阈值

我已经通过 org.apache.log4j.PropertyConfigurator 配置了日志记录

我使用了一些 3-rd 方代码,这些代码通过直接调用来使用日志记录

此调用跳过任何级别检查,仅取决于附加程序阈值。我无法增加附加程序阈值,因为我的包中的日志也不会通过它。我想要我的代码的 INFO 日志级别和第 3 方的错误。

0 投票
2 回答
536 浏览

spring - 更改应用程序上下文路径会导致使用不同的(未知)日志记录配置

设置:

  • 雄猫 6.0.16
  • Struts 2.1.6
  • Apache Commons 日志记录 1.0.4
  • 日志4J 1.2.17

我做了什么:

变化server.xml

问题:

应用程序中的所有内容都运行良好(乍一看)。所有链接都正确且有效等。

现在我发现使用 Commons Logging(使用 Log4J)的 Loggers(通常是 Spring、Struts 和 OGNL 中的 Loggers)使用的记录器配置与以前使用的默认配置不同。直接在应用程序中使用 Log4J 的记录器在此配置下工作正常。

出于调试目的,我有一个 JSP 列出了所有记录器:

但是“公共日志记录器”不再列出,尽管如果我调试代码,我可以验证它们是否存在。

问题:

  • 如何找到其他配置/根记录器?
  • 我是否必须更改与上下文路径更改相关的 struts 配置(或其他地方)中的任何内容?
  • 有什么想法可能是这里的问题吗?

编辑:我越来越近了:

我正在使用的平台在启动时加载最小的日志记录。在更改上下文之前,高级日志记录被立即加载,一切都很好。由于某种原因,web.xml 的侦听器(Spring 初始化等)现在在加载高级日志记录之前运行。这些类使用 apache commons logging api,并根据简单的根记录器获取分配的记录器。之后根记录器被平台替换,但公共记录器没有更新为新配置。

新问题:正如我在下面所说,更改平台中的任何内容都不是选项。那么为什么当我更改上下文时侦听器会更早运行,我该如何防止这种情况发生。

0 投票
2 回答
1286 浏览

java - Hibernate 使用 apache commons logging 和 slf4j - 为什么需要 2 个日志抽象层?

我在 java 日志库世界中没有那么有经验。我开始使用休眠,然后发现我需要包含 apache commons 日志库和 sl4j 库。实际的日志库是 log4j - 所以我也包含了那个库。

在阅读了 apache commons logging 和 sl4j libs 之后,我了解到它们都代表了一个抽象层,用于使用另一个库(在我的例子中为 log4j)进行日志记录。

为什么需要 2 个抽象级别?

0 投票
2 回答
96 浏览

java - 无法登录不同的文件:Log4j

log4jabc 我正在尝试使用API在两个不同的日志文件中记录消息。下面是我的 log4j.xml

它只是以某种方式登录 Online.log。即使以以下方式获取正确使用也无法登录 Sample.log

无法弄清楚什么是错的!有什么帮助吗?

0 投票
1 回答
1607 浏览

oracle - 为公共日志记录配置 WebLogic 日志记录

我正在编写一个部署到 WebLogic 10.3.3 服务器的 Spring Web 应用程序。我尝试按照此处的 Oracle 文档所述启用日志记录:http: //docs.oracle.com/cd/E14571_01/web.1111/e13739/config_logs.htm#WLLOG154

commons-logging-1.1.1.jar 和 com.bea.core.weblogic.commons.logging_1.4.0.0.jar 都放在 WebLogic 域的 lib 文件夹中,我正在尝试完全按照在 Oracle 示例中描述。我在服务器控制台中看到以下异常:

原因:org.apache.commons.logging.LogConfigurationException:选择的 LogFactory 实现不扩展 LogFactory。请检查您的配置。(由 java.lang.ClassCastException:weblogic.logging.commons.LogFactoryImpl 引起)

有谁知道任何可能的解决方案?