<?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/" debug="false">

   <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
      <param name="Target" value="System.out"/>
      <param name="Threshold" value="TRACE"/>
      <layout class="org.apache.log4j.PatternLayout">
         <param name="ConversionPattern" value="[%-5p] [%c]  %m%n"/>
      </layout>
   </appender>

   <category name="org.apache.click">
      <priority value="INFO"/>
   </category>
   
   <category name="com.opensymphony.oscache">
      <priority value="WARN"/>
   </category>

   <category name="org.apache.cayenne">
      <priority value="WARN"/>
   </category>

   <category name="org">
      <priority value="WARN"/>
   </category>

   <root>
      <appender-ref ref="CONSOLE"/>
   </root>

</log4j:configuration>
