package net.csdn.common.logging.log4j;
import com.google.common.collect.ImmutableMap;
import net.csdn.common.collect.MapBuilder;
import net.csdn.common.settings.ImmutableSettings;
import net.csdn.common.settings.Settings;
import net.csdn.env.Environment;
import org.apache.log4j.PropertyConfigurator;
import java.util.Map;
import java.util.Properties;
import static net.csdn.common.settings.ImmutableSettings.settingsBuilder;
/**
* BlogInfo: william
* Date: 11-9-1
* Time: 下午2:11
*/
public class LogConfigurator {
private static boolean loaded;
private static ImmutableMap<String, String> replacements = new MapBuilder<String, String>()
.put("console", "net.csdn.common.logging.log4j.ConsoleAppender")
.put("async", "org.apache.log4j.AsyncAppender")
.put("dailyRollingFile", "org.apache.log4j.DailyRollingFileAppender")
.put("externallyRolledFile", "org.apache.log4j.ExternallyRolledFileAppender")
.put("file", "org.apache.log4j.FileAppender")
.put("hadoo", "org.apache.log4j.FileAppender")
.put("jdbc", "org.apache.log4j.jdbc.JDBCAppender")
.put("jms", "org.apache.log4j.net.JMSAppender")
.put("lf5", "org.apache.log4j.lf5.LF5Appender")
.put("ntevent", "org.apache.log4j.nt.NTEventLogAppender")
.put("null", "org.apache.log4j.NullAppender")
.put("rollingFile", "org.apache.log4j.RollingFileAppender")
.put("smtp", "org.apache.log4j.net.SMTPAppender")
.put("socket", "org.apache.log4j.net.SocketAppender")
.put("socketHub", "org.apache.log4j.net.SocketHubAppender")
.put("syslog", "org.apache.log4j.net.SyslogAppender")
.put("telnet", "org.apache.log4j.net.TelnetAppender")
// layouts
.put("simple", "org.apache.log4j.SimpleLayout")
.put("html", "org.apache.log4j.HTMLLayout")
.put("pattern", "org.apache.log4j.PatternLayout")
.put("consolePattern", "net.csdn.common.logging.log4j.JLinePatternLayout")
.put("ttcc", "org.apache.log4j.TTCCLayout")
.put("xml", "org.apache.log4j.XMLLayout")
.immutableMap();
public static void configure(Settings settings) {
if (loaded) {
return;
}
loaded = true;
Environment environment = new Environment(settings);
ImmutableSettings.Builder settingsBuilder = settingsBuilder().put(settings);
settingsBuilder.loadFromUrl(environment.resolveConfig("logging.yml"))
.replacePropertyPlaceholders();
Properties props = new Properties();
for (Map.Entry<String, String> entry : settingsBuilder.build().getAsMap().entrySet()) {
String key = "log4j." + entry.getKey();
String value = entry.getValue();
if (replacements.containsKey(value)) {
value = replacements.get(value);
}
if (key.endsWith(".value")) {
props.setProperty(key.substring(0, key.length() - ".value".length()), value);
} else if (key.endsWith(".type")) {
props.setProperty(key.substring(0, key.length() - ".type".length()), value);
} else {
props.setProperty(key, value);
}
}
PropertyConfigurator.configure(props);
}
}