import java.text.DateFormat;
import java.util.Date;
import java.util.HashMap;
+import java.util.Optional;
import java.util.Properties;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
*/
public final class ConfigurationFactory {
- private static final EELFLogger logger = EELFManager.getInstance().getApplicationLogger();
+ private static final EELFLogger logger = EELFManager.getInstance().getLogger(ConfigurationFactory.class);
/**
* This is a string constant for the comma character. It's intended to be used a common string
config = new DefaultConfiguration();
initialize(null);
}
- } catch (Exception t) {
- logger.error("getConfiguration", t);
+ } catch (Exception e){
+ logger.error("getConfiguration", e);
} finally {
writeLock.unlock();
}
readLock.lock();
}
- return config;
} finally {
readLock.unlock();
}
+ return config;
}
/**
* can be altered if needed.
*/
public static Configuration getConfiguration(final Object owner) {
+ DefaultConfiguration local;
ReadLock readLock = lock.readLock();
readLock.lock();
try {
- DefaultConfiguration local = (DefaultConfiguration) localConfigs.get(owner);
+ local = (DefaultConfiguration) localConfigs.get(owner);
if (local == null) {
readLock.unlock();
WriteLock writeLock = lock.writeLock();
writeLock.lock();
- try {
- local = (DefaultConfiguration) localConfigs.get(owner);
- if (local == null) {
- DefaultConfiguration global = (DefaultConfiguration) getConfiguration();
- try {
- local = (DefaultConfiguration) global.clone();
- } catch (CloneNotSupportedException e) {
- logger.error("getConfiguration", e);
- }
- localConfigs.put(owner, local);
- }
- } finally {
- writeLock.unlock();
+ local = (DefaultConfiguration) localConfigs.get(owner);
+ if (local == null) {
+ local = getClonedDefaultConfiguration(owner, local);
}
- readLock.lock();
+ writeLock.unlock();
}
- return local;
+ readLock.lock();
} finally {
readLock.unlock();
}
+ return local;
}
/**
}
}
+ private static DefaultConfiguration getClonedDefaultConfiguration(Object owner, DefaultConfiguration local) {
+ Optional<DefaultConfiguration> global =
+ Optional.ofNullable((DefaultConfiguration) getConfiguration());
+ try {
+ if (global.isPresent()) {
+ local = (DefaultConfiguration) global.get().clone();
+ }
+ } catch (CloneNotSupportedException e) {
+ logger.error("getClonedDefaultConfiguration", e);
+ }
+ localConfigs.put(owner, local);
+ return local;
+ }
+
/**
* This method will clear the current configuration and then re-initialize it with the default
* values, application-specific configuration file, user-supplied properties (if any), and then
try {
in.close();
} catch (IOException e) {
- // not much we can do since logger may not be configured yet
- e.printStackTrace(System.out);
+ logger.error("Cannot close inputStream", e);
}
}
for (String key : config.getProperties().stringPropertyNames()) {
stream.close();
}
} catch (IOException e) {
- // not much we can do since logger may not be configured
- // yet
- e.printStackTrace(System.out);
+ logger.error("Unable to close stream", e);
}
}
}