<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.

-->
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>
    <appender name="F1" class="org.apache.log4j.FileAppender">
        <param name="file"   value="temp"/>
        <param name="append" value="false"/>
        <layout class="org.apache.log4j.PatternLayout">
           <param name="ConversionPattern" value="%p %c - p1:%X{p1} p2:%X{p2} %m%n"/>
        </layout>
    </appender>


  <appender name="A1" class="org.apache.log4j.rewrite.RewriteAppender">
      <appender-ref ref="F1"/>
      <rewritePolicy class="org.apache.log4j.rewrite.PropertyRewritePolicy">
          <param name="properties" value="p1=Hello,p2=World,x1=3.1415"/>
      </rewritePolicy>
  </appender>

  <root>
    <level value ="debug" />
    <appender-ref ref="A1" />
  </root>

</log4j:configuration>
