/*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* Copyright (c) 2013, MPL CodeInside http://codeinside.ru
*/
package org.apache.jul;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogConfigurationException;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.impl.Jdk14Logger;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.logging.LogManager;
final public class JulLogFactory extends LogFactory {
protected Hashtable attributes = new Hashtable();
protected Hashtable instances = new Hashtable();
public JulLogFactory() {
final InputStream is = getClass().getClassLoader().getResourceAsStream("logging.properties");
try {
if (is != null) {
LogManager.getLogManager().readConfiguration(is);
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public Object getAttribute(String name) {
return (attributes.get(name));
}
public String[] getAttributeNames() {
ArrayList<String> names = new ArrayList<String>(attributes.size());
Enumeration keys = attributes.keys();
while (keys.hasMoreElements()) {
names.add((String) keys.nextElement());
}
return names.toArray(new String[names.size()]);
}
public Log getInstance(Class clazz) throws LogConfigurationException {
return getInstance(clazz.getName());
}
public Log getInstance(String name) throws LogConfigurationException {
Log instance = (Log) instances.get(name);
if (instance == null) {
instance = new Jdk14Logger(name);
instances.put(name, instance);
}
return (instance);
}
public void release() {
instances.clear();
}
public void removeAttribute(String name) {
attributes.remove(name);
}
public void setAttribute(String name, Object value) {
if (value == null) {
attributes.remove(name);
} else {
attributes.put(name, value);
}
}
}