/*******************************************************************************
* Copyright (c) 2010-present Sonatype, Inc.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Stuart McCulloch (Sonatype, Inc.) - initial API and implementation
*
* Minimal facade required to be binary-compatible with legacy Plexus API
*******************************************************************************/
package org.codehaus.plexus.logging;
import java.util.Map;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
import org.eclipse.sisu.inject.Weak;
import org.eclipse.sisu.plexus.Roles;
public abstract class BaseLoggerManager
extends AbstractLoggerManager
implements Initializable
{
// ----------------------------------------------------------------------
// Implementation fields
// ----------------------------------------------------------------------
private final Map<String, Logger> activeLoggers = Weak.values();
String threshold = "INFO";
private int currentThreshold;
// ----------------------------------------------------------------------
// Public methods
// ----------------------------------------------------------------------
public final void initialize()
{
currentThreshold = parseThreshold( threshold );
}
public final synchronized Logger getLoggerForComponent( final String role, final String hint )
{
final String name = Roles.canonicalRoleHint( role, hint );
Logger logger = activeLoggers.get( name );
if ( null == logger )
{
logger = createLogger( name );
logger.setThreshold( currentThreshold );
activeLoggers.put( name, logger );
}
return logger;
}
public final synchronized void returnComponentLogger( final String role, final String hint )
{
activeLoggers.remove( Roles.canonicalRoleHint( role, hint ) );
}
public final int getThreshold()
{
return currentThreshold;
}
public final void setThreshold( final int currentThreshold )
{
this.currentThreshold = currentThreshold;
}
public final synchronized void setThresholds( final int currentThreshold )
{
this.currentThreshold = currentThreshold;
for ( final Logger logger : activeLoggers.values() )
{
logger.setThreshold( currentThreshold );
}
}
public static final int parseThreshold( final String text )
{
if ( "DEBUG".equalsIgnoreCase( text ) )
{
return Logger.LEVEL_DEBUG;
}
else if ( "INFO".equalsIgnoreCase( text ) )
{
return Logger.LEVEL_INFO;
}
else if ( "WARN".equalsIgnoreCase( text ) )
{
return Logger.LEVEL_WARN;
}
else if ( "ERROR".equalsIgnoreCase( text ) )
{
return Logger.LEVEL_ERROR;
}
else if ( "FATAL".equalsIgnoreCase( text ) )
{
return Logger.LEVEL_FATAL;
}
else if ( "DISABLED".equalsIgnoreCase( text ) )
{
return Logger.LEVEL_DISABLED;
}
return Logger.LEVEL_DEBUG;
}
public final synchronized int getActiveLoggerCount()
{
return activeLoggers.size();
}
// ----------------------------------------------------------------------
// Customizable methods
// ----------------------------------------------------------------------
protected abstract Logger createLogger( String name );
}