`
lkjust08
  • 浏览: 15363 次
  • 性别: 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通用日志包.pdf 常用的日志实现方法 Apache 通用日志包的配置方法 配置Log4J

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

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

    logging和lo4j的jar大全

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

    ApacheLogProcessor:R包,用于处理Apache Web服务器日志组合文件

    R包,用于处理Apache Web服务器访问日志文件 提供处理Apache HTTPD日志文件的功能。 主要功能是将访问和错误日​​志文件中的数据提取到数据帧中。 可用功能: 以通用或组合格式将Apache HTTPD访问日志读取到数据...

    apache的介绍,安装,使用

    Apache 的特性: 1) 几乎可以运行在所有的计算机平台上. 2) 支持最新的HTTP/1.1协议 3) 简单而且强有力的基于文件的配置(HTTPD.CONF). 4) 支持通用网关接口(CGI) 5) 支持虚拟主机. 6) 支持HTTP认证. 7) 集成...

    Apache 服务器配置和管理

    作为一个 Web 站点,必须考虑它的安全性,本书详细介绍如何对 Apache 实现安全机制,例如使用基本认证、服务器状态和日志、安全 Socket 层等等。为了让读者能够更好地了解 Apache 的工作情况,我们还特别介绍了 ...

    apache-log2:Nodejs 的 ApacheCLF 访问日志记录

    支持通用和组合日志格式。 在 GNU v3 下获得许可。 特征: 自动内容长度计算 调用 response.end 时激活 不需要中间件,例如 express 或 connect 默认为 Apache2 日志格式默认值 不需要调用 writeHead 以符合 CLF...

    Apache服务启动

    3.支持通用网关接口 4.支持基于IP和基于域名的虚拟主机 5.支持多种方式的HTTP认证 6.集成Perl处理模块 7.集成代理服务器模块 8.支持实时监视服务器状态和定制服务器日志 9.支持服务器端包含指令(SSI) 10.支持安全...

    dynatrace-log4j2-appender:Dynatrace通用日志提取Log4j2 Appender

    Dynatrace通用日志提取Log4j2 Appender Log4j2 Appender将Java应用程序与Dynatrace通用日志提取功能集成在一起。 为了使其正常工作,您必须提供两个参数: activeGateUrl启用了通用日志提取模块的ActiveGate实例的...

    matomo-log-analytics:在Matomo中导入任何类型的服务器日志,以进行强大的日志分析。 通用日志文件解析和报告

    所有常用的日志格式,例如:NCSA通用日志格式,扩展日志格式,W3C扩展日志文件,Nginx JSON,OVH 一些流行的云服务的日志文件:Amazon AWS CloudFront日志,AWS S3日志,AWS ELB日志。 流媒体服务器日志文件,例如...

    node-alpine:Alpine-Node.js的Apache日志解析器

    它支持三种最常见的日志格式(“通用日志格式”,“带有虚拟主机字段的通用日志格式”和“组合日志格式”),还允许您通过向其传递用于生成日志文件的LogFormat字符串来指定自定义日志格式。要解析。预定义的日志...

    Apache安装.zip

    Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件。 功能介绍: 1.支持最新的HTTP/1.1通信协议 2.拥有简单而...

    Apache Log SQL-开源

    该perl脚本(apache_log_sql.pl)用于将Apache通用日志格式的日志文件移动到Oracle数据库中。

    处理Apache日志的Bash脚本

    去年一年,我写了将近100篇网络日志。...下面就是我的日志分析脚本,虽然它还不是通用的,但是我相信里面用到的命令,足以满足一般的日志分析需求,同时也是很好的学习Bash的实例。如果下面的每一个命令你都

    Apache-Web-Log-Analysis-Spark

    数据文件:Apache通用日志格式(CLF) CLF中生成的日志文件条目将如下所示: 127.0.0.1 - - [01/Aug/1995:00:00:01 -0400] "GET /images/launch-logo.gif HTTP/1.0" 200 1839 详细信息-> 为什么选择星火 服务器...

    深入理解 Apache Spark Delta Lake 的事务日志

    Spark+AI Summit 2019 会议上开源的项目,详见【重磅 | Apache Spark 社区期待的 Delta Lake 开源了】,当时文章只是简单介绍了下功能,本文将深入介绍 Apache Spark Delta Lake 的事务日志,通过本文我们可以了解 ...

    driftwood:一些潮汐日志

    浮木一些日志安装$ cargo add driftwood用法此板条箱当前提供三个记录器:Apache通用日志格式 let mut app = tide :: new ();app. with (driftwood :: ApacheCommonLogger); 范例: 127.0.0.1 - frank [10/Oct/2000:...

    holodeck:播放通用日志格式的日志文件,以相同的时间执行相同的GET和HEAD请求

    使用在现有的通用日志格式(CLF)日志文件(例如Apache或Nginx日志文件)中找到的相同请求轰炸Web服务器。 请求以相同的顺序,相同的时间交付。 可以将其视为网站的整体模拟。 理想情况下,他们不能说出区别。 安装...

    Spring Boot+layui+Apache Shiro+MyBatis前后端分离版开发通用网站后台管理系统

    日志管理:对用户的操作进行记录。 聊天室:系统所有用户可在一起进行畅聊,不受任何人监听,安全可靠。 系统消息:可发送系统消息给指定的用户;也可以广播消息,用户实时收到消息并弹出框提示。 数据库:可查看...

Global site tag (gtag.js) - Google Analytics