Han*_*nes 6 scala logback sbt sbt-assembly
如果我在IntelliJ中运行应用程序,日志记录工作正常,但如果我运行 \xc3\xbcber-JAR,则会出现以下错误:
\nLF4J: No SLF4J providers were found.\nSLF4J: Defaulting to no-operation (NOP) logger implementation\nSLF4J: See http://www.slf4j.org/codes.html#noProviders for further details.\nRun Code Online (Sandbox Code Playgroud)\n我使用以下配置使用sbt-assemble构建 \xc3\xbcber-JAR :
\nlazy val app = (project in file("."))\n .settings(\n assembly / mainClass := Some("com.example.app.Main"),\n assembly / assemblyJarName := "gcm.jar",\n assembly / assemblyMergeStrategy := {\n case PathList("META-INF", xs@_*) => MergeStrategy.discard\n case PathList("reference.conf") => MergeStrategy.concat\n case x => MergeStrategy.first\n }\n )\nRun Code Online (Sandbox Code Playgroud)\nLogback和scala-logging的依赖关系是:
\nThisBuild / libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.4.0"\nThisBuild / libraryDependencies += "com.typesafe.scala-logging" %% "scala-logging" % "3.9.5"\nRun Code Online (Sandbox Code Playgroud)\n这logback.xml:
<?xml version="1.0" encoding="UTF-8" ?>\n<!DOCTYPE configuration>\n\n<configuration>\n <import class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"/>\n <import class="ch.qos.logback.core.ConsoleAppender"/>\n <import class="ch.qos.logback.core.FileAppender"/>\n\n <appender name="STDOUT" class="ConsoleAppender">\n <encoder class="PatternLayoutEncoder">\n <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} - %msg%n</pattern>\n </encoder>\n </appender>\n <appender name="FILE" class="FileAppender">\n <file>gcm.log</file>\n <append>true</append>\n <immediateFlush>true</immediateFlush>\n <encoder class="PatternLayoutEncoder">\n <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{0} - %msg%n</pattern>\n </encoder>\n </appender>\n\n <root level="debug">\n <appender-ref ref="STDOUT"/>\n <appender-ref ref="FILE"/>\n </root>\n</configuration>\nRun Code Online (Sandbox Code Playgroud)\n..
\n发生这种情况是因为服务提供者(在 META-INF 中定义)被您的合并策略丢弃。从 logback 1.2.x 迁移到 1.4.x 时,我遇到了同样的问题。
我在sbt-assemble 文档中找到的一个选项是将 META-INF 案例替换为:
case PathList("META-INF", xs@_*) =>
(xs map {_.toLowerCase}) match {
case "services" :: xs =>
MergeStrategy.filterDistinctLines
case _ => MergeStrategy.discard
}
Run Code Online (Sandbox Code Playgroud)
有没有办法查明是否是这种情况以及如果是什么导致了冲突?
在调试模式下运行./sbt assembly --debug可能有助于识别哪些文件被丢弃:
...
[debug] Merging 'META-INF/services/ch.qos.logback.classic.spi.Configurator' with strategy 'discard'
[debug] Merging 'META-INF/services/jakarta.servlet.ServletContainerInitializer' with strategy 'discard'
[debug] Merging 'META-INF/services/org.slf4j.spi.SLF4JServiceProvider' with strategy 'discard'
...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
670 次 |
| 最近记录: |