17

構成ファイルにデフォルトlogback.xmlの変数があり、タイプセーフな構成ファイルからこれらの変数をオプションで設定できるようにしたいと考えていapplication.confます。

one-jar を使用してアプリケーションをデプロイしていますapplication.confが、デプロイ可能な jar にパッケージ化されたファイルにはデフォルトが含まれています。-Dconfig.file=foo.confサーバー固有の構成ファイルへのパスを提供するために実行を渡します。

現在-Dlog.level、 およびその他の変数を渡して でデフォルトをオーバーライドすることもできます。コマンド ラインでlogback.xmlも渡す必要があります。-Dfile.encoding=UTF-8コマンドラインではなくタイプセーフ構成でこれらのプロパティを指定できる方法を探しています。それを行う方法があるはずのように感じますが、魔法の言葉が見つかりません.

logback.xml:

<configuration>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path:-logs/}/${log.file:-myLog.log}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>logFile.%d{yyyy-MM-dd}.log</fileNamePattern>

            <!-- keep 15 days' worth of history -->
            <maxHistory>${log.history.days:-15}</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="${log.level:-INFO}">
        <appender-ref ref="FILE" />
    </root>
</configuration>

application.conf (同梱):

akka {
    log-config-on-start = false
    event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]
}

サーバー固有の app.conf の例:

include "/application.conf"

akka.log-config-on-start = true

log.level = WARN // this is what I'd LIKE to be able to do

現在アプリを実行している方法:

java -Dfile.encoding=UTF-8 -Dconfig.file=myApp.conf -Dlog.level=WARN -jar myApp_2.10-0.1-one-jar.jar 
4

3 に答える 3

6

タイプセーフな構成を持つログバックをプログラムで構成することにしました。簡単であることがわかりました。

def enableRemoteLogging(config: Config) = {
    val ctx = LoggerFactory.getILoggerFactory.asInstanceOf[LoggerContext]

    val gelf = new GelfAppender
    gelf.setGraylog2ServerHost(config.getString("logging.remote.server"))
    gelf.setUseLoggerName(true)
    gelf.setUseThreadName(true)
    gelf.setUseMarker(true)
    gelf.setIncludeFullMDC(true)
    gelf.setContext(ctx)
    gelf.start()

    LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME)
      .asInstanceOf[ch.qos.logback.classic.Logger]
      .addAppender(gelf)
  }
于 2013-12-04T06:47:06.007 に答える
2

私は Logback に詳しくありませんが、通常の Akka アプリケーションはデフォルト設定で出荷されておりreference.conf、これらの設定はapplication.conf. 構成の第 3層を追加したいようですね。これは確かにあなたの権利です。

私が見ることができる最も簡単な方法は、その逆ではなく、あなたapplication.confを含めるように変更することです。foo.confそうすれば、Akka は をロードしapplication.conf、それが をロードしますfoo.conf

ただし、JAR ディストリビューションごとに異なる名前の conf ファイルが必要な場合、これは機能しない可能性があります。その場合、 Merging Config Treesを調べて、プログラムで構成を読み込んで結合することをお勧めします。実際には、文字列を解析するのではなく、クラスパス リソースからロードすることを除いて、Akka 構成ドキュメントのカスタムの場所から構成を読み取る ことは、ほとんどまさにあなたが望むものです(その方法については、Typesafe Config ドキュメントを参照してください)。 myConfig.

Logback の設定に関しては、私が言ったように、私は Logback を知りません。ただし、タイプセーフな構成から値を読み取ることができ、Logback ルート ロガー レベルをそのよう設定できます。

于 2013-02-26T21:38:43.263 に答える