在进行 Log4J 的使用过程中,我对下面的两个问题比较敏感:

1、  Log4J 是如何进行工作的?

这是在 Log4J 项目中对 Log4J 的介绍中的一段话

With log4j it is possible to enable logging at runtime without modifying the application binary. The log4j package is designed so that these statements can remain in shipped code without incurring a heavy performance cost. Logging behavior can be controlled by editing a configuration file, without touching the application binary.

对于 Log4J 的具体如何进行工作的原理,在 javaeye 上 buaawhl 给出了一个解释:

http://buaawhl.javaeye.com/blog/6450

总结一下就是利用 JDK 提供的 new Throwable().getStackTrace() 方法返回当前运行栈的结构层次,然后对返回的调用栈的信息进行分析,找到调用该类的类的名称。(也就是Log4J自己说的Runtime期间实现Log)

由于在 Log4J 中只存在一个根 Logger ,并且 Logger 之间存在继承的关系,并且我们可以在配置文件( log4J.proerties 或者 XML )中进行配置,可以初始化指定的 Logger ,并且对指定的 Logger 进行一些相关的配置,如设置如何进行输出,以及如何将输出进行布局。并且由于 Logger 之间会存在继承的关系(会找一个最近的 Logger 进行继承,如果没有就以根 Logger 作为父类,共享父类的配置信息),以及父子类之间初始化没有先后的顺序,所以我们可以在配置文件中,对各个程序以及不同的包中使用到 Log4j 的 Log 纪录方式进行配置。

如果在同一个 APPLICATION 对相同名称的 Logger 进行调用,那么只会返回一个 Logger 实例。

2、  Log4J 会不会对系统的性能造成大的影响?

这是对 Log4J 性能的一些描述,看来还是不错的,呵呵,在调整一下 Log 的等级就可以了。

On an AMD Duron clocked at 800Mhz running JDK 1.3.1, it costs about 5 nanoseconds to determine if a logging statement should be logged or not. Actual logging is also quite fast, ranging from 21 microseconds using the SimpleLayout, 37 microseconds using the TTCCLayout. The performance of the PatternLayout is almost as good as the dedicated layouts, except that it is much more flexible.

注:对于 Common Logging 和 Log4J 的关系可以参见 (其实 JCL 是一个规范,对一些 Log 工具进行了包装,我们常会使用到的具体实现还是 Log4j ,当然也可以使用其他的实现)

http://hedong.3322.org/archives/000316.html

参考资料:

http://www-128.ibm.com/developerworks/cn/java/l-log4j/index.html 使用 Log4J 进行日志操作

http://zooo.51.net/heavyz_cs/notebook/log4j.html Log4J 学习笔记(推荐)

http://www.dingl.com/view.shtml?xh=485 log4j 配置

http://hedong.3322.org/archives/000193.html 竹笋炒肉的 Log4J 学习笔记

http://forum.springside.org.cn/redirect.php?fid=3&tid=382&goto=nextoldset SpringSide 对 Log4j 的使用要点

LOG4J原理以及配置的研究相关推荐

  1. DNSSEC 原理、配置与布署简介

    本文转载自:http://netsec.ccert.edu.cn/duanhx/archives/1479 作者:段海新,清华大学信息网络工程研究中心 ------------------------ ...

  2. slf4j + log4j原理实现及源码分析

    2019独角兽企业重金招聘Python工程师标准>>> #0 系列目录# 2种日志接口框架,4种日志实现框架 jdk-logging.log4j.logback日志介绍及原理 jcl ...

  3. 华为路由与交换 MPLS 协议原理与配置

    本次博客主要介绍MPLS协议原理与配置 MPLS(英语:Multi-Protocol Label Switching,缩写为MPLS)  多协议标签交换 90年代初,互联网流量快速增长,而由于当时硬件 ...

  4. [转]slf4j + log4j原理实现及源码分析

    slf4j + log4j原理实现及源码分析 转载于:https://www.cnblogs.com/jasonzeng888/p/6051080.html

  5. 静态路由_【零基础学云计算】静态路由!静态路由!静态路由!原理与配置

    本次和各位小伙伴分享的是静态路由的原理和配置,接下来我会从以下几个方面来和大家进行解析: 1.路由器的工作原理 2.路由表的形成 3.静态路由和默认路由 4.路由器转发数据包的封装过程 5.静态路由和 ...

  6. centeros7网络服务无法启动_Linux网络服务02——DHCP原理与配置

    Linux网络服务02--DHCP原理与配置 一.DHCP服务概述 1.DHCP(Dynamic Host Configuration Protocol)动态主机配置协议 DHCP是由Internet ...

  7. ospf虚链路原理和配置

    ospf虚链路原理和配置 了解ospf虚链路的作用:将设计不合理的非骨干区域连接到骨干区域, 2.用于修复(连接)断裂的ospf骨干区域 了解ospf虚链路的特点:1.只能配置在两个ABR之间 2.虚 ...

  8. 【鬼网络】之DHCP原理与配置

    序言 DHCP 序言 一.DHCP工作原理 1. 什么是DHCP 2.DHCP的分配方式 3.DHCP的租约过程 二.DHCP服务器的配置 DHCP客户端的使用 DHCP中继原理与配置 1.主配置文件 ...

  9. Oracle 11g RAC SCAN ip的原理及配置

    Oracle 11g RAC SCAN ip的原理及配置   Oracle 11g RAC网格即插即用(GPnP)工作原理: SCAN概念:     先介绍一下什么叫SCAN,SCAN(Single ...

最新文章

  1. 钢结构节点输出软件_BIM助力桥梁钢结构设计施工一体化建设
  2. Java数据结构和算法:字符串、数组和广义表
  3. Struts 拦截器权限控制【通过拦截器实现登录后跳转到登录前页面】
  4. Python存储生成的决策树——pickle模块
  5. CompletableFuture详解~异常处理
  6. 隆重推荐一本虚拟化方面的重量级图书
  7. java 时间戳的获取方式
  8. [原创]Firefox扩展
  9. pyqtsignal()作用
  10. 海南工会云会员认证_“网上工会”大普惠全面升级 全体会员共享生活大福利...
  11. linux免杀工具,kali 免杀工具shellter安装以及使用
  12. Android-Studio中AndroidManifest-xml文件中application标签
  13. 林锐:我的大学十年(西电校友) 2011-2-26 23:36
  14. web onblur string
  15. typora导出pdf文件缺失
  16. MoveIt! RViz Visual Tools设置
  17. 反向代理-- WEB服务的加速器[转]
  18. 怎么回答TCP的三次握手问题
  19. git大文件记录清除解决方案
  20. 声音驱动提示不完整或已损坏 (代码 19)

热门文章

  1. 无法在只读编辑器中编辑_Mol Plant中国农科院作物科学研究所夏兰琴课题组成功利用 优化的引导基因编辑器在水稻中实现高效精准基因编辑...
  2. 九度OJ 1005 Graduate Admission
  3. (软件工程复习核心重点)第十章面向对象设计-第四节:设计人机交互子系统和设计任务管理子系统
  4. 【C语言笔记进阶篇】第一章:指针进阶
  5. 单值二叉树:如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回 true;否则返回 false。
  6. 3-9:C++默认成员函数练习-日期类实现
  7. windows10双系统安装ubuntu18.04
  8. 判断浏览器是pc端还是移动端
  9. Centos7默认自带了Python2.7版本,但是因为项目需要使用Python3.x,这里提供一种比较快捷方便的安装方式...
  10. Jboss未授权访问部署木马 利用exp