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

使用logback,但是log4j被初始化了

狄彬彬
2023-03-14

我们的控制台应用程序正在使用logback进行日志记录。这是一个倒退。类路径中的xml文件

在大多数平台(Linux、Windows、jdk7或jdk8)上,日志记录按预期工作(通过日志返回)。

然而,在使用jdk 6的Mac上,当运行应用程序时,我们有时会看到:

log4j:WARN No appenders could be found for logger (our.class.Here).
log4j:WARN Please initialize the log4j system properly.

似乎出于某种原因,选择log4j而不是logback进行日志记录。在我们的生活中。班这里我们通过slf4j登录:

private static final org.slf4j.Logger LOG = org.slf4j.LoggerFactory.getLogger(our.class.Here.class);

这是完整的类路径:

/path/etc/logback.xml:/path/lib/pdfbox-1.8.4.jar:/path/lib/fontbox-1.8.4.jar:/path/lib/jempbox-1.8.4.jar:/path/lib/jcl-over-slf4j-1.7.7.jar:/path/lib/bcprov-jdk15-1.45.jar:/path/lib/bcmail-jdk15-1.45.jar:/path/lib/xmlgraphics-commons-1.5.jar:/path/lib/icepdf-core-5.0.4.jar:/path/lib/jai-codec-1.1.3.jar:/path/lib/jai-core-1.1.3.jar:/path/lib/jewelcli-0.6.jar:/path/lib/commons-lang3-3.1.jar:/path/lib/commons-io-2.2.jar:/path/lib/logback-classic-1.1.0.jar:/path/lib/logback-core-1.1.0.jar:/path/lib/itext-2.1.7.jar:/path/lib/hibernate-validator-4.2.0.Final.jar:/path/lib/slf4j-api-1.7.5.jar

我们如何进一步排除故障,以了解为什么日志选择log4j而不是logback?

谢谢你的建议。

共有2个答案

吴谦
2023-03-14

问题是log4j。jar位于用户的Java扩展目录中:/Library/Java/Extensions

我们通过使用-verbose运行java发现了这一点,它指出了log4j的位置。罐子是从那个里装的。

解决方法是在运行我们的应用程序时禁用extensions文件夹:export JAVA_OPTS=-Djava。ext.dirs=“”

由于机器不是我们的,我们无法应用(更好的)永久解决方案来清理扩展的目录。

南门意蕴
2023-03-14

我在你的类路径中没有看到log4j-over-slf4j...也许这就是你所缺少的,以确保任何与log4j相关的代码通过正确的slf4j日志impl(logback)?

  <dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>log4j-over-slf4j</artifactId>
    <version>1.7.10</version>
  </dependency>
 类似资料:
  • 问题内容: 我有一个使用Spring的类初始化我的Log4J日志工厂的Web应用程序。基本上,它使用不在类路径中的配置文件来初始化Log4J。 这是配置: 但是,在应用程序启动时出现此错误: 大量的Spring应用程序上下文初始化消息被打印到控制台。我认为这是因为Spring在有机会初始化记录器之前正在进行初始化应用程序的工作。如果很重要,我将在Log4J之上使用SLF4J。 有什么办法可以使Lo

  • 问题内容: 我有一个简单的log4j.property文件和一个使用log4j的简单程序。但是当我运行罐子时,我只会看到 这是我使用记录器的方法: 这是我的pom.xml的一部分 这是我的log4j.properties 现在从我的项目目录运行jar文件。这是我的项目目录 问题答案: 将log4j.properties文件放在src / main / resources中,以便将其捆绑到您的JAR

  • 问题内容: 我正在尝试学习log4j,所以我只是尝试做一些非常简单的事情。 但是做完之后我得到了; 你知道我错了吗? 谢谢你们 问题答案: 您在类路径中缺少或。 您可以使用 但是请注意,这只会登录到System.out,因此不建议这样做。您实际上应该使用上面的文件之一,然后将其写入日志文件。 一个非常简单的例子是

  • 我使用logback为我的日志记录,它一直在工作,但是,前几天我开始得到一个警告 log4j:WARN找不到记录器(org.apache.axis.i18n.ProjectResourceBundle)的appender。log4j:警告请正确初始化log4j系统。 我没有使用log4j,也没有使用过这个项目。我有一个日志。我的资源文件夹中的xml。 你知道为什么会出现这个警告吗?

  • 场景如下:我有一个现有的web应用程序,它通过servlet初始化log4j: 不,我想重写这个初始化通过一个外部文件传递log4j.configurationJVM ardument:-Dlog4j.configuration=file:/usr/本地/log4j.xml 当我启动应用程序服务器时,我可以看到外部文件首先被拾取,但随后通过初始化servlet的内部文件将覆盖这些更改。 我的问题是

  • 问题内容: 将log4j添加到我的应用程序后,每次执行我的应用程序时,都会得到以下输出: 看来这意味着缺少配置文件。此配置文件应位于何处,什么是良好的入门内容? 我使用纯Java开发桌面应用程序。因此没有网络服务器等… 问题答案: 默认情况下,在上查找名为或的文件。 您可以按照此处所述通过设置系统属性来控制它用来初始化自身的文件(查找“默认初始化过程”部分)。 例如: 将导致在类路径上查找名为的文