ログファイルの出力/ローテート設定(log4j2)
log4jの脆弱性が世間を賑わしまして、GeneXusでも対応方法がいくつか出ておりました
GeneXus日本語SAC
log4j ライブラリに関連する脆弱性(CVE-2021-44228)について
https://sac.genexus.jp/viewtr_saclist.aspx?50554,
それはそれとしてシステムの運用においてログを正しく出力することは必要です。
GeneXusでもlog4jの機能が組み込まれており、デフォルトでログファイルへの出力が可能となっています。
Log 外部オブジェクト
ログファイルの出力場所/ローテートの設定などはlog4j2.xmlに記載されています。
Tomcatの場合だと
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\XXXXX\WEB-INF\classes\log4j2.xml
GeneXusのナレッジベースプロパティから調整できる値はこちら
それ以外の設定内容は直接log4j2.xmlに設定する形となります。
細かい設定はlog4j2のドキュメントなどを参照して設定頂ければ良いと思いますので、
基本的な部分と注意点だけ記載します。
①デフォルトだとTomcatの場合は以下に出力されます
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\XXXXX\logs\client.log
ローテートされたバックアップファイルの方は
C:\Program Files\Apache Software Foundation\Tomcat 8.5\webapps\XXXXX\logs\old\
の配下に.gzの形で保存されます。
②ログの出力場所とファイル名については
GeneXusのナレッジベースプロパティから設定できますが、それだと以下のような形になります。
<Property name="logPath">${main:0}${LS}logs${LS}</Property>
<Property name="logFilePath">C:\Program Files\Apache Software Foundation\Tomcat 8.5\logs\SYSTEM_XXXXX.log</Property>
<RollingFile name="RollingFile" fileName="${logFilePath}" filePattern="${logPath}old${LS}app-%d{yyyy-MM-dd-HH}-%i.log.gz">
これだとログファイル自体は設定したとおりになるのですが、
ローテートした結果のバックアップファイルが結局デフォルトの場所に出力されてしまうことになります。
※filePatternの部分
③出力場所を変更したい場合は上記②のことがあるのでlog4j2.xmlを直接変更する形で対応します。
が、そうするとローカルPCからビルドした場合は、デフォルトのlog4j2.xmlに戻ってしまいます。。。
なので、検証環境/本番環境といった実際の稼働環境のlog4j2.xmlを調整するのが良いでしょう。
④ローテートについて、デフォルトだと1時間ごとの10MBごとにローテートされます。
かなり細かく分かれて見づらくなりますので、個人的には1日1ログファイルが良いかと思います。
その場合の設定方法はこちら
<RollingFile name="RollingFile" fileName="${logFilePath}" filePattern="${logPath}old${LS}app-%d{yyyy-MM-dd-HH}-%i.log.gz">
↓↓↓
<RollingFile name="RollingFile" fileName="${logFilePath}" filePattern="${logPath}old${LS}app-%d{yyyy-MM-dd}-%i.log.gz">
<TimeBasedTriggeringPolicy />
<SizeBasedTriggeringPolicy size="10 MB"/>
↓↓↓
<TimeBasedTriggeringPolicy />
コメント
コメントを投稿