diff --git a/apollo-biz/src/main/java/com/ctrip/apollo/biz/customize/LoggingCustomizer.java b/apollo-biz/src/main/java/com/ctrip/apollo/biz/customize/LoggingCustomizer.java
new file mode 100644
index 0000000000000000000000000000000000000000..33dcb455e601ef2870c2253537abbbbaf654496b
--- /dev/null
+++ b/apollo-biz/src/main/java/com/ctrip/apollo/biz/customize/LoggingCustomizer.java
@@ -0,0 +1,90 @@
+package com.ctrip.apollo.biz.customize;
+
+import com.google.common.base.Strings;
+
+import com.ctrip.apollo.biz.entity.ServerConfig;
+import com.ctrip.apollo.biz.repository.ServerConfigRepository;
+import com.ctrip.framework.foundation.Foundation;
+import com.dianping.cat.Cat;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.util.ClassUtils;
+import org.springframework.util.ReflectionUtils;
+
+import java.util.Objects;
+
+import ch.qos.logback.classic.LoggerContext;
+import ch.qos.logback.core.Appender;
+
+/**
+ * @author Jason Song(song_s@ctrip.com)
+ */
+@Component
+public class LoggingCustomizer implements InitializingBean {
+ private static final Logger logger = LoggerFactory.getLogger(LoggingCustomizer.class);
+ private static final String cLoggingAppenderClass =
+ "com.ctrip.framework.clogging.agent.appender.CLoggingAppender";
+ private static boolean cLoggingAppenderPresent =
+ ClassUtils.isPresent(cLoggingAppenderClass, LoggingCustomizer.class.getClassLoader());
+
+ private static final String CLOGGING_SERVER_URL_KEY = "clogging.server.url";
+ private static final String CLOGGING_SERVER_PORT_KEY = "clogging.server.port";
+
+ @Autowired
+ private ServerConfigRepository serverConfigRepository;
+
+ @Override
+ public void afterPropertiesSet() {
+ if (!cLoggingAppenderPresent) {
+ return;
+ }
+
+ try {
+ tryConfigCLogging();
+ } catch (Throwable ex) {
+ logger.error("Config CLogging failed", ex);
+ Cat.logError(ex);
+ }
+
+ }
+
+ private void tryConfigCLogging() throws Exception {
+ String appId = Foundation.app().getAppId();
+ if (Strings.isNullOrEmpty(appId)) {
+ logger.warn("App id is null or empty!");
+ return;
+ }
+
+ ServerConfig cloggingUrl = serverConfigRepository.findByKey(CLOGGING_SERVER_URL_KEY);
+ ServerConfig cloggingPort = serverConfigRepository.findByKey(CLOGGING_SERVER_PORT_KEY);
+
+ if (Objects.isNull(cloggingUrl) || Objects.isNull(cloggingPort)) {
+ logger.warn("CLogging config is not set!");
+ return;
+ }
+
+ LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
+ Class clazz = Class.forName(cLoggingAppenderClass);
+ Appender cLoggingAppender = (Appender) clazz.newInstance();
+
+ ReflectionUtils.findMethod(clazz, "setAppId", String.class).invoke(cLoggingAppender, appId);
+ ReflectionUtils.findMethod(clazz, "setServerIp", String.class)
+ .invoke(cLoggingAppender, cloggingUrl.getValue());
+ ReflectionUtils.findMethod(clazz, "setServerPort", int.class)
+ .invoke(cLoggingAppender, Integer.parseInt(cloggingPort.getValue()));
+
+ cLoggingAppender.setName("CentralLogging");
+ cLoggingAppender.setContext(loggerContext);
+ cLoggingAppender.start();
+
+ ch.qos.logback.classic.Logger logger =
+ (ch.qos.logback.classic.Logger) LoggerFactory.getLogger("root");
+ logger.addAppender(cLoggingAppender);
+
+ }
+
+}
diff --git a/pom.xml b/pom.xml
index 16542291393db8b4ba5486f4b6d2c1e9075ba409..3573b84e60196709ffadc239d2a27b48a01e2c89 100644
--- a/pom.xml
+++ b/pom.xml
@@ -145,6 +145,21 @@
+
+ com.ctrip.framework.clogging
+ clogging-agent
+ 3.5.2
+
+
+ logback-core
+ ch.qos.logback
+
+
+ logback-classic
+ ch.qos.logback
+
+
+
mysql
@@ -411,6 +426,10 @@
com.ctrip.platform
ctrip-dal-client
+
+ com.ctrip.framework.clogging
+ clogging-agent
+