log4j全面解析

来源:互联网 发布:人工智能 杨澜 电子书 编辑:程序博客网 时间:2024/06/07 22:58
/***********************///>0.Log4j概要//>0.1.背景 //log4j是Apache software foundation项目 //是由apache software foundation指定团队和维护人来开发的 //log4j也是apache logging项目的一部分//>0.2.功能 //能够灵活的监视和调试程序//>1.Log4j的使用//>1.1Log4j内部结构概述    //>log4j内部是以一定层级(Hierarchy)来组织的,这个层级像一棵树这棵树有一个根 //>根下可以有很多子节点每一个节点可以看成(Category||Logger)因为Logger是 //>从Category继承过来的,每一个节可以有多个Appender,这个Appender是专门 //>用于输出你的日志信息,例如常见的ConsoleAppender,RollingFileLogAppender, //>都是比较常用的Appender通过设置这些Appender的属性值可以控制输出的样式(Layout)//>1.2Log4j内部主要类成员 //1.2.1.LogManager //作用:负责每一个logger的生死 //LogManager最为心脏的部分在一个静态代码块中,这个代码块控制了如何生成Logger/*****************************************************************/ // static {//    // By default we use a DefaultRepositorySelector which always returns 'h'.//    Hierarchy h = new Hierarchy(new RootLogger((Level) Level.DEBUG));//    repositorySelector = new DefaultRepositorySelector(h);//    /** Search for the properties file log4j.properties in the CLASSPATH.  *///    String override =OptionConverter.getSystemProperty(DEFAULT_INIT_OVERRIDE_KEY,//             null);////    // if there is no default init override, then get the resource//    // specified by the user or the default config file.//    if(override == null || "false".equalsIgnoreCase(override)) {////      String configurationOptionStr = OptionConverter.getSystemProperty(//         DEFAULT_CONFIGURATION_KEY, //         null);////      String configuratorClassName = OptionConverter.getSystemProperty(//                                                   CONFIGURATOR_CLASS_KEY, //         null);////      URL url = null;////      // if the user has not specified the log4j.configuration//      // property, we search first for the file "log4j.xml" and then//      // "log4j.properties"//      if(configurationOptionStr == null) { // url = Loader.getResource(DEFAULT_XML_CONFIGURATION_FILE);// if(url == null) {//   url = Loader.getResource(DEFAULT_CONFIGURATION_FILE);// }//      } else {// try {//   url = new URL(configurationOptionStr);// } catch (MalformedURLException ex) {//   // so, resource is not a URL://   // attempt to get the resource from the class path//   url = Loader.getResource(configurationOptionStr); // } //      }//      //      // If we have a non-null url, then delegate the rest of the//      // configuration to the OptionConverter.selectAndConfigure//      // method.//      if(url != null) {//     LogLog.debug("Using URL ["+url+"] for automatic log4j configuration.");//        try {//            OptionConverter.selectAndConfigure(url, configuratorClassName,//        LogManager.getLoggerRepository());//        } catch (NoClassDefFoundError e) {//            LogLog.warn("Error during default initialization", e);//        }//      } else {//     LogLog.debug("Could not find resource: ["+configurationOptionStr+"].");//      }//    } else {//        LogLog.debug("Default initialization of overridden by " + //            DEFAULT_INIT_OVERRIDE_KEY + "property."); //    }  //  } /*****************************************************************/  //1.2.2.Category //1.2.3.Logger //1.2.4.PropertyConfigurator:如何使用properties文件配置Logger对象的行为和属性 //1.2.5.Level:控制Appender在什么时候应该输出日志 //1.2.6.LoggerRepository:一个用于管理logger的容器 //1.2.7.PatternlayOut:用于管理日志信息输出的格式 //1.2.8.LoggerFactory:一个简单的工厂模式生产logger//2.示例代码//>//  Logger logger = LogManager.getLogger("zhangyibo");//  Layout layout = new SimpleLayout();//  ConsoleAppender consoleAppender = new ConsoleAppender(layout);//  consoleAppender.setEncoding("UTF-8");//  log4j.appender.A1=org.apache.log4j.ConsoleAppender 对等于//  consoleAppender.setName("console");// 设置appender的名字  //  //其余配置以此类推//  // 设置日志优先级别必须大于等于这个级别才能输出//  consoleAppender.setThreshold(Priority.FATAL);//  //  logger.addAppender(consoleAppender);//  logger.setLevel(Level.ALL);// 任何级别都可以输出到Appender中//  //  logger.error("xxxxxxxxxxxx");// Debug级别输出//  LoggerManager.getLogger("loggerName").debug("do something...");////3.完结/***********************/

原创粉丝点击