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

“未找到log4j2配置文件。”

夹谷野
2023-03-14

我已经将其隔离到一个非常简单的测试项目中,该项目除了简单的log4j2test配置使用之外没有其他用途。文件目录结构:

.
├── build.sbt
└── src
└── main
    ├── resources
    │   └── log4j2.xml
    └── scala
    └── mycompany
        └── myapp
        └── SimpleMain.scala

建筑sbt:

name := """log4j2test"""

version := "1.0.0-SNAPSHOT"

scalaVersion := "2.12.1"

scalacOptions := Seq("-unchecked", "-deprecation", "-encoding", "utf8")

libraryDependencies ++= {
  Seq(
"org.apache.logging.log4j"         % "log4j-slf4j-impl" % "2.8",
"org.apache.logging.log4j"         % "log4j-api" % "2.8",
"org.apache.logging.log4j"         % "log4j-core" % "2.8",
"com.fasterxml.jackson.dataformat" % "jackson-dataformat-yaml" % "2.8.6"
  )
}

log4j2.xml内容复制/粘贴从示例在官方留档:https://logging.apache.org/log4j/2.x/manual/configuration.html

SimpleMain。斯卡拉:

package mycompany.myapp

import org.slf4j.LoggerFactory

object SimpleMain {
  val logger = LoggerFactory.getLogger(getClass())

  def main(args: Array[String]): Unit = {
println("simple println test")
logger.info("this is a logger.info message")
logger.debug("this is a logger.debug message")
logger.error("this is a logger.error message")

val stream = this.getClass.getClassLoader.getResourceAsStream("log4j2.xml")
if (stream == null) {
  println("failed to open log4j2.xml on classpath")
} else {
  println("successfully opened log4j2.xml on classpath")
  stream.close()
}
  }
}

我跑步与

sbt "run-main mycompany.myapp.SimpleMain"

输出:

[info] Running mycompany.myapp.SimpleMain 
ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console.
simple println test
14:12:14.508 [run-main-0] ERROR mycompany.myapp.SimpleMain$ - this is a logger.error message
successfully opened log4j2.xml on classpath
[success] Total time: 4 s, completed Feb 10, 2017 2:12:14 PM

共有2个答案

郁明诚
2023-03-14

log4j2.xml放在你罐子的根部吗?我很惊讶getResourceAsStream正在工作。您将其指定为相对路径,因此它应该查找 /mycompany/myapp/log4j2.xml.

鱼阳伯
2023-03-14

SimpleMain应用程序的类加载器是否可能与slf4j的类加载器不同?请通过设置系统属性org尝试调试Log4j2初始化。阿帕奇。登录中。log4j。辛普洛格。状态记录器。级别TRAC‌​E

 类似资料:
  • 最近,我决定学习如何使用log4j2记录器。我下载了所需的jar文件,创建了库,xml编译文件,并尝试使用它。不幸的是,我在console(Eclipse)中得到了这样的语句: 这是我的测试类代码: 和我的xml配置文件: 我还尝试使用不带标记的xml,以及包规范和各种文件夹/包目录,但没有帮助。现在我的文件直接位于Eclipse的project文件夹中。

  • 这是我的配置文件: 日志配置文件读起来非常清楚,因为它使用my/log目录中定义的模式正确地写入。 这是我在代码中实例化它的方式:

  • 我们添加了使用log4J 2的库。X,但我们仍在使用log4J 1。X(主要是因为我们有自己的一些应用程序和记录仪)。我被告知解决方案是发送log4J 2。x到slf4j(使用log4j-to-slf4j,版本2。X),然后slf4j到log4J 1。X,使用slf4j-log4j12,版本1。X. 这就是我刚才所做的,但我仍然得到以下信息: ERROR StatusLogger未找到log4j2

  • 我们已经添加了使用log4j2.x的库,但是我们仍然在使用log4j1.x(主要是因为我们有自己的一些附加程序和记录器的impl)。我被告知,解决方案是将log4j2.x发送到slf4j(使用log4j-to-slf4j,版本2.x),然后将slf4j发送到log4j1.x,使用slf4j-log4j12,版本1.x。 这就是我刚才所做的,但我仍然得到这样的信息: 我希望slf4j使用log4J

  • 错误StatusLogger找不到log4j2配置文件。使用默认配置:只将错误记录到控制台。将系统属性“org.apache.logging.log4j.simplelog.statuslogger.level”设置为TRACE,以显示Log4j2内部初始化日志记录。 解决此问题的方法: 2.增加内容

  • 运行时,我收到以下消息: 我已经把位于下(但不在中,因为我不希望它随实际应用程序一起提供),如这里所建议的那样没有任何效果。 生成超文本标记语言报告,编写日志文件,构建成功,如上所述。我不确定错误是从哪里来的。