1

Grails 2.1.1を使用して開発していますが、Logback(http://logback.qos.ch)をデフォルトのロギングフレームワークとして統合したいと考えています。これは、より優れたロギング機能を提供し、Groovyを介して構成することもできるためです。

Logback 1.0.7(最新)はでしか機能しないslf4j 1.6.6ので、Grailsの依存関係をアップグレードしたいと思います。Grails2.1.1はを使用してslf4j 1.6.2います。これを正しく行う方法は?

私は次のことを試みました:BuildConfig.groovy私は除外grails-plugin-log4jし、slf4j-api

grails.project.dependency.resolution = {
  // inherit Grails' default dependencies
  inherits("global") {
      excludes "grails-plugin-log4j", "slf4j-api"
  }
  ...
}

そして私は他の必要なライブラリと一緒slf4j-api 1.6.6にロードしようとしますcompile buildruntime

grails.project.dependency.resolution = {
  ...
  dependencies {
    // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes eg.

    compile "org.slf4j:slf4j-api:1.6.6"

    build   "org.slf4j:slf4j-api:1.6.6",
            "ch.qos.logback:logback-core:1.0.7",
            "ch.qos.logback:logback-classic:1.0.7"

    runtime "org.slf4j:slf4j-api:1.6.6",
            "org.slf4j:log4j-over-slf4j:1.6.6", // logback dependency for classic module, as seen on http://logback.qos.ch/dependencies.html
            "ch.qos.logback:logback-core:1.0.7",
            "ch.qos.logback:logback-classic:1.0.7"
}
  ...
}

ここで、Grailsコマンドラインからまたはのいずれgrails compileかを実行したい場合grails clean、LoggerFactoryクラスが見つからなかったためにスクリプトを実行できなかったと文句を言います。

| Loading Grails 2.1.1
| Configuring classpath
| Error Error executing script Compile: org/slf4j/LoggerFactory (NOTE: Stack trace has been filtered. Use --verbose to see entire trace.)
java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:156)
at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:272)
at org.springframework.core.io.support.PathMatchingResourcePatternResolver.<clinit>(PathMatchingResourcePatternResolver.java:169)
| Error Error executing script Compile: org/slf4j/LoggerFactory

slf4j-api基盤を適切にアップグレードするにはどうすればよいですか?

最初のAPIを除外しないslf4j-apiと、呼び出し時に削除済みとしてマークされた「古い」1.6.2APIと競合しgrails dependency-reportます...

また、Logback用の外部設定ファイルが欲しいです。どのように実装しますか?Log4jを使用しlog4jConfigurerて、ファイル内でBeanを宣言しましたconf/spring/resources.groovy-Logbackでどのように実行されますか?

Logbackを使用してGrails2.1.1をログに記録した経験のある人はいますか?この問題についてアドバイスをいただけますか?

4

1 に答える 1

1

この質問は、Grailsを使用してLogback Logging Frameworkを実装することをいとわない他の開発者にとっても事実の問題であると思うので、この回答内でトピックの進捗状況を共有します。最初の質問を進捗情報で過負荷にしないようにします。

  1. Grails内でslf4jを更新することはまだできなかったので、slf4j-apiの依存関係を単純にオーバーロードするソリューションに固執しました。Grailsは、にエラーを表示せずgrails dependency-report、古いslf4j依存関係(1.6.2)の「削除通知」のみを表示します。これはうまくいくようですが、私はこのトピックに関するより良い解決策を探し続けます。

  2. これで、に 実装されクラスを介し Logbackの外部構成ファイルをロードできるようになり、ファイル内に登録されましたコマンドラインで 実行するだけです。これは下にあります) Logbackができるだけ早く構成およびロードされるように、必ず最初の エントリにしてください。ServletContextListenerConfigLoadergrails-app/src/javaServletContextListenerweb.xmlweb.xmlgrails install-templatesgrails-app/src/templates/war/web.xml<listener/>web.xml

    このソリューションと完全なコードサンプルを https://bowerstudios.com/node/896で見つけました。これは、このトピックで見つけた最良かつ最短の例であり、機能しているようです。

    このソリューションは、外部構成ファイルをロードしてConfigLoaderクラス内で使用しただけで、Grailsアプリケーション全体に設定しませんでした。そこで、もう少しグーグルで調べて、GitHub(https://github.com/qos-ch/logback-extensions)で入手でき、と統合しているLogbackのソリューションを見つけた Spring Frameworkので、このページここLogbackConfigurerからクラスを作成し、私のニーズに合うように調整しました。

    これですべてが魅力のように機能し、外部構成ファイルを作成できるようになりました。これは、デフォルトでクラスlogなどに挿入されるオブジェクトにフックされています。Controller

これが他の開発者にとっても役立つことを願っています;)

あなたがこれのためのより良いまたはより「グルーヴィーな」解決策を持っているなら、私に知らせてください!

于 2012-12-05T08:35:22.923 に答える