<?xml version="1.0" encoding="UTF-8" ?>
<!--
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.
-->
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p %d{yyyyMMdd_HH:mm:ss:SSS_z} [%t] %c{2}: %m%n" />
		</layout>
	</appender>

	<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
		<appender-ref ref="FILE" />
	</appender>

	<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="${blur.logs.dir}/${blur.log.file}_main.log" />
		<param name="DatePattern" value="'.'yyyyMMdd" />
		<param name="Append" value="true" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p %d{yyyyMMdd_HH:mm:ss:SSS_z} [%t] %c{2}: %m%n" />
		</layout>
	</appender>
	
	<appender name="ASYNC_REQUEST_LOG_FILE" class="org.apache.log4j.AsyncAppender">
		<appender-ref ref="REQUEST_LOG_FILE" />
	</appender>
	
	<appender name="REQUEST_LOG_FILE" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="${blur.logs.dir}/${blur.log.file}_request.log" />
		<param name="DatePattern" value="'.'yyyyMMdd" />
		<param name="Append" value="true" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="{&quot;ts&quot;:&quot;%d{yyyyMMdd_HH:mm:ss:SSS_z}&quot;,&quot;thread&quot;:&quot;%t&quot;,&quot;reponse&quot;:%m}%n" />
		</layout>
	</appender>
	
	<appender name="ASYNC_RESPONSE_LOG_FILE" class="org.apache.log4j.AsyncAppender">
		<appender-ref ref="RESPONSE_LOG_FILE" />
	</appender>
	
	<appender name="RESPONSE_LOG_FILE" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="${blur.logs.dir}/${blur.log.file}_response.log" />
		<param name="DatePattern" value="'.'yyyyMMdd" />
		<param name="Append" value="true" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="{&quot;ts&quot;:&quot;%d{yyyyMMdd_HH:mm:ss:SSS_z}&quot;,&quot;thread&quot;:&quot;%t&quot;,&quot;reponse&quot;:%m}%n" />
		</layout>
	</appender>
	
	<appender name="ASYNC_LUCENE_WRITER_INFO_STREAM_FILE" class="org.apache.log4j.AsyncAppender">
		<appender-ref ref="LUCENE_WRITER_INFO_STREAM_FILE" />
	</appender>
	
	<appender name="LUCENE_WRITER_INFO_STREAM_FILE" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="${blur.logs.dir}/${blur.log.file}_infostream.log" />
		<param name="DatePattern" value="'.'yyyyMMdd" />
		<param name="Append" value="true" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%-5p %d{yyyyMMdd_HH:mm:ss:SSS_z} [%t] %c{2}: %m%n" />
		</layout>
	</appender>
	
	<logger name="org.apache.hadoop">
    	<level value="ERROR" />
	    <appender-ref ref="ASYNC"/>
	</logger>
	
	<logger name="REQUEST_LOG" additivity="false">
		<!-- Make value = "INFO"to enable -->
    	<level value="ERROR" />
	    <appender-ref ref="ASYNC_REQUEST_LOG_FILE"/>
	</logger>
	
	<logger name="RESPONSE_LOG" additivity="false">
		<!-- Make value = "INFO"to enable -->
    	<level value="ERROR" />
	    <appender-ref ref="ASYNC_RESPONSE_LOG_FILE"/>
	</logger>
	
	<logger name="LUCENE_WRITER_INFO_STREAM" additivity="false">
		<!-- Make value = "INFO"to enable -->
    	<level value="ERROR" />
	    <appender-ref ref="ASYNC_LUCENE_WRITER_INFO_STREAM_FILE"/>
	</logger>

	<!--root>
	For production use, the async configuration will be better for performance at the cost of not seeing the final flushed log events.
		<priority value="INFO" />
		<appender-ref ref="ASYNC" />
	</root-->

	<root>
		<priority value="INFO" />
		<appender-ref ref="FILE" />
	</root>
</log4j:configuration>