ClasscastException-org.apache.log4j.Loggerをorg.owasp.esapi.Loggerにキャストできません-log4jからlog4j2

ATK

log4jからlog4j2へのアップグレードに取り組んでいます。その過程で、ロガークラスのキャスト例外が発生します。以下はエラーです。

Caused by: java.lang.ClassCastException: org.apache.log4j.Logger cannot be cast to org.owasp.esapi.Logger
    at org.owasp.esapi.reference.Log4JLogFactory.getLogger(Log4JLogFactory.java:88)
    at org.owasp.esapi.ESAPI.getLogger(ESAPI.java:154)
    at org.owasp.esapi.reference.DefaultEncoder.<init>(DefaultEncoder.java:75)
    at org.owasp.esapi.reference.DefaultValidator.<clinit>(DefaultValidator.java:91)
    ... 45 more

私の古いコード(log4jプロパティファイル)には、このロガーへの参照があります。以下は、古いコードに含まれているコードです。

log4j.loggerFactory=org.owasp.esapi.reference.Log4JLoggerFactory

現在、log4j2でlog4j2.xmlファイルを使用していますが、その行に相当するタグが見つかりませんでした。進め方を教えていただけますか?
注:アプリケーションをJBoss EAP7で実行しています

henninglh

この問題は解決可能ですが、それは良い解決策ではなく、状況に応じたものです。

私はATKと同じ問題を抱えています。最終的に他のパッケージにATKと同じbridge-apiを使用しましたが、ESAPIには厄介な回避策があります。

私の状況:これはJettyおよびTomcatアプリケーションサーバーでのみテストしましたlog4j2をラップする独自のロギングライブラリがあり、JavaではなくScalaを使用しています。

まず、ClassCastExceptionを作成するクラスはorg.owasp.esapi.reference.Log4JLogFactoryです。

最終的にパッケージorg.owasp.esapi.referenceを作成し、Log4JLogFactoryという名前の独自のScalaオブジェクトを作成しました。このオブジェクトは、私自身のロギングフレームワーク(次の例では「Logging」という名前)を拡張し、org.owasp.esapi.LogFactoryインターフェースを実装します。これらのメソッドを実装するには、ログメッセージを自分のログフレームワークに渡すだけです。したがって、log.error(...)メソッドの呼び出しは私自身のロガーからのものであり、このソリューションを実装するには、独自のロガーが必要になります。

object Log4JLogFactory extends Logging with org.owasp.esapi.LogFactory {
  private[reference] lazy val factory = new Log4JLoggerFactory
  def getInstance = {
    this
  }

  private val logger = new org.owasp.esapi.Logger {
    override def error(`type`: Logger.EventType, message: String) = log.error(message)

    override def error(`type`: Logger.EventType, message: String, throwable: Throwable) = log.error(message, throwable)

    // implement the rest of the methods that is needed...
  }

  override def getLogger(clazz: Class[_]) = logger

  override def getLogger(moduleName: String) = logger
}

NB!このソリューションは、JettyとTomcatで機能します。ライブラリクラスの前に独自のクラスをロードしないアプリケーションサーバーは、このソリューションでは機能しません。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ