読者です 読者をやめる 読者になる 読者になる

Jettyのstderrout.logとrequest.logのパスを環境変数で指定する

Jetty Windows

Jettyのログを相対パスで指定していたのですが、異なるドライブレターに出したいというご要望です

共通

  • Windowsサーバです。
  • ドライブレターは環境変数環境変数で指定したものをプロパティとして起動時の引数で渡している想定です。
  • jetty.homeとjetty.baseは分離しています。
  • jettyは以下のように起動します。
set JETTY_HOME=C:\foo\runtime\jetty
set LOGDIR=C:\bar\logs\hogehoge

java -Djetty.home=%JETTY_HOME% -jar start.jar --exec -DLOGDIR=%LOGDIR%
  • ログディレクトリの指定を絶対パスにして各サービスのあちこちに埋め込むと導入時や開発時に書き換えが必要な場合にミスしやすいので、できれば使いたくありません。

stderrout.log

  • プロパティとして渡しているLOGDIRが効かないのでstart.iniの中で相対パスで指定していました。
--module=logging
jetty.logs=logs/hogehoge
  • 例えば出力先をD:\logsに変えたいとした時に相対パスではダメです。
    • jetty.homeetc\jetty-logging.xml${jetty.base}\etcにコピーして<Property name="jetty.logs" default="./logs"/>の所をLOGDIRに書き換えれば出来そうです。(start.iniのjetty.logsは消しておきます)
<Configure id="logging" class="org.eclipse.jetty.util.log.Log">

    <New id="ServerLog" class="java.io.PrintStream">
      <Arg>
        <New class="org.eclipse.jetty.util.RolloverFileOutputStream">
          <Arg><Property name="jetty.logs" default="./logs"/>/yyyy_mm_dd.stderrout.log</Arg><Arg><Property name="LOGDIR" />/yyyy_mm_dd.stderrout.log</Arg>

request.log

  • こちらもプロパティとして渡しているLOGDIRが効かないのでstart.iniの中で相対パスで指定していました。(指定の仕方は微妙に違います)
--module=requestlog
requestlog.filename=logs/hogehoge/yyyy_mm_dd.request.log
  • stderrout.logとは微妙に指定の仕方が違います。
    • jetty.homeetc\jetty-requestlog.xml${jetty.base}\etcにコピーして<Property name="jetty.base" default="." /><Property name="requestlog.filename" default="/logs/yyyy_mm_dd.request.log"/></Set>の所をLOGDIRに書き換えれば出来そうです。(start.iniのrequestlog.filenameは消しておきます)
<Configure id="Server" class="org.eclipse.jetty.server.Server">

  <!-- =========================================================== -->
  <!-- Configure Request Log -->
  <!-- =========================================================== -->
  <Ref refid="Handlers">
    <Call name="addHandler">
      <Arg>
        <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler">
          <Set name="requestLog">
            <New id="RequestLogImpl" class="org.eclipse.jetty.server.AsyncNCSARequestLog">
            <Set name="filename"><Property name="jetty.base" default="." /><Property name="requestlog.filename" default="/logs/yyyy_mm_dd.request.log"/></Set><Set name="filename"><Property name="LOGDIR" /><Property name="requestlog.filename" default="/yyyy_mm_dd.request.log"/></Set>

これで出たと思う。