Почему Scalatra предупреждает меня о log4j

Я пытаюсь заставить какой-то тип ведения журнала работать в Scalatra. Я просто следовал инструкциям здесь http://www.scalatra.org/2.2/guides/monitoring/logging.html. Когда я запускаю container:start после запуска с sbt, я вижу в своей консоли следующее: несколько сообщений, которые выглядят не совсем правильно:

Насколько я могу судить, я пытаюсь использовать logback, но позже что-то загружает log4j. Это не то поведение, которое я ожидаю, но это то, что я вижу.

От нескольких привязок до предупреждений log4j (я нигде не добавлял log4j в этом приложении):

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/Users/foo/.ivy2/cache/org.slf4j/slf4j-log4j12/jars/slf4j-log4j12-1.6.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/Users/foo/.ivy2/cache/ch.qos.logback/logback-classic/jars/logback-classic-1.0.11.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
Null identity service, trying login service: null
Finding identity service: null
[info] started o.e.j.w.WebAppContext{/v1,[file:/Volumes/Macintosh%20HD%202/Dropbox/Projects/scalatra-test/src/main/webapp/]}
[info] started o.e.j.w.WebAppContext{/v1,[file:/Volumes/Macintosh%20HD%202/Dropbox/Projects/scalatra-test/src/main/webapp/]}
log4j:WARN No appenders could be found for logger (org.scalatra.servlet.ScalatraListener).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Не совсем уверен, в чем здесь проблема. Я просто хочу иметь возможность:

  • Запишите некоторые операторы отладки в STDOUT (при условии, что они перейдут к термину, с которого я начал sbt)
  • Запишите некоторые операторы отладки в файл, который я могу просто отслеживать

Мои зависимости в build.scala выглядят следующим образом:

libraryDependencies ++= Seq(
    "org.scalatra" %% "scalatra" % ScalatraVersion,
    "org.scalatra" %% "scalatra-scalate" % ScalatraVersion,
    "org.scalatra" %% "scalatra-specs2" % ScalatraVersion % "test",
    "ch.qos.logback" % "logback-classic" % "1.0.6" % "runtime",
    "org.eclipse.jetty" % "jetty-webapp" % "8.1.8.v20121106" % "container",
    "org.eclipse.jetty.orbit" % "javax.servlet" % "3.0.0.v201112011016" % "container;provided;test" artifacts (Artifact("javax.servlet", "jar", "jar")),
    "org.mongodb" %% "casbah" % "2.6.1",
    "org.scalatra" %% "scalatra-json" % "2.2.1",
    "org.json4s"   %% "json4s-native" % "3.2.4",
    //"org.json4s" %% "json4s-jackson" % "3.2.4",
    "org.scalatra" %% "scalatra-swagger"  % "2.2.1",
    "commons-codec" % "commons-codec" % "1.8"
  ),

Возможно ли, что что-то здесь также требует log4j и переопределяет логбэк?

Можно ли также поручить sbt полностью исключить log4j из этого проекта? Я не могу найти, что требует этого в качестве зависимости, но вместо этого он должен использовать logback.


person randombits    schedule 14.07.2013    source источник


Ответы (1)


  1. Вы можете использовать плагин sbt-dependency-graph, чтобы определить, что зависит от log4j.
  2. И исключите его из своей сборки. Например:

    libraryDependencies += "org.scalatra" %% "scalatra" % "2.2.1" exclude("org.slf4j", "log4j12")
    

    or

    libraryDependencies += "org.scalatra" %% "scalatra" % "2.2.1" excludeAll(ExclusionRule(organization = "org.slf4j"))
    
person Sergey Passichenko    schedule 15.07.2013
comment
Я считаю, что в ответе опечатка, это должно быть excludeAll (ExclusionRule (organization = log4j)). По крайней мере у меня этот работает - person kirhgoff; 30.07.2013
comment
Первоначальная идея заключалась в том, чтобы исключить мост log4j-slf4j или все транзитивные зависимости slf4j и определить свои собственные. Но в некоторых случаях исключения log4j может быть достаточно. - person Sergey Passichenko; 30.07.2013
comment
Недавно я столкнулся с той же проблемой после интеграции scalatra-swagger. Поскольку мое приложение использовало логбэк, проблема множественных привязок проявилась сама собой. Добавление следующей строки: libraryDependencies += org.scalatra %% scalatra-wagger % 2.2.2 exclude(org.slf4j, log4j12) устранило проблему. спасибо за подсказку, это спасло меня от часов боли. - person cudiaco; 08.02.2014