2017-07-21 8 views
1

私はlog4j2でYARNのクラスタモードで動作するSparkアプリケーションを開発中です。私はロギングのために選択されているlog4j2.xmlファイルを提供しています。私はロギングで環境変数を取得する際に問題に直面しています。 app-name、app-id、application-attempt、container-name、logging-levelを取得したい。私はsyslog appenderを使ってこのログを集中ログサーバーに送るかもしれません。これらの環境変数をログ・ステートメントの接頭辞として使用しています。 app-name、app-id、application-attemptを取得できましたが、container-nameとlogging-levelの環境変数が見つかりませんでした。また、エグゼキュータで環境変数を取得できません。これらの変数スコープはドライバのみに制限されているようです。実行時にコンテナ名とロギングレベルの環境変数を取得する方法と、エグゼキュータでこれらの環境変数を取得する方法はありますか?spark環境変数スコープとlog4j2での読み取り

<?xml version="1.0" encoding="UTF-8"?> 
    <Configuration status = "INFO"> 
     <Appenders> 
      <Console name ="Console" target="SYSTEM_OUT"> 
       <PatternLayout pattern = "%d{HH:mm:ss.SSS} ${sys:spark.yarn.app.id}:${sys:spark.app.name}:${sys:spark.yarn.app.attemptId}[%t] %-5level %logger{36} - %msg%n" /> 
     </Console> 
    <Appenders> 
    <Loggers> 
     <Root level="info"> 
      <AppenderRef ref = "Console"/> 
     </Root> 
    </Loggers> 
</Configuration> 

答えて

1

${env:key}のルックアップの代わりに、${sys:key}のルックアップを使用してみてください。前者はOSレベルの環境変数用、後者はJavaシステムプロパティ用です。

も参照してください。https://logging.apache.org/log4j/2.x/manual/lookups.html

関連する問題