`
lkjust08
  • 浏览: 15704 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

apache通用日志包说明

阅读更多

小弟近在研究日志处理,写下体会,供大家作一下参考:

先来看一段代码:

package com.syp.log;

import java.util.Enumeration;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class Test {
	static Log log = LogFactory.getLog(Test.class);

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		log.info("这里在info里的");
		System.out.println(log.getClass().getName());
                }

}

 它的输出结果如下

	 org.apache.commons.logging.impl.Jdk14Logger
	 2008-11-4 21:15:04 com.syp.log.Test main
	 信息: 这里在info里的

 

为什么这里的log对象是org.apache.commons.logging.impl.Jdk14Logger的实例呢?
   原因在于Log只是通用日志包下的一个接口而已
   在通用日志包中已有Jdk14Logger,Log4jLogger,LogKitLog,NoOpLogger,SimpleLog实现了Log接口
   LogFactory是一个抽象类,public class LogFactoryImpl extends LogFactory
   这个实现类,在LogFactory中的getLog(Class)这个方法,只能过多个判断来获得LogFactory的
   而有这样一段代码:
   public static final String FACTORY_DEFAULT =
   "org.apache.commons.logging.impl.LogFactoryImpl";
   if (factory == null) {
   factory = newFactory(FACTORY_DEFAULT,
   LogFactory.class.getClassLoader());
   }
  
   if (factory != null) {
      
   cacheFactory(contextClassLoader, factory);
  
   if( props!=null ) {
   Enumeration names = props.propertyNames();
   while (names.hasMoreElements()) {
   String name = (String) names.nextElement();
   String value = props.getProperty(name);
   factory.setAttribute(name, value);
   }
   }
   }
  
   return factory;

   当获得了logFactoryImpl实例后可以用 public Log getInstance(String
   name)这个方法得到Log实例,而我们上面得到的Log为
   org.apache.commons.logging.impl.Jdk14Logger,就是在这一步得到的,下面我们看看它是怎么得到的:
   protected String getLogClassName() {

   Return the previously identified class name (if any)
   if (logClassName != null) {
   return logClassName;
   }
  
   logClassName = (String) getAttribute(LOG_PROPERTY);
  
   if (logClassName == null) { // @deprecated
   logClassName = (String) getAttribute(LOG_PROPERTY_OLD);
   }
  
   if (logClassName == null) {
   try {
   logClassName = System.getProperty(LOG_PROPERTY);
   } catch (SecurityException e) {
   ;
   }
   }
  
   if (logClassName == null) { // @deprecated
   try {
   logClassName = System.getProperty(LOG_PROPERTY_OLD);
   } catch (SecurityException e) {
   ;
   }
   }

   当在一定的范围内找不到logClassName,就会通过下以方法来获得logClassName,
   第一个是获得apache的log4j的LogClassName,但因为工程中没有log4j的jar包,classpath里没有org.apache.commons.logging.impl.Log4JLogger
   无法加载该Log,所以logClassName==null
   而后,就会得到Jdk14Logger的logclassname,所以在上面输出的是org.apache.commons.logging.impl.Jdk14Logger
   但是当我们把log4j的jar包加到工作的classpath下,得到的输出结果就会不一样了,会是这样的
   log4j:WARN No appenders could be found for logger (com.syp.log.Test).
   org.apache.commons.logging.impl.Log4JLogger
   log4j:WARN Please initialize the log4j system properly.
   首先输出log4jLogger很容易理解理,因为环境中有log4j,但会输入其实两个警靠的语句,是因为我们没有对log4j初始化,固才有警告语句

  
   if ((logClassName == null) && isLog4JAvailable()) {
   logClassName = "org.apache.commons.logging.impl.Log4JLogger";
   }
  
   if ((logClassName == null) && isJdk14Available()) {
   logClassName = "org.apache.commons.logging.impl.Jdk14Logger";
   }
  

   if ((logClassName == null) && isJdk13LumberjackAvailable()) {
   logClassName =
   "org.apache.commons.logging.impl.Jdk13LumberjackLogger";
   }
  
   if (logClassName == null) {
   logClassName = "org.apache.commons.logging.impl.SimpleLog";
   }
  
   return (logClassName);
  
   }

 

 

 

 

 

 

 通过上面我的例子我们可能得出:只要我们实现了通用日志包中log接口和logfactory,我们就可以用自己日志记录来处理。


上文中有很多地方说的不是很明白,有不懂之处可互相交流,小弟也是才接触这东西,望见谅
下面是上例的源码:第一次运行时请将log4j.jar去掉,才能看到如上述说明的一样。

2
0
分享到:
评论

相关推荐

    Apache通用日志包.pdf

    ### Apache通用日志包知识点详解 #### 一、引言 在软件开发过程中,日志记录扮演着极其重要的角色。良好的日志系统不仅能帮助开发者追踪应用程序的运行状态,还能够辅助后期的问题排查与性能优化等工作。Apache...

    apache工具包详细解释

    13. **Apache Spark**:这是一个快速、通用且可扩展的大数据处理引擎,支持批处理、交互式查询和实时流处理。 14. **Apache Cassandra**:是一个高性能、分布式的NoSQL数据库,用于存储大规模数据集,适用于实时...

    go-apachelog:使用 apache 通用日志格式的 go 服务器记录器

    不推荐使用 go-apachelog。 请参阅 github.com/cespare/hutil/apachelog 去 apachelog 这是一个以 Apache 通用日志格式编写服务器日志的小型库。 有关使用说明,请参阅。 代码主要基于logging.go。

    Apache Commons官网下的jar包

    标签“commons”是 Apache Commons 项目的通用标识,代表了与这个广泛使用的 Java 类库相关的所有内容。 在压缩包文件名称列表中,"apache.commons" 可能是指包含多个 Apache Commons 子项目 JAR 文件的压缩包。...

    通用jar包通用jar

    例如,`commons-lang3.jar` 是Apache Commons Lang项目的一个通用jar包,提供了一系列高级字符串处理、日期时间操作、类型转换等实用工具类,极大地丰富了Java标准库的功能。另一个例子是`log4j.jar`,这是一个流行...

    tomcat日志详细说明

    - `%t`:日期和时间,采用通用日志格式 - `%u`:经过身份验证的远程用户(如果有),否则为“-” - `%U`:请求的URL路径 - `%v`:本地服务器名称 - `%D`:以毫秒为单位处理请求所用的时间 - `%T`:处理请求...

    apache tiles jar所有jar包

    - **BeanUtils**: `commons-beanutils.jar` 是Apache Commons项目的一部分,提供了一些通用的Bean操作工具,可能在处理Tiles组件的属性时用到。 5. **配置** - **Tiles配置文件**: 通常为`tiles.xml`,定义了...

    struts日志处理

    - **Apache通用日志包介绍**:提供了统一的日志接口,支持多种日志实现,如Log4j、JDK Logging、SimpleLog和NoOpLog。 - **日志分级**:分为六个等级,从`FATAL`至`TRACE`,用于区分日志的严重性。 - **Log与...

    真正通用的操作日志系统设计.zip

    此外,日志系统还应该有处理高并发和大数据量的能力,这可能需要引入流处理框架如Apache Flink或Spark Streaming来实现实时日志分析。 安全性也不能忽视。操作日志涉及敏感信息,如用户行为和系统状态,必须确保其...

    apache日志分析

    - **3.1.4 打开Nginx访问日志文件**:支持Nginx服务器的日志文件,增强工具的通用性。 - **3.1.5 打开错误日志文件**:不仅限于访问日志,还支持错误日志文件的查看与分析。 - **3.1.6 添加日志文件**:可以将新的...

    java日志jar包

    `commons-logging.jar` 提供一个通用的日志接口,让开发者可以透明地调用各种日志系统;而`slf4j.jar` 和 `slf4j-log4j.jar` 则是另一种更高层次的抽象,SLF4J提供了比Commons Logging更好的封装和灵活性,`slf4j-...

    apache-io 包

    在 "apache-io 包" 中,我们可以找到很多对文件、流、过滤器和转换等进行操作的工具类,极大地简化了日常的编程工作。 以下是一些关键知识点: 1. **文件操作**:Apache IO 提供了丰富的文件操作类,如 `FileUtils...

    logging和lo4j的jar大全

    Apache针对不同的语言平台为做了一系列日志工具包,可应用于java、.net、php、c++,这些日志包都是免费的,使用非常方便,可以极大提高...现在,Apache通用日志工具commons-logging和Log4j已经成为Java日志的标准工具。

    Apache简介.pdf

    * 日志监控模块 - Apache LiveLog:Apache LiveLog 是一个 Perl 编写的模块,可以在浏览器上直接实时的通过 Ajax 技术浏览和监控 Apache 的日志文件。 * 负载均衡模块 - mod_backhand:mod_backhand 是一个 Apache ...

    org.apache.commons.lang jar下载

    Apache Commons Lang 是一个Java工具包,它提供了对Java语言核心类库的扩展,以支持一些高级功能和实用方法。这个`org.apache.commons.lang.jar`文件是该库的一个版本,包含了Lang项目的所有包,使得开发者在处理...

    Apache2.2中文文档

    5. **日志管理**:Apache的日志功能非常强大,通过LogFormat指令可以自定义日志格式。错误日志和访问日志可以帮助管理员监控服务器状态和诊断问题。 6. **性能优化**:Apache的KeepAlive选项可以改善用户体验,但...

    apache web服务器 2.2.32

    Apache支持CGI(通用网关接口)和FastCGI,允许运行服务器端脚本,如Perl、Python或PHP,以提供动态内容。 **10. 集成其他服务** Apache可以通过各种模块与其他服务集成,例如与数据库(如MySQL)或应用服务器(如...

    Linux中Apache的配置详解

    5. **日志记录**:Apache的日志文件通常位于`/var/log/httpd`目录下,包括错误日志和访问日志。可以通过修改`httpd.conf`中的`ErrorLog`和`CustomLog`指令来配置日志文件的位置和格式。 6. **安全性设置**:为了...

Global site tag (gtag.js) - Google Analytics