<?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.
-->

<!-- $Rev$ $Date$ -->

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

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

    <appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
        <param name="Target" value="System.out"/>
        <param name="Threshold" value="${gshell.log.console.level}"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%-5p %-25.30c{1} [%t] %m%n"/>
        </layout>
    </appender>

    <appender name="FILE" class="org.apache.log4j.FileAppender">
        <param name="File" value="${gshell.home}/var/log/gshell.log"/>
        <param name="Append" value="false"/>
        <param name="Threshold" value="DEBUG"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p (%t) [%c] %m%n"/>
        </layout>
    </appender>

    <logger name="org.apache.geronimo.gshell.parser.CommandLineParser">
        <level value="INFO"/>
    </logger>

    <logger name="org.apache.geronimo.gshell.wisdom.application.ApplicationSecurityManager">
        <level value="DEBUG"/>
    </logger>

    <logger name="org.apache.geronimo.gshell.console">
        <level value="INFO"/>
    </logger>

    <logger name="org.springframework">
        <level value="WARN"/>
    </logger>

    <logger name="org.apache.commons.vfs.cache">
        <level value="INFO"/>
    </logger>
    
    <logger name="org.apache.maven">
        <level value="INFO"/>
    </logger>

    <logger name="org.apache.maven.artifact.manager.WagonManager:default">
        <level value="ERROR"/>
    </logger>

    <logger name="org.apache.commons.jexl.ExpressionFactory">
        <level value="INFO"/>
    </logger>
    
    <root>
        <level value="${gshell.log.console.level}"/>
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
    </root>

</log4j:configuration>