0

我正在制作一个小型库——Flow真的是一个——并且想从它的代码中进行一些调试日志记录。该库将在基于 Log4J2 和 Logback 的应用程序中使用。我希望日志记录“刚刚发生”。

我做了什么:

所有库依赖项都是“提供”的:

libraryDependencies ++= Seq(
    "com.typesafe.akka" %% "akka-slf4j" % AkkaVersion,
    "com.typesafe.akka" %% "akka-stream" % AkkaVersion,
    "com.typesafe.akka" %% "akka-http" % "10.1.12"
).map(_ % Provided)       // those come from the application

我读过Akka Logging (Akka docs),但它是 2.4.20 版。2.6有类似的吗?

akka-slf4j为库提供LoggingLoggingFactory类。logger在库中初始化的方式:

private val LOGGER = LoggerFactory.getLogger(this.getClass);

但是,不会发生日志记录。控制台输出,在提供 Logback 1.2.3 的主机上运行:

$ sbt test:run
[info] Loading settings for project global-plugins from plugins.sbt ...
[info] Loading global plugins from /Users/.../.sbt/1.0/plugins
[info] Loading project definition from /Users/.../myProject/project
[info] Loading settings for project ... from build.sbt ...
[info] Set current project to ... (in build file:...)
[info] running test.Main 10
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
SLF4J: Failed to load class "org.slf4j.impl.StaticMDCBinder".
SLF4J: Defaulting to no-operation MDCAdapter implementation.
SLF4J: See http://www.slf4j.org/codes.html#no_static_mdc_binder for further details.
...

从这些链接之一:

此错误表明在类路径上找不到适当的 SLF4J 绑定。将 slf4j-nop.jar、slf4j-simple.jar、slf4j-log4j12.jar、slf4j-jdk14.jar 或 logback-classic.jar 中的一个(也是唯一一个)放在类路径上应该可以解决问题。

如果我添加slf4j-simple到库依赖项,我会得到日志,但它们没有着色。在我看来,我已经修复了库中的日志记录以使用它自己的日志记录实现——而不是我希望的主机。这个对吗?如何正确地做到这一点?

Akka 版本是 2.6.5

4

1 回答 1

0

原因是 SLF4J 似乎不在test范围内。

用这个修复它:

$ sbt update    # download dependencies
$ mkdir lib
$ ln -s ~/.m2/repository/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar lib/
$ ln -s ~/.m2/repository/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar lib/

我在网上某处看到但从未意识到的另一种方法是描述我的问题涉及制作子项目。我发现继续使用test:run最简单。

于 2020-05-14T14:37:52.343 回答