package com.taobao.tddl.monitor.logger.logback;
import java.io.File;
import java.nio.charset.Charset;
import ch.qos.logback.classic.Level;
import ch.qos.logback.classic.Logger;
import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.rolling.RollingFileAppender;
import ch.qos.logback.core.rolling.TimeBasedRollingPolicy;
import com.taobao.tddl.monitor.logger.DynamicLogger;
import com.taobao.tddl.monitor.logger.LoggerInit;
public class DynamicLogbackLogger extends DynamicLogger {
public void init() {
Appender tddlAppender = buildAppender("TDDL_Appender", "tddl.log", "%d %p [%c{10}] - %m%n");
Appender md5sqlAppender = buildAppender("TDDL_MD5_TO_SQL_Appender", "tddl.md5sql.log", "%d %p [%c{10}] - %m%n");
Appender nagiosAppender = buildAppender("TDDL_Nagios_Appender", "Nagios.log", "%m%n");
Appender atomStatisticAppender = buildDailyMaxRollingAppender("TDDL_Atom_Statistic_Appender",
"tddl-atom-statistic.log",
"%m",
6);
Appender matrixStatisticAppender = buildDailyMaxRollingAppender("TDDL_Matrix_Statistic_Appender",
"tddl-matrix-statistic.log",
"%m",
12);
Appender connStatisticAppender = buildDailyMaxRollingAppender("TDDL_Conn_Statistic_Appender",
"tddl-conn-statistic.log",
"%m",
6);
Appender statisticAppender = buildAppender("TDDL_Statistic_Appender", "tddl-statistic.log", "%m");
Appender snapshotAppender = buildAppender("TDDL_Snapshot_Appender", "tddl-snapshot.log", "%m");
ch.qos.logback.classic.Logger logger = (Logger) LoggerInit.TDDL_LOG.getDelegate();
logger.setAdditive(false);
logger.detachAndStopAllAppenders();
logger.addAppender(tddlAppender);
logger.setLevel(Level.WARN);
logger = (Logger) LoggerInit.TDDL_MD5_TO_SQL_MAPPING.getDelegate();
logger.setAdditive(false);
logger.detachAndStopAllAppenders();
logger.addAppender(md5sqlAppender);
logger.setLevel(Level.DEBUG);
logger = (Logger) LoggerInit.TDDL_Nagios_LOG.getDelegate();
logger.setAdditive(false);
logger.detachAndStopAllAppenders();
logger.addAppender(nagiosAppender);
logger.setLevel(Level.INFO);
logger = (Logger) LoggerInit.TDDL_Atom_Statistic_LOG.getDelegate();
logger.setAdditive(false);
logger.detachAndStopAllAppenders();
logger.addAppender(atomStatisticAppender);
logger.setLevel(Level.INFO);
logger = (Logger) LoggerInit.TDDL_Matrix_Statistic_LOG.getDelegate();
logger.setAdditive(false);
logger.detachAndStopAllAppenders();
logger.addAppender(matrixStatisticAppender);
logger.setLevel(Level.INFO);
logger = (Logger) LoggerInit.TDDL_Conn_Statistic_LOG.getDelegate();
logger.setAdditive(false);
logger.detachAndStopAllAppenders();
logger.addAppender(connStatisticAppender);
logger.setLevel(Level.INFO);
logger = (Logger) LoggerInit.TDDL_Statistic_LOG.getDelegate();
logger.setAdditive(false);
logger.detachAndStopAllAppenders();
logger.addAppender(statisticAppender);
logger.setLevel(Level.INFO);
logger = (Logger) LoggerInit.TDDL_Snapshot_LOG.getDelegate();
logger.setAdditive(false);
logger.detachAndStopAllAppenders();
logger.addAppender(snapshotAppender);
logger.setLevel(Level.INFO);
}
public void initRule() {
Appender dbTabAppender = buildAppender("TDDL_Vtab_Appender", "tddl-db-tab.log", "%m");
Appender vSlotAppender = buildAppender("TDDL_Vtab_Appender", "tddl-vslot.log", "%m");
Appender dynamicRuleAppender = buildAppender("TDDL_DynamicRule_Appender", "tddl-dynamic-rule.log", "%m");
ch.qos.logback.classic.Logger logger = (Logger) LoggerInit.TDDL_LOG.getDelegate();
logger.setAdditive(false);
logger.detachAndStopAllAppenders();
logger.addAppender(dbTabAppender);
logger.setLevel(Level.INFO);
logger = (Logger) LoggerInit.VSLOT_LOG.getDelegate();
logger.setAdditive(false);
logger.detachAndStopAllAppenders();
logger.addAppender(vSlotAppender);
logger.setLevel(Level.INFO);
logger = (Logger) LoggerInit.DYNAMIC_RULE_LOG.getDelegate();
logger.setAdditive(false);
logger.detachAndStopAllAppenders();
logger.addAppender(dynamicRuleAppender);
logger.setLevel(Level.INFO);
}
private Appender buildAppender(String name, String fileName, String pattern) {
RollingFileAppender appender = new RollingFileAppender();
appender.setName(name);
appender.setAppend(true);
appender.setFile(new File(getLogPath(), fileName).getAbsolutePath());
TimeBasedRollingPolicy rolling = new TimeBasedRollingPolicy();
rolling.setParent(appender);
rolling.setFileNamePattern(new File(getLogPath(), fileName).getAbsolutePath() + ".%d{yyyy-MM-dd}");
appender.setRollingPolicy(rolling);
PatternLayoutEncoder layout = new PatternLayoutEncoder();
layout.setPattern(pattern);
layout.setCharset(Charset.forName(getEncoding()));
appender.setEncoder(layout);
// 启动
appender.start();
return appender;
}
private Appender buildDailyMaxRollingAppender(String name, String fileName, String pattern, int maxBackupIndex) {
RollingFileAppender appender = new RollingFileAppender();
appender.setName(name);
appender.setAppend(true);
appender.setFile(new File(getLogPath(), fileName).getAbsolutePath());
TimeBasedRollingPolicy rolling = new TimeBasedRollingPolicy();
rolling.setFileNamePattern(new File(getLogPath(), fileName).getAbsolutePath() + ".%d{yyyy-MM-dd-HH}");
rolling.setMaxHistory(maxBackupIndex);
rolling.setParent(appender);
appender.setRollingPolicy(rolling);
PatternLayoutEncoder layout = new PatternLayoutEncoder();
layout.setPattern(pattern);
layout.setCharset(Charset.forName(getEncoding()));
appender.setEncoder(layout);
// 启动
appender.start();
return appender;
}
}