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.完结/***********************/