Package com.taobao.tddl.common

Source Code of com.taobao.tddl.common.LoggerInit

/*(C) 2007-2012 Alibaba Group Holding Limited. 
*This program is free software; you can redistribute it and/or modify 
*it under the terms of the GNU General Public License version 2 as 
* published by the Free Software Foundation. 
* Authors: 
*   junyu <junyu@taobao.com> , shenxun <shenxun@taobao.com>, 
*   linxuan <linxuan@taobao.com> ,qihao <qihao@taobao.com>  
*/ 
package com.taobao.tddl.common;

import java.io.File;
import java.util.Enumeration;

import org.apache.log4j.Appender;
import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.xml.DOMConfigurator;

import com.taobao.tddl.common.monitor.DailyMaxRollingFileAppender;

/**
* ������hsf��ͬ���ࡣȥ���汾�ţ���־���·��ȡ${user.home}/logs/tddl/
*/
public class LoggerInit {
  public static final Logger TDDL_LOG = Logger.getLogger("TDDL_LOG");
  public static final Logger TDDL_SQL_LOG = Logger.getLogger("TDDL_SQL_LOG");
  public static final Logger TDDL_MD5_TO_SQL_MAPPING = Logger.getLogger("TDDL_MD5_TO_SQL_MAPPING");
  public static final Logger TDDL_Nagios_LOG = Logger.getLogger("TDDL_Nagios_LOG");
  //modify by junyu ,atom ��matrix��
  public static final Logger TDDL_Atom_Statistic_LOG = Logger.getLogger("TDDL_Atom_Statistic_LOG");
  public static final Logger TDDL_Matrix_Statistic_LOG = Logger.getLogger("TDDL_Matrix_Statistic_LOG");
 
  public static final Logger TDDL_Statistic_LOG = Logger.getLogger("TDDL_Statistic_LOG");
  public static final Logger TDDL_Snapshot_LOG = Logger.getLogger("TDDL_Snapshot_LOG");
  public static final Logger logger = TDDL_LOG; //Logger.getLogger(LoggerInit.class);

  static private volatile boolean initOK = false;

  private static String getLogPath() {
    String userHome = System.getProperty("user.home");
    if (!userHome.endsWith(File.separator)) {
      userHome += File.separator;
    }
    String path = userHome + "logs" + File.separator + "tddl" + File.separator;
    File dir = new File(path);
    if (!dir.exists()) {
      dir.mkdirs();
    }
    return path;
  }

  static {
    initTddlLog();
  }

  private static void showAppender(Appender appender) {
    if (appender == null) {
      System.out.println("apender:null");
      return;
    }
    System.out.println("appender=" + appender);
    System.out.println("name=" + appender.getName() + ",layout=" + appender.getLayout());
  }

  private static Appender buildAppender(String name, String fileName, String pattern) {
    DailyRollingFileAppender appender = new DailyRollingFileAppender();
    appender.setName(name);
    appender.setAppend(true);
    appender.setEncoding("GBK");
    appender.setLayout(new PatternLayout(pattern));
    appender.setFile(new File(getLogPath(), fileName).getAbsolutePath());
    appender.activateOptions();// ����Ҫ������ԭ����־���ݻᱻ���
    return appender;
  }
 
  private static Appender buildAtomStaticAppender(String name, String fileName, String pattern){
    DailyMaxRollingFileAppender appender = new DailyMaxRollingFileAppender();
    appender.setName(name);
    appender.setAppend(true);
    appender.setEncoding("GBK");
    appender.setLayout(new PatternLayout(pattern));
    appender.setDatePattern("'.'yyyy-MM-dd-HH");
    appender.setMaxBackupIndex(6);
    appender.setFile(new File(getLogPath(), fileName).getAbsolutePath());
    appender.activateOptions();// ����Ҫ������ԭ����־���ݻᱻ���
    return appender;
  }
 
  private static Appender buildMatrixStaticAppender(String name, String fileName, String pattern){
    DailyMaxRollingFileAppender appender = new DailyMaxRollingFileAppender();
    appender.setName(name);
    appender.setAppend(true);
    appender.setEncoding("GBK");
    appender.setLayout(new PatternLayout(pattern));
    appender.setDatePattern("'.'yyyy-MM-dd-HH");
    appender.setMaxBackupIndex(12);
    appender.setFile(new File(getLogPath(), fileName).getAbsolutePath());
    appender.activateOptions();// ����Ҫ������ԭ����־���ݻᱻ���
    return appender;
  }

  synchronized static public void initTddlLog() {
    if (initOK)
      return;
    initOK=true;
    Appender tddlAppender = buildAppender("TDDL_Appender", "tddl.log", "%d %p [%c{10}] - %m%n");
//    Appender sqlAppender = buildAppender("TDDL_SQL_Appender", "tddl.sql.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 = buildAtomStaticAppender("TDDL_Atom_Statistic_Appender", "tddl-atom-statistic.log", "%m");
    Appender matrixStatisticAppender = buildMatrixStaticAppender("TDDL_Matrix_Statistic_Appender", "tddl-matrix-statistic.log", "%m");
   
    Appender statisticAppender = buildAppender("TDDL_Statistic_Appender", "tddl-statistic.log", "%m");
    Appender snapshotAppender = buildAppender("TDDL_Snapshot_Appender", "tddl-snapshot.log", "%m");

    TDDL_LOG.setAdditivity(false);
    TDDL_LOG.removeAllAppenders();
    TDDL_LOG.addAppender(tddlAppender);
    TDDL_LOG.setLevel(Level.WARN);

//      �����־��Ӧ���Լ�����
//    TDDL_SQL_LOG.setAdditivity(false);
//    TDDL_SQL_LOG.removeAllAppenders();
//    TDDL_SQL_LOG.addAppender(sqlAppender);
//    TDDL_SQL_LOG.setLevel(Level.WARN);

    TDDL_MD5_TO_SQL_MAPPING.setAdditivity(false);
    TDDL_MD5_TO_SQL_MAPPING.removeAllAppenders();
    TDDL_MD5_TO_SQL_MAPPING.addAppender(md5sqlAppender);
    TDDL_MD5_TO_SQL_MAPPING.setLevel(Level.DEBUG);

    TDDL_Nagios_LOG.setAdditivity(false);
    TDDL_Nagios_LOG.removeAllAppenders();
    TDDL_Nagios_LOG.addAppender(nagiosAppender);
    TDDL_Nagios_LOG.setLevel(Level.INFO);

    TDDL_Atom_Statistic_LOG.setAdditivity(false);
    TDDL_Atom_Statistic_LOG.removeAllAppenders();
    TDDL_Atom_Statistic_LOG.addAppender(atomStatisticAppender);
    TDDL_Atom_Statistic_LOG.setLevel(Level.INFO);

    TDDL_Matrix_Statistic_LOG.setAdditivity(false);
    TDDL_Matrix_Statistic_LOG.removeAllAppenders();
    TDDL_Matrix_Statistic_LOG.addAppender(matrixStatisticAppender);
    TDDL_Matrix_Statistic_LOG.setLevel(Level.INFO);
   
   
    TDDL_Statistic_LOG.setAdditivity(false);
    TDDL_Statistic_LOG.removeAllAppenders();
    TDDL_Statistic_LOG.addAppender(statisticAppender);
    TDDL_Statistic_LOG.setLevel(Level.INFO);

    TDDL_Snapshot_LOG.setAdditivity(false);
    TDDL_Snapshot_LOG.removeAllAppenders();
    TDDL_Snapshot_LOG.addAppender(snapshotAppender);
    TDDL_Snapshot_LOG.setLevel(Level.INFO);
  }

  static public void initTddlLogByFile() {
    if (initOK)
      return;

    ClassLoader loader = Thread.currentThread().getContextClassLoader();
    Thread.currentThread().setContextClassLoader(LoggerInit.class.getClassLoader());
    // ʹHSF��log4j������Ч(Logger, Appender)
    DOMConfigurator.configure(LoggerInit.class.getClassLoader().getResource("tddl-log4j.xml"));

    // ����log4j.xml�����е�Appender������Щappender�������־ȫ�����иı�
    String logPath = getLogPath();
    //FileAppender fileAppender = null;
    for (Enumeration<?> e = Logger.getLogger("only_for_get_all_appender").getAllAppenders(); e.hasMoreElements();) {
      Appender appender = (Appender) e.nextElement();
      if (FileAppender.class.isInstance(appender)) {
        FileAppender logFileAppender = (FileAppender) appender;
        File deleteFile = new File(logFileAppender.getFile());
        File logFile = new File(logPath, logFileAppender.getFile());
        logFileAppender.setFile(logFile.getAbsolutePath());
        logFileAppender.activateOptions(); // ����Ҫ������ԭ����־���ݻᱻ���
        if (deleteFile.exists()) {
          deleteFile.delete();
        }
        logger.warn("�ɹ��ı�" + deleteFile.getName() + "�����·����:" + logFile.getAbsolutePath());
      }
    }
    Thread.currentThread().setContextClassLoader(loader);
    initOK = true;
  }
}
TOP

Related Classes of com.taobao.tddl.common.LoggerInit

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.