2016-09-08 15 views
2

Log4j2の構成部分を読んでいます。 http://logging.apache.org/log4j/2.x/manual/configuration.html

<Appenders> 
    <Console name="STDOUT"> 
     <PatternLayout pattern="%m%n"/> 
    </Console> 
    <List name="List"> 
     <ThresholdFilter level="debug"/> 
    </List> 
    <Routing name="Routing"> 
     <Routes pattern="$${sd:type}"> 
     <Route> 
      <RollingFile name="Rolling-${sd:type}" fileName="${filename}" 
         filePattern="target/rolling1/test1-${sd:type}.%i.log.gz"> 
      <PatternLayout> 
       <pattern>%d %p %c{1.} [%t] %m%n</pattern> 
      </PatternLayout> 
      <SizeBasedTriggeringPolicy size="500" /> 
      </RollingFile> 
     </Route> 
     <Route ref="STDOUT" key="Audit"/> 
     <Route ref="List" key="Service"/> 
     </Routes> 
    </Routing> 
    </Appenders> 

サイン$$二重の意味は何ですか?例えば$$ {sd:type}?

答えて

2

$がエスケープ文字として使用されているようです。 Log4J documentationで述べたように、Log4jの設定ファイルパーサーはApache Commons Lang's StrSubstitutorを使用し、StrSubstitutorのため、このドキュメントは言う:

他の可能性は、デフォルトの「$」で、エスケープ文字を使用することです。 この文字が変数参照の前に置かれている場合、この 参照は無視され、置き換えられません。たとえば:

The variable $${${name}} must be used.

私は彼らがこの変数は、実行時に、後で評価できるよう"${sd:type}"に値を設定したいと思います。ここに良い例/説明があります:http://logging.apache.org/log4j/2.x/manual/lookups.html#ContextMapLookup

+0

はい、あなたは正しいです。 Lookupメニューのhttp://logging.apache.org/log4j/2.x/manual/lookups.htmlによれば、「最初の設定処理中に、最初の '$'は削除されます」 – user3544765

関連する問題