如何禁止继承的项目logback.xml文件(单个项目中的2个logback.xml)?

Ste*_*gle 22 logging clojure leiningen

我的项目com.samedhi/base有一个logback.xml文件,项目com.samedhi/derive也有一个logback.xml文件.项目' derive '依赖于' base '.当我" lein trampoline replon"' 衍生 '时,我收到以下警告.

....
15:34:30,066 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]
15:34:30,066 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback-test.xml]
15:34:30,066 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback.xml] at [file:/home/stephen/Work/com.samedhi/derive/client/config/logback.xml]
15:34:30,067 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs multiple times on the classpath.
15:34:30,067 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [jar:file:/home/stephen/.m2/repository/com/samedhi/base.app/0.0.1-SNAPSHOT/base.app-0.0.1-SNAPSHOT.jar!/logback.xml]
15:34:30,067 |-WARN in ch.qos.logback.classic.LoggerContext[default] - Resource [logback.xml] occurs at [file:/home/stephen/Work/com.samedhi/derive/client/config/logback.xml]
15:34:30,129 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - debug attribute not set
....
Run Code Online (Sandbox Code Playgroud)

所以,问题似乎是我的classpath中有两个logback.xml.当我从' derive '项目中获取 repl 时,我应该做什么来"压缩"来自项目' base '的logback.xml ?

Ale*_*lex 19

就我而言,你永远不应该在JAR文件中打包日志配置文件(logback.xml,log4j.properties或者你有什么).甚至拥有日志配置文件的重点是让最终用户通过编辑文件来调整日志记录级别.将其隐藏在存档中会使其失败,因为要更改日志记录级别,用户必须扩展存档,编辑文件,然后重新打包存档.

这是我部署的应用程序的首选布局.设置起来要多做一些工作,但是IMO值得一试,因为它为您提供了uberjar所没有的灵活性和易配置性.

my-app/
  bin/
    run-app.sh
  config/
    logback.xml
  lib/
    my-lib.jar
    my-app.jar
Run Code Online (Sandbox Code Playgroud)

你的run-app.sh脚本看起来像:

BIN=`dirname "$0"`
BASE=$BIN/..
java -cp "$BASE/config:$BASE/lib/*" my-app.main
Run Code Online (Sandbox Code Playgroud)

这样做的好处是,通过将config目录放在类路径的前面,在那里找到的任何日志配置文件都应优先于其中一个JAR中可能找到的任何内容(例如,包含在您拥有的第三方库中)无法控制).

  • +1为一般建议不要在jar中打包日志配置文件.我们打包日志文件的唯一时间是创建可执行jar或[java webstart release](http://stackoverflow.com/questions/25001350/how-do-i-specify-a-logback-configuration-for -use-IN-A-java的在webstart施用).但是,当我们使用maven时,我们必须执行后续的`mvn clean install`以从本地存储库中删除具有日志记录配置的jar. (2认同)