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

标签 scala maven jar akka logback

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

jar:file:/path/to/jar!logback.xml

(此处出现错误 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

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

最佳答案

是的,打包 logback.xml 不是一个好主意文件到你的 fat jar 子里。在运行时配置它的意图。如果您正在使用 sbt为了组装 jar,您可以通过添加到 unmanagedJars 来指定不包含的目录和文件。 .例如:
unmanagedJars in Compile <++= baseDirectory map { dir => (dir ** "logback.xml").classpath }
然后你应该能够在运行时通过在 -cp 之后包含它来传递它。 (类路径)或 -jar .例如:
java -jar -Dlogback.configurationFile=/full/path/to/logback.xml myapplication.jar

关于scala - 如何将我的 logback.xml 作为系统属性传递到我的 akka 应用程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28728623/

相关文章:

scala - groupBy 的子流可以依赖于它们生成的键吗?

java - 如何解包和重新打包 WAR 文件

java - 如何在不更改代码的情况下动态拦截 jar 中的方法?

Java WindowBuilder -> 导出为 .jar(可运行或 Applet)

java - 将命令行参数传递给不可执行的jar文件中的特定** class **

scala - 可遍历 => Java 迭代器

java - 增加堆大小

java - 在 pom.xml 中的一个 groupId 下声明多个 artifactId

scala - SBT:启动非默认项目主类的命令行 'run'

java - 尝试为 Keycloak 创建自定义身份 validator 提供程序时,来自 Maven 部署的 NoClassDefFoundError