GeneXus 15の新機能 その5 ~Log4jとの連携~

日本でもGeneXus 16のリリースが近づいていますが、GeneXus 15の新機能を紹介したいと思います。
GeneXus 15 Upgrade 11(日本では未リリースのため、実質Upgrade 12)からJavaのロギングユーティリティの「Log4j」と連携できるようになりました。

実装方法

「Log」という外部オブジェクトがGeneXusモジュール内に追加されております。
EventsエレメントやSourceエレメントなどに、下記のように外部オブジェクトを呼び出すコードを記載します。

メソッドとしては、各ログレベルを指定します。

  • Fatal
  • Error
  • Warning
  • Info
  • Debug
  • Write

Writeメソッドは第3引数にFatal~Debugのログレベルを指定する以外は、他のメソッドを使用した場合と出力結果は同じです。

出力レベルの設定

設定パネルのGeneratorの Log level プロパティで、出力レベルを指定できます。

Generatorのログの設定

ここで指定した以上のログレベルのログが出力されます。
例えば Log level プロパティに”2. Error”を指定した場合には、ログレベルがFatalとErrorのログが出力されます。

出力結果

アプリケーションフォルダの直下にlogsフォルダが作成され、Generatorの Log file プロパティで指定したファイル名に、下記のように出力されていました。

ERROR 2018-11-14T10:52:47,278 3914804 テスト [http-nio-8080-exec-36] WebPanel1

また、ログファイルの管理として、下記のように1時間毎にログファイルを移動&リネームしていました。

アプリケーション\logs\old\app-2018-11-14-09-1.log
アプリケーション\logs\old\app-2018-11-14-10-1.log

まとめ

これまでGeneXusでLog4jと連携するには手動で外部オブジェクトを作成し、propertiesファイルを用意して・・・と面倒だったのですが、簡単に利用できるようになりました。


--------------------------
システム開発のご要望・ご相談はこちらから

8件のコメント

  1. いつも拝見しております。
    有益な情報ありがとうございます。

    アプリケーションをデプロイ後、「Log4j」の設定変更を行いたい場合、
    何処を編集することになりますでしょうか。
    よろしければご教授ください。

    1. こんにちは。カサレアルの渡邊と申します。
      たいした情報を記載していませんが、ご参考になれば幸いです。

      ご質問いただいた、デプロイ後のLog4jの設定変更ですと、下記のファイルを編集することで可能ではないでしょうか。
      アプリのデプロイ先\WEB-INF\classes\log4j2.xml
      動作確認しておりませんが、出力レベルや出力先のパスの情報が出ていました。

      1. ご返信ありがとうございます。
        「classes」の配下となるとデプロイ後に修正するか、Fileオブジェクトとしてエクスポートファイル設定するかでしょうか…
        GeneXusにてxmlの優先参照先が指定できれば理想的でした。

        大変勉強になりました。
        ありがとうございます。

        1. ご要望の意図とずれているかもしれませんが、
          デプロイ先の環境によって設定を変えたいということでしたら、
          設定パネルで環境(environment)を複数作成することで、
          GeneXus内のみで完結できるかと思います。

          また、ターゲット環境のディレクトリにxmlが出力されておりますので、
          デプロイ前であればこちらを管理・修正すれば、
          1つの環境でも設定の変更ができそうです。
          なお、こちらはビルドの度に上書かれるようですのでご注意ください。

          ご参考になれば幸いです。

  2. 毎回有益な情報をご提供いただきありがとうございます。

    下記のログファイルの移動とリネーム処理についてお伺いしたいのですが、
    こちらはGeneXusが自動で行う処理なのでしょうか?

    >また、ログファイルの管理として、下記のように1時間毎にログファイルを移動&リネーム>していました。

    >アプリケーション\logs\old\app-2018-11-14-09-1.log
    >アプリケーション\logs\old\app-2018-11-14-10-1.log

    1. カサレアルの渡邊と申します。
      最近更新頻度が落ちていますが、ご参考になれば幸いです。

      ログローテションの件ですが、厳密にいうとGeneXusではなくLog4jにより、
      自動的にアプリケーション\logs\old\のディレクトリに移動されているかと思います。
      アプリの中のlog4j2.xmlを見ると、下記のような記述がありました。

      <RollingFile name=”RollingFile” fileName=”${logPath}\client.log” filePattern=”${logPath}\old\app-%d{yyyy-MM-dd-HH}-%i.log.gz”>

      なお、GeneXus 16 Upgrade 2で確認しましたが、GeneXus上でログローテーションに関する設定箇所は見当たりませんでした。

      1. お忙しい中ご回答いただき誠にありがとうございます。

        申し訳ございませんがもう一点質問させてください。
        おそらくlog4j2.xmlはGeneXusの環境設定の言語を「Java」に設定した際には自動で作成されるかと思います。
        言語を「C#」に設定した場合でも同じようにログローテーション実現させる方法はございますでしょうか?

        1. Log4jとの連携は、ジェネレーターを「Java」に設定した場合ですね。
          ジェネレーターを「C#」にした場合には、Log4netとの連携がされます。

          GeneXusが生成したlog.configを確認すると、下記のようにデフォルトでは9000KBを超える場合に、ログローテーションされる設定がございました。

          <maximumFileSize value=”9000KB”/>
          <maxSizeRollBackups value=”4″/>
          <rollingStyle value=”Size”/>

          ご参考ください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です