Migration-Maven、Gradleなしで純jarファイルに移行


私が会社で成功した応用方法に基づいて作成します.
ソリューションをインストールするときは、MavenGradleなどの外部バージョンを使用するのではなく、jarファイル로컬에서 직접 관리を使用してビジネスを行います.
実際、既存の部門が担当しているプロジェクトの半分はjava 7バージョンのBase、Log4j 1.2.16バージョンを使用しているため、今回のセキュリティ問題は弱点から除外されていますが、この機会に最新バージョンに移行することをお勧めします.
私が選択した移行バージョンは2.12.3です.
Java 7を使用するいくつかのプロジェクトがあるため、Java 7をサポートするセキュリティ・ホールの問題は解決された最新バージョンです.
ダウンロードバージョン2.12.2.3

会社コードは公開できないため、log 4 j->log 4 j 2に変更すると、ログ・オブジェクトのメソッド・パラメータ・タイプが変更されることに注意して変更する必要があります.

既存のWebContent/WEB-INF/libから次の項目を削除します。



既存log 4 j。xmlファイルを削除した後、log 4 j 2を他のパスにルーティングします。xmlファイルの追加


既存log 4 j.xmlファイルはsrcの真下にありますが、log 4 j 2です.xmlファイルは、WebContent/WEB-INFサブディレクトリにclassというディレクトリを作成して追加できます.
  • 既存のパス
  • 新しいパス
  • 追加するlog 4 j 2。xmlコードの構成


    APACHE公式ドラフトドキュメントのデフォルトフォーマット
    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration status="debug" name="RoutingTest" monitorInterval="30">
      <Properties>
        <Property name="filename">target/rolling1/rollingtest-$${sd:type}.log</Property>
      </Properties>
      <ThresholdFilter level="debug"/>
     
      <Appenders>
        <Console name="STDOUT">
          <PatternLayout pattern="%m%n"/>
          <ThresholdFilter level="debug"/>
        </Console>
        <Routing name="Routing">
          <Routes pattern="$${sd:type}">
            <Route>
              <RollingFile name="Rolling-${sd:type}" fileName="${filename}"
                           filePattern="target/rolling1/test1-${sd:type}.%i.log.gz">
                <PatternLayout>
                  <pattern>%d %p %c{1.} [%t] %m%n</pattern>
                </PatternLayout>
                <TimeBasedTriggeringPolicy interval="1" modulate="true" />
                <SizeBasedTriggeringPolicy size="500" />
              </RollingFile>
            </Route>
            <Route ref="STDOUT" key="Audit"/>
          </Routes>
        </Routing>
      </Appenders>
     
      <Loggers>
        <Logger name="EventLogger" level="info" additivity="false">
          <AppenderRef ref="Routing"/>
        </Logger>
     
        <Root level="error">
          <AppenderRef ref="STDOUT"/>
        </Root>
      </Loggers>
     
    </Configuration>
    これらの要素を簡単に紹介します.<Configuration>は、ログ設定の最上位ノードです.<Properties>, <Appenders>, <Loggers>要素がサブノードとして使用されます.status属性はlog 4 jの内部イベントのログレベルを表す.
    monitorInterval="30"とは、ログ4 jがファイルが変更されたかどうかを確認するサイクルが"30"分である.<Properties>は、<Configuration>の領域内で使用されるPropertyを表す.
    Javaで計算するとグローバル変数のようです.<Layout>は、日付または時刻(12,24)のフォーマット、色、出力要素などを決定できる要因である.
    具体的な使用方法はリンク<Appenders>は、ログ情報を特定の場所に送信する役割である.
  • ConsoleAppender
  • RollingFileAppender
  • FileAppender
  • JDBCAppender
  • など...
  • の具体的な使用方法は、リンク2
  • である.
    ここでは、最もコアなRollingFileAppenderについて個別に紹介します.
    <RollingFile name="Rolling-${sd:type}" fileName="${filename}" 
    	filePattern="target/rolling1/test1-${sd:type}.%i.log.gz">
           
           <PatternLayout>
           		<pattern>%d %p %c{1.} [%t] %m%n</pattern>
           </PatternLayout>
           <Policies>
           	<TimeBasedTriggeringPolicy interval="1" modulate="true" />
           	<SizeBasedTriggeringPolicy size="500" />
           </Policies>
           <DefaultRolloverStrategy max="10" fileIndex="min"/>
    </RollingFile>
    ログ・ファイルに問題が発生した場合、ログがすべて失われる可能性があるため、RollingFileAppenderは事前に設定できます.RollingFileAppenderは、ログをファイルに記録し、特定の基準に従って圧縮および格納するAppenderです.<Logger> Rootパッケージの<Logger>が必要であり、複数のパッケージを適用する場合、<Loggers>内に複数の<Logger>を設けることができる.
    <Loggers>
    	<!-- Additivity값은 중복된 로그를 남길 지에 대한 속성 -->
        <Logger name="EventLogger" level="INFO" additivity="false">
          <AppenderRef ref="Routing"/>
        </Logger>
     
        <Root level="error">
          <AppenderRef ref="STDOUT"/>
        </Root>
    </Loggers>
    このレコーダは、INFO以上のログをコンソールに保持するファイル名=「EventLoger」パッケージです.

    jarファイルの新しいバージョンを追加



    コード変更

    // 변경 전
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    
    //변경 후
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    ---------------------------------------------------------------------
    
    //변경 전
    //변수이름과 (“??”)안의 클래스명은 기존 코드에 맞게 알아서 수정
    protected static final Log log = LogFactory.getLog(??)
    
    //변경 후
    protected static final Logger log = LoggerFactory.getLogger(??)
    ちなみにjava 8バージョン以上からサポートされている2.17.0バージョンも試してみましたが、同じ動作で問題ないことを確認しました.

    リファレンス


    https://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution