<?xml version="1.0" encoding="UTF-8"?>
<!--
     ============LICENSE_START=======================================================
     org.onap.dmaap
     ================================================================================
     Copyright © 2017 AT&T Intellectual Property. All rights reserved.
     ================================================================================
     Licensed 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.
     ============LICENSE_END=========================================================
   
     ECOMP is a trademark and service mark of AT&T Intellectual Property.
     
 -->

<!DOCTYPE log4j:configuration PUBLIC
  "-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">

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

	<!-- available for console output, not generally used in deployment -->
	<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
		<param name="threshold" value="INFO" />
		<layout class="org.apache.log4j.EnhancedPatternLayout">
			<param name="ConversionPattern" value="[%d{ISO8601}{GMT+0} GMT][%-10t][%-5p]%m%n" />
		</layout>
	</appender>

	<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
		<param name="threshold" value="INFO" />
		<param name="File" value="./logs/cambria.log" />	<!-- use local dir by default; prod setup can overwrite -->
		<param name="MaxFileSize" value="128MB"/>
		<param name="MaxBackupIndex" value="10"/>
		<layout class="org.apache.log4j.EnhancedPatternLayout">
			<param name="ConversionPattern" value="[%d{ISO8601}{GMT+0} GMT][%-10t][%-5p]%m%n" />
		</layout>
	</appender>

	<appender name="ECOMP_ERROR" class="org.apache.log4j.RollingFileAppender">
		<param name="threshold" value="INFO" />
		<param name="File" value="./logs/error.log" />	<!-- use local dir by default; prod setup can overwrite -->
		<param name="MaxFileSize" value="128MB"/>
		<param name="MaxBackupIndex" value="10"/>
		<layout class="org.apache.log4j.EnhancedPatternLayout">
			<param name="ConversionPattern" value="%d{yyyy-MM-dd'T'HH:mm:ss}{GMT+0}+00:00|%X{requestId}|%X{serviceInstanceId}|%-10t|%X{serverName}|%X{serviceName}|%X{instanceUuid}|%p|%X{severity}|%X{serverIpAddress}|%X{server}|%X{ipAddress}|%X{className}|%X{timer}|%m%n" />
		</layout>
	</appender>
	<!-- the other 3 ECOMP logs are omitted for this release -->

	<root>
		<level value="INFO" />
		<appender-ref ref="FILE" />
		<appender-ref ref="ECOMP_ERROR" />
		<appender-ref ref="CONSOLE" />
	</root>

</log4j:configuration>
