/* * Copyright 2014 Higher Frequency Trading * * http://www.higherfrequencytrading.com * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.openhft.chronicle.logger.jul; import net.openhft.chronicle.logger.ChronicleLogAppenderConfig; import net.openhft.chronicle.logger.IndexedLogAppenderConfig; import net.openhft.chronicle.logger.VanillaLogAppenderConfig; import java.util.logging.Filter; import java.util.logging.Formatter; import java.util.logging.Level; import java.util.logging.LogManager; import static net.openhft.chronicle.logger.ChronicleLogConfig.*; public class ChronicleHandlerConfig { private final LogManager manager; private final String prefix; public ChronicleHandlerConfig(final Class<?> type) { this.manager = LogManager.getLogManager(); this.prefix = type.getName(); } public String getString(String name, String defaultValue) { return getStringProperty(this.prefix + "." + name, defaultValue); } public int getInt(String name, int defaultValue) { return getIntProperty(this.prefix + "." + name, defaultValue); } public boolean getBoolean(String name, boolean defaultValue) { return getBooleanProperty(this.prefix + "." + name, defaultValue); } public Level getLevel(String name, Level defaultValue) { return getLevelProperty(this.prefix + "." + name, defaultValue); } public Filter getFilter(String name, Filter defaultValue) { return getFilterProperty(this.prefix + "." + name, defaultValue); } public Formatter getFormatter(String name, Formatter defaultValue) { return getFormatterProperty(this.prefix + "." + name, defaultValue); } public ChronicleLogAppenderConfig getIndexedAppenderConfig() { IndexedLogAppenderConfig cfg = new IndexedLogAppenderConfig(); for(final String key : cfg.keys()) { cfg.setProperty( key, getStringProperty(this.prefix + ".cfg." + key, null) ); } return cfg; } public ChronicleLogAppenderConfig getVanillaAppenderConfig() { VanillaLogAppenderConfig cfg = new VanillaLogAppenderConfig(); for(final String key : cfg.keys()) { cfg.setProperty( key, getStringProperty(this.prefix + ".cfg." + key, null) ); } return cfg; } // ************************************************************************* // // ************************************************************************* String getStringProperty(String name, String defaultValue) { String val = this.manager.getProperty(name); if (val == null) { return defaultValue; } return resolvePlaceholder(val.trim()); } int getIntProperty(String name, int defaultValue) { String val = getStringProperty(name, null); if (val == null) { return defaultValue; } try { return Integer.parseInt(val.trim()); } catch (Exception ex) { return defaultValue; } } boolean getBooleanProperty(String name, boolean defaultValue) { String val = getStringProperty(name, null); if (val == null) { return defaultValue; } val = val.toLowerCase(); if (val.equals("true") || val.equals("1")) { return true; } else if (val.equals("false") || val.equals("0")) { return false; } return defaultValue; } Filter getFilterProperty(String name, Filter defaultValue) { String val = getStringProperty(name, null); try { if (val != null) { Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(val); return (Filter) clz.newInstance(); } } catch (Exception ex) { // We got one of a variety of exceptions in creating the // class or creating an instance. // Drop through. } // We got an exception. Return the defaultValue. return defaultValue; } Level getLevelProperty(String name, Level defaultValue) { String val = getStringProperty(name, null); if (val == null) { return defaultValue; } Level l = Level.parse(val.trim()); return l != null ? l : defaultValue; } Formatter getFormatterProperty(String name, Formatter defaultValue) { String val = getStringProperty(name, null); try { if (val != null) { Class<?> clz = ClassLoader.getSystemClassLoader().loadClass(val); return (Formatter) clz.newInstance(); } } catch (Exception ex) { // We got one of a variety of exceptions in creating the // class or creating an instance. // Drop through. } // We got an exception. Return the defaultValue. return defaultValue; } private String resolvePlaceholder(String placeholder) { int startIndex = 0; int endIndex = 0; do { startIndex = placeholder.indexOf(PLACEHOLDER_START, endIndex); if (startIndex != -1) { endIndex = placeholder.indexOf(PLACEHOLDER_END, startIndex); if (endIndex != -1) { String envKey = placeholder.substring(startIndex + 2, endIndex); String newVal = null; if (System.getProperties().containsKey(envKey)) { newVal = System.getProperties().getProperty(envKey); } if (newVal != null) { placeholder = placeholder.replace( PLACEHOLDER_START + envKey + PLACEHOLDER_END, newVal ); endIndex += newVal.length() - envKey.length() + 3; } } } } while (startIndex != -1 && endIndex != -1 && endIndex < placeholder.length()); return placeholder; } }