如何将我的 logback.xml 作为系统属性传递到我的 akka 应用程序中?

Chi*_*nex 5 scala jar logback maven akka

我有一个 akka 应用程序,我希望将其打包为 uberjar。如果我打包我的应用程序,logback.xml 会出现在 jar 的根目录中,但是当我启动我的应用程序时,我在配置日志中收到一个错误,因为“URL x 不是文件类型!” 其中 x 是一个看起来像的网址

jar:file:/path/to/jar!logback.xml
Run Code Online (Sandbox Code Playgroud)

(错误出现在这里https://github.com/qos-ch/logback/blob/master/logback-core/src/main/java/ch/qos/logback/core/joran/spi/ConfigurationWatchList.java#L90

这是因为 logback 文件已归档,因此无法作为文件访问,这正是 logback 所期望的。我对此很好,因为 logback 配置不应该出现在 jar 中,因为它可能会导致冲突。我想要做的是打包并运行我的应用程序,在运行时传入 logback.xml,例如

java -Dlogback.configurationFile=/full/path/to/logback.xml -jar myapplication.jar
Run Code Online (Sandbox Code Playgroud)

当像这样运行时,日志配置会回退到默认值,最终我的控制台中会出现演员日志(通过 maven 运行时,一切都按预期工作)。告诉我我错过了什么:)

小智 2

logback.xml是的,将文件打包到 fat jar 中并不是一个好主意。它的目的是在运行时配置它。如果您用于sbt组装 jar,则可以通过添加到 来指定不包含的目录和文件unmanagedJars。例如:

unmanagedJars in Compile <++= baseDirectory map { dir => (dir ** "logback.xml").classpath }

然后您应该能够在运行时通过将其包含在-cp(classpath) 或-jar. 例如:

java -jar -Dlogback.configurationFile=/full/path/to/logback.xml myapplication.jar