package com.taobao.tddl.monitor.logger; import com.taobao.tddl.monitor.logger.log4j.DynamicLog4jLogger; import com.taobao.tddl.monitor.logger.logback.DynamicLogbackLogger; import com.taobao.tddl.common.utils.logger.Logger; import com.taobao.tddl.common.utils.logger.LoggerFactory; public class LoggerInit { public static final String TDDL_ATOM_STATISTIC_LOG_NAME = "TDDL_Atom_Statistic_LOG"; public static final Logger TDDL_LOG = LoggerFactory.getLogger("TDDL_LOG"); public static final Logger TDDL_SQL_LOG = LoggerFactory.getLogger("TDDL_SQL_LOG"); public static final Logger TDDL_MD5_TO_SQL_MAPPING = LoggerFactory.getLogger("TDDL_MD5_TO_SQL_MAPPING"); public static final Logger TDDL_Nagios_LOG = LoggerFactory.getLogger("TDDL_Nagios_LOG"); // modify by junyu ,atom 和matrix拆开 public static final Logger TDDL_Atom_Statistic_LOG = LoggerFactory.getLogger(TDDL_ATOM_STATISTIC_LOG_NAME); public static final Logger TDDL_Matrix_Statistic_LOG = LoggerFactory.getLogger("TDDL_Matrix_Statistic_LOG"); // add by changyuan.lh, db 应用连接数, 阻塞时间, 超时数 public static final Logger TDDL_Conn_Statistic_LOG = LoggerFactory.getLogger("TDDL_Conn_Statistic_LOG"); public static final Logger TDDL_Statistic_LOG = LoggerFactory.getLogger("TDDL_Statistic_LOG"); public static final Logger TDDL_Snapshot_LOG = LoggerFactory.getLogger("TDDL_Snapshot_LOG"); public static final Logger logger = TDDL_LOG; // Logger.getLogger(LoggerInit.class); // tddl rule相关日志,需要独立出来,rule会被多个地方共享 public static final Logger DB_TAB_LOG = LoggerFactory.getLogger("DB_TAB_LOG"); public static final Logger VSLOT_LOG = LoggerFactory.getLogger("VSLOT_LOG"); public static final Logger DYNAMIC_RULE_LOG = LoggerFactory.getLogger("DYNAMIC_RULE_LOG"); static { initTddlLog(); } static public void initTddlLog() { DynamicLogger dynamic = buildDynamic(); if (dynamic != null) { dynamic.init(); } } static public void initRuleLog() { DynamicLogger dynamic = buildDynamic(); if (dynamic != null) { dynamic.initRule(); } } private synchronized static DynamicLogger buildDynamic() { DynamicLogger dynamic = null; String LOGBACK = "logback"; String LOG4J = "log4j"; // slf4j只是一个代理工程,需要判断一下具体的实现类 if (checkLogger(logger, LOGBACK)) { dynamic = new DynamicLogbackLogger(); } else if (checkLogger(logger, LOG4J)) { dynamic = new DynamicLog4jLogger(); } else { logger.warn("logger is not a log4j/logback instance, dynamic logger is disabled"); } return dynamic; } private static boolean checkLogger(Logger logger, String name) { return logger.getDelegate().getClass().getName().contains(name); } }