view src/goodjava/logger/GoodLoggerFactory.java @ 1515:78d937870762

Thread.synchronized
author Franklin Schmidt <fschmidt@gmail.com>
date Sat, 30 May 2020 17:58:35 -0600
parents 219f2b937f2b
children
line wrap: on
line source

package goodjava.logger;

import java.util.Map;
import java.util.HashMap;


public final class GoodLoggerFactory {
	private GoodLoggerFactory() {}  // never

	public static final Appender DEFAULT_APPENDER;
	public static final Configurer DEFAULT_CONFIGURER;
	static {
		Layout layout = new ListLayout(Layouts.LEVEL," - ",Layouts.MESSAGE,"\n",Layouts.THROWABLE);
		DEFAULT_APPENDER = new ConsoleAppender(layout,System.err);
		DEFAULT_CONFIGURER = new SimpleConfigurer(Level.INFO,DEFAULT_APPENDER);
	}
	private static final Map<String,GoodLogger> map = new HashMap<String,GoodLogger>();
	private static Configurer configurer = DEFAULT_CONFIGURER;

	public static synchronized GoodLogger getLogger(String name) {
		GoodLogger logger = map.get(name);
		if( logger == null ) {
			logger = new GoodLogger(name);
			configurer.configure(logger);
			map.put(name,logger);
		}
		return logger;
	}

	public static synchronized Configurer getConfigurer() {
		return configurer;
	}

	public static synchronized void setConfigurer(Configurer configurer) {
		GoodLoggerFactory.configurer = configurer;
		for( GoodLogger logger : map.values() ) {
			configurer.configure(logger);
		}
	}

}