2017-01-30 20 views
0

現在私はlog4j2に切り替えています。私はOSGi環境で作業しています。 log4j 2.7ブランチにOSGiの問題が2つありました。私は最終的なライブラリとして2.8を取得するよう奨励しました。
事は、私は私のプロジェクトで実装されたカスタムPatternConvertersのカップルを持っていると私は彼らがロードされ、そのうちの少なくとも10はありますが、Log4j 2.8はOSGi環境でカスタムコンバータをロードできません

DEBUG Initializing configuration XmlConfiguration[location=C:\Program Files\...\etc\log4j2.xml] 
. 
. 
DEBUG Took 0,001043 seconds to load 0 plugins from package common.audit.sink.impl.log4j2.converter 

を認識持って管理することはできませんです。以下のようなエラーがこの後の結果:

DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout]. 
DEBUG PatternLayout$Builder(pattern="%ED;... 
ERROR Unrecognized format specifier [ED] 
ERROR Unrecognized conversion specifier [ED] starting at position 3 in conversion pattern. 

は、私は、必要に応じて設定するほとんどすべてを(それはとにかく2.7で働いていた)があります。
注釈付きプラグインの実装との両方のnewInstanceフォーマット方法はthis guide

に従ってlog4j2.xmlにパッケージ宣言実装:プラグインメタデータは*で発生し、存在する

<Configuration status="trace" name="Systemtest_Server" packages="common.audit.sink.impl.log4j2.converter"> 

した.jarプラグインを含むバンドル

META-INF\org\apache\logging\log4j\core\config\plugins\Log4j2Plugins.dat 

log4j-core- 2.8.jarバンドルは、Equinoxコンテナの起動時にlog4j-api-2.8.jarとともにアクティブになります。設定ファイルはシステムのプロパティで指し示され、動作します(私が受け取るデバッグメッセージから明らかです)。

しかし、私はそれがorg.apache.loggingをインポートするためにのlog4j-API-2.8.jarを修正するまで、私は同じ例外に直面していたように私の問題のようなものであるのlog4jのJira、上に報告this issueを見つけました。 log4j.core.utilパッケージので、サーバが正常に起動します。これがOSGiのlog4j2の非拡張性をもたらすかもしれないことを示唆するコメントがいくつかあります。

この問題を解決する方法はいくつかあります(クイックフィックスで十分です)。あるいは、私がここで設定するのを忘れるかもしれない何かがありますか?

ありがとうございました。

答えて

1

私は自分でこれに答えるつもりですし、誰かにも役立つかもしれません。私は周りを遊んでいたし、正直言って私があまりよく知らないOSGiに欠陥があった。

私はあなたがこれらの事を確認する必要があり、最後に見つけた:

  • バンドルがOSGiのコンテナに有効にする必要があります。非アクティブなバンドルはプラグインのためにスキャンされません。設定でバンドルをマークして実際に起動するとは限りません。たとえば、バンドルのマニフェストに何らかの不具合があると、これが起こらないようにします。だから私は、次の
    Export-Package: common.audit.sink.impl.log4j2.*
    Import-Package: *
  • 少なくとも一つとのバンドルは、あなたのプラグインがロードされるために保持するために持って構築してくださいするには:カスタムプラグインと
    • あなたのバンドルが示すことによってlog4jのコアの断片でありますこれはそのマニフェストで:
      Fragment-Host: org.apache.logging.log4j.core
      おそらく正しいアプローチ。
    • あなたのバンドルが私の質問で述べた構成が必要なのlog4jバンドルと同じ優先順位で活性化(だけでなく、APIだけでなく、コアは、プラグインの検索を可能にするために有効にする必要がある)もちろん

されます同じように。この後、私はエラーがなく、このようなトレースを見た:

DEBUG Oracle Nashorn Version: 1.8.0_102, Language: ECMAScript, Threading: Not Thread Safe, Compile: true, Names: {nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript} 
DEBUG Took 0,008133 seconds to load 16 plugins from package common.audit.sink.impl.log4j2.converter 
DEBUG PluginManager 'Core' found 112 plugins 
DEBUG PluginManager 'Level' found 0 plugins 
... 
DEBUG Building Plugin[name=layout, class=org.apache.logging.log4j.core.layout.PatternLayout]. 
DEBUG PatternLayout$Builder(pattern="%ED;%EU;%EL;... 
DEBUG Building Plugin[name=appender, class=org.apache.logging.log4j.core.appender.FileAppender]. 
関連する問題