文档章节

Apache Log4j 架构 | Apache Log4j Architecture Level

彭苏云
 彭苏云
发布于 2014/08/19 13:59
字数 918
阅读 59
收藏 1
Apache Log4j是当前在J2EE和J2SE开发中用得最多的日志框架(几乎所有项目都用它),因为它具有出色的性能、灵活的配置以及丰富的功能,并且在业务有特殊的要求时,可以使用自定义组件来代替框架中已有的组件来满足要求。

一、组件介绍 | Component Introducation

Log4j主要有三个组件:
1、Logger。
负责供客户端代码调用,执行debug(Object msg)、info(Object msg)、warn(Object msg)、error(Object msg)等方法。
 
 
Logger 继承自 Category,Logger有三个子类:
  • org.apache.log4j.spi.RootLogger。这是默认的Logger类。
  • org.apache.log4j.spi.NOPLogger。这个类针对日志的输出不做任何操作,直接丢弃。
  • org.apache.log4j.spi.RootCategory。此类已经不推荐使用,用RootLogger代替。

Logger 一共有如下日志级别:
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • FATAL
另外,还有两个特殊的日志级别:
  • ALL    所有的日志输出,不论其级别。
  • OFF   所有日志一律不输出,与ALL相反。
 
2、Appender。
负责日志的输出,Log4j已经实现了多种不同目标的输出方式,可以向文件输出日志、向控制台输出日志、向Socket输出日志等。当前Log4j-1.2.6中Appender的子类实现及其层次结构如下:
org.apache.log4j.Appender ( interface
  • org.apache.log4j.AppenderSkeleton (abstract class)
    • org.apache.log4j.jdbc.JDBCAppender (通过JDBC向数据库输出日志信息)
    • org.apache.log4j.WriterAppender
      • org.apache.log4j.FileAppender (向文件输出日志信息,只产生一个日志文件)
      • org.apache.log4j.RollingFileAppender (日志文件到达指定大小时产生新的日志文件,可指定最大备份日志数量)
        • org.apache.log4j.varia.ExternallyRolledFileAppender
      • org.apache.log4j.DailyRollingFileAppender (可以指定每月、每周、每天、每小时滚动生成日志文件)
    • org.apache.log4j.ConsoleAppender (向控制台输出日志信息)
    • org.apache.log4j.net.TelnetAppender (通过telnet向远程输出日志信息)
    • org.apache.log4j.net.SyslogAppender
    • org.apache.log4j.net.SocketHubAppender
    • org.apache.log4j.net.SocketAppender (通过socket向远程输出日志信息)
    • org.apache.log4j.varia.NullAppender
    • org.apache.log4j.performance.NullAppender
    • org.apache.log4j.lf5.LF5Appender
    • org.apache.log4j.net.JMSAppender (通过jms向远程输出日志信息)
    • org.apache.log4j.nt.NTEventLogAppender
    • org.apache.log4j.AsyncAppender (异步输出日志信息)
    • org.apache.log4j.net.SMTPAppender (通过smtp向远程输出日志信息)

3、Layout。
负责日志信息的格式化。
 已经实现的类有:
  • org.apache.log4j.xml.XMLLayout (以XML格式格式日志信息)
  • org.apache.log4j.SimpleLayout(格式化结果包括日志信息的等级和日志信息)
  • org.apache.log4j.PatternLayout (最灵活的格式化方式,可以用以下的各项进行组合配置:
%c   logger名字空间的全称,如果加上{<层数>}表示列出从最内层算起的指定层数的名字空间。
%C  调用logger的类的全名(包含包路径)。
%d  日志记录时间,{<日期格式>}使用ISO8601定义的日期格式。
%F  调用logger的源文件名。
%l    日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。
%L   调用logger的代码行
%m   输出消息。
%M   调用logger的方法名。
%n   当前平台下的换行符。
%p   该条日志的优先级。
%r   从程序启动时到记录该条日志时已经经过的毫秒数。
%t  产生该日志事件的线程名。
%x   按NDC(Nested Diagnostic Context,线程堆栈)顺序输出日志。
%X   按MDC(Mapped Diagnostic Context,线程映射表)输出日志。通常用于多个客户端连接同一台服务器,方便服务器区分是那个客户端访问留下来的日志。
%%   显示一个百分号。)
  • org.apache.log4j.HTMLLayout
  • org.apache.log4j.EnhancedPatternLayout
  • org.apache.log4j.helpers.DateLayout
    • org.apache.log4j.TTCCLayout

二、执行顺序及关系 | Execution Flow Diagram

调用Log4j输出日志时,调用各个组件的顺序如下图所示:
1、日志信息传入 Logger。
2、将日志信息封装成 LoggingEvent 对象并传入 Appender。
4、在 Appender 中调用 Filter 对日志信息进行过滤,调用 Layout 对日志信息进行格式化,然后输出。

 
 

本文转载自:http://aofengblog.blog.163.com/blog/static/631702120114295537239/

共有 人打赏支持
彭苏云
粉丝 42
博文 204
码字总数 54255
作品 0
广州
高级程序员
私信 提问
Log4j 日志配置示例详解

日志是应用软件中不可缺少的部分,Apache的开源项目Log4j是一个功能强大的日志组件,提供方便的日志记录,具体请参考Log4j文档指南。 Log4j下载 在apache网站,可以免费下载到Log4j最新版本的...

长平狐
2013/01/06
96
0
Apache 宣布 Log4j 1 版本生命周期终结

Apache 日志记录服务 PMC 宣布结束 Log4j™ 1.x 日志记录框架生命周期,不再提供官方支持。 八月初开始,Log4j 1 版本就已经寿终正寝了。 Log4j 在 1999 发布第一个版本,然后快速的成为最多...

oschina
2015/08/27
5K
15
Java日志服务入门系列教程——(2)Apache log4j入门

1. 概述 目前log4j有三个发展分支,一个是1.2的稳定版,一个是已经停止继续发展的1.3版本,另一个就是实验阶段的2.0版本。Apache log4j官网上称,在一台载有运行在800MHz的AMD Duron CPU并使...

晨曦之光
2012/04/24
158
0
Log4j 2.0 的新特性

不久之前,著名的日志框架log4j发布了一个新的主要版本。从第一个alpha版本诞生以来,log4j已经发布了4个版本。log4j 2较之前的log4j 1有了很大的改动。因此,虽然log4j 2s现在还很年轻,但它...

oschina
2012/12/07
20.7K
2
Log4j 发布 2.0 首个 Alpha 版本

Log4j 2 是 Log4j 的升级版本,该版本比起其前任来说有着显著的改进,包含很多在 Logback 中的改进以及 Logback 架构中存在的问题。 这是 Log4j 2 的首次发行的版本,值得关注的改进包括: ...

oschina
2012/08/07
2.6K
6

没有更多内容

加载失败,请刷新页面

加载更多

rabbitmq安装教程

RabbitMQ有Windows与Linux版本的,这里先写Windows版本的安装。 以前安装软件总是在百度上找某某安装教程,结果能按照教程安装好的软件真的不多。想起先前以为大牛说的一句话,去官网按照官网...

em_aaron
今天
6
0
Android 贝塞尔曲线实践——波浪式运动

一、波浪效果如下 贝塞尔曲线自定义波浪效果的案例很多,同样方法也很简单,大多数和本案例一样使用二次贝塞尔曲线实现,同样还有一种是PathMeasure的方式,这里我们后续补充,先来看贝塞尔曲...

IamOkay
今天
2
0
Nmap之防火墙/IDS逃逸

选项 解释 -f 报文分段 --mtu 指定偏移大小 -D IP欺骗 -sI 原地址欺骗 --source-port 源端口欺骗 --data-length 指定发包长度 --randomize-hosts 目标主机随机排序 --spoof-mac Mac地址欺骗 ...

Frost729
今天
2
0
带你搭一个SpringBoot+SpringData JPA的环境

不知道大家对SpringBoot和Spring Data JPA了解多少,如果你已经学过Spring和Hibernate的话,那么SpringBoot和SpringData JPA可以分分钟上手的。 其实我在学完SpringBoot和SpringData JPA了之...

java菜分享
今天
7
0
Chocolatey 在Window搭建一个开发环境

在看了(利用 Chocolatey 快速在 Windows 下搭建一个开发环境)后,准备从零开始 一、准备工作 1、用管理员权限启动:powershell,执行错误请参考(PowerShell因为在此系统中禁止执行脚本的解...

近在咫尺远在天涯
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部