<!--
/**
 * 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.
 */
-->

<configuration>
	<!--  scan="true" scanPeriod="5 seconds" debug="true"> -->
	<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator">
		<resetJUL>true</resetJUL>
	</contextListener>

	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
		<encoder>
			<!-- <pattern>%d{HH:mm:ss.SSS} [%.15thread] %-5level %logger{36}:%line - %msg%n</pattern> -->
			<pattern>[%.15thread] %-5level %logger{36}:%line - %msg%n</pattern>
		</encoder>
	</appender>

	<!-- <logger name="Events.Service.cdi-itests" level="INFO"/> -->
	<!-- <logger name="Events.Service.org.apache.aries.cdi" level="INFO"/> -->
	<!-- <logger name="org.apache.aries.cdi" level="DEBUG"/> -->

	<logger name="LogService.org.apache.aries.cdi.itests" level="OFF"/>
	<logger name="org.eclipse" level="ERROR"/>
	<logger name="org.jboss" level="ERROR"/>

	<root level="ERROR">
		<appender-ref ref="STDOUT" />
	</root>
</configuration>
