001    package org.apache.maven.cli.logging;
002    
003    /*
004     * Licensed to the Apache Software Foundation (ASF) under one
005     * or more contributor license agreements.  See the NOTICE file
006     * distributed with this work for additional information
007     * regarding copyright ownership.  The ASF licenses this file
008     * to you under the Apache License, Version 2.0 (the
009     * "License"); you may not use this file except in compliance
010     * with the License.  You may obtain a copy of the License at
011     *
012     *   http://www.apache.org/licenses/LICENSE-2.0
013     *
014     * Unless required by applicable law or agreed to in writing,
015     * software distributed under the License is distributed on an
016     * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017     * KIND, either express or implied.  See the License for the
018     * specific language governing permissions and limitations
019     * under the License.
020     */
021    
022    import org.codehaus.plexus.logging.Logger;
023    import org.codehaus.plexus.logging.LoggerManager;
024    import org.slf4j.ILoggerFactory;
025    import org.slf4j.LoggerFactory;
026    
027    /**
028     * Use an SLF4J {@link org.slf4j.ILoggerFactory} as a backing for a Plexus {@link org.codehaus.plexus.logging.LoggerManager},
029     * ignoring Plexus logger API parts that are not classical and probably not really used.
030     *
031     * @author Jason van Zyl
032     * @since 3.1
033     */
034    public class Slf4jLoggerManager
035        implements LoggerManager
036    {
037    
038        private ILoggerFactory loggerFactory;
039    
040        public Slf4jLoggerManager()
041        {
042            loggerFactory = LoggerFactory.getILoggerFactory();
043        }
044    
045        public Logger getLoggerForComponent( String role )
046        {
047            return new Slf4jLogger( loggerFactory.getLogger( role ) );
048        }
049    
050        /**
051         * The logger name for a component with a non-null hint is <code>role.hint</code>.
052         * <b>Warning</b>: this does not conform to logger name as class name convention.
053         * (and what about <code>null</code> and <code>default</code> hint equivalence?)
054         */
055        public Logger getLoggerForComponent( String role, String hint )
056        {
057            return ( null == hint
058                ? getLoggerForComponent( role )
059                : new Slf4jLogger( loggerFactory.getLogger( role + '.' + hint ) ) );
060        }
061    
062        //
063        // Trying to give loggers back is a bad idea. Ceki said so :-)
064        // notice to self: what was this method supposed to do?
065        //
066        /**
067         * <b>Warning</b>: ignored.
068         */
069        public void returnComponentLogger( String role )
070        {
071        }
072    
073        /**
074         * <b>Warning</b>: ignored.
075         */
076        public void returnComponentLogger( String role, String hint )
077        {
078        }
079    
080        /**
081         * <b>Warning</b>: ignored (always return <code>0</code>).
082         */
083        public int getThreshold()
084        {
085            return 0;
086        }
087    
088        /**
089         * <b>Warning</b>: ignored.
090         */
091        public void setThreshold( int threshold )
092        {
093        }
094    
095        /**
096         * <b>Warning</b>: ignored.
097         */
098        public void setThresholds( int threshold )
099        {
100        }
101    
102        /**
103         * <b>Warning</b>: ignored (always return <code>0</code>).
104         */
105        public int getActiveLoggerCount()
106        {
107            return 0;
108        }
109    
110    }