From bbc8fb3972cd7d82a7a97f9b87abfa439d2161b3 Mon Sep 17 00:00:00 2001 From: Jason Song Date: Thu, 12 May 2016 17:53:40 +0800 Subject: [PATCH] add clog --- .../biz/customize/LoggingCustomizer.java | 90 +++++++++++++++++++ pom.xml | 19 ++++ 2 files changed, 109 insertions(+) create mode 100644 apollo-biz/src/main/java/com/ctrip/apollo/biz/customize/LoggingCustomizer.java 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 000000000..33dcb455e --- /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 165422913..3573b84e6 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 + -- GitLab