在上一篇文章里,我们故意遗漏了一个重要的接口,AppenderAttachable:
public interface AppenderAttachable {
public void addAppender(Appender newAppender);
public Enumeration getAllAppenders();
public Appender getAppender(String name);
public boolean isAttached(Appender appender);
void removeAllAppenders();
void removeAppender(Appender appender);
void removeAppender(String name);
}
顾名思义,继承该接口的类可以attach Appenders, Category类继承了这个借口,因此也提供了相应的API。我们在配置文件里面设置的Appender属性会在配置类中被加载到Logger:Category对象中。
然而在Category类中,并没有真正的实现这些API,它将之代理到了其AppenderAttachableImpl变量中。回到第一篇文章中的类图,我们可以知道, AppenderAttachableImpl类同样也继承了AppenderAttachable接口。仔细一看,这里其实用了一个代理模式。
而在AppenderAttachableImpl中,维护了一个Appender类型列表,而Appender则是真正做事的人。。。
public int appendLoopOnAppenders(LoggingEvent event) {
int size = 0;
Appender appender;
if(appenderList != null) {
size = appenderList.size();
for(int i = 0; i < size; i++) {
appender = (Appender) appenderList.elementAt(i);
appender.doAppend(event);
}
}
return size;
}
所以,我们回来看第一章的序列图,并不完整,我们现在来将之补全:
后面我们会继续补全这张图片。
Appender的具体实现类并不直接继承Appender,而是继承于Appender的一个抽象实现:AppenderSkeleton,这个类维护了Filter以及Layout的实例,你可以在Log4j配置项中找到Filter以及Layout, 这里不再赘述。 我们常见的XMLAppender,或者HTMLAppender都是继承于该类。
- 大小: 32.9 KB
分享到:
相关推荐
例如,`org.apache.logging.log4j.core.appender.ConsoleAppender`用于将日志输出到控制台,而`org.apache.logging.log4j.core.layout.PatternLayout`则可以按照自定义的模式格式化日志信息。 Log4j2的亮点之一是其...
Log4j Appender 阿里云Log Log4j Appender Apache log4j是一个Apache软件基础项目。 您可以通过Log4j控制日志的目的地。 它可以是控制台,文件,GUI组件,套接字,NT事件日志,系统日志。 您也可以控制每个日志的...
**log4j-api-2.12.4.jar** 是Log4j 2框架的API模块,它包含了日志记录的基本接口和类,如`Logger`, `Level`, `Appender`, `Layout`等。这些接口和类为应用程序提供了一种与具体实现解耦的方式来进行日志记录。开发者...
《深入理解Log4j 2.15.0-rc2:日志处理的关键技术解析》 Log4j,作为Java领域广泛使用的日志记录框架,一直以来都是开发者们的重要工具。这次我们关注的是其最新版本——logging-log4j2-log4j-2.15.0-rc2。这个版本...
6. **配置文件**:Log4j通常通过配置文件(如log4j.properties或log4j.xml)来设置其行为,包括定义日志器、appender和layout。 7. **MDC(Mapped Diagnostic Context)和NDC(Nested Diagnostic Context)**:这两...
阿里云java源码Log4j2 附加程序 阿里云日志 Log4j2 Appender Apache Log4j2 是对 Log4j 的升级,与其前身 Log4j 1.x 相比提供了重大改进。 可以通过Log4j2控制日志的目的地。 它可以是控制台、文件、GUI 组件、套接...
Log4j的Appender接口定义了这种输出行为。 4. **过滤器**:通过Filter组件,可以控制哪些日志事件应该被记录,哪些应该被忽略,这有助于减少不必要的日志输出,提高系统性能。 5. **日志性能优化**:Log4j 2引入了...
当日志记录包含特定的字符串模式,如`${jndi:ldap://}`时,Log4j2会尝试解析这个URL,从而可能触发远程服务器上的代码执行。由于许多应用程序并未意识到此风险,因此它们可能无意中记录了这些恶意输入,导致漏洞被...
2. **SLF4J到Log4j桥接器**:slf4j-log4j12-1.7.18.jar实现了SLF4J接口到Log4j 1.x的桥接,使得使用SLF4J API编写的代码可以在Log4j-core-2.5环境下运行。 三、配置与实践 配置Log4j-core-2.5通常涉及创建一个`log...
Log4Shell,又称为CVE-2021-44228,是一个极其严重的远程代码执行(RCE)漏洞,影响了Log4j 2.x版本。这个漏洞允许攻击者通过精心构造的JNDI(Java Naming and Directory Interface)链接来注入恶意代码,进而执行...
5. **安全增强**:Log4j 2.15.0 版本特别关注安全问题,修复了可能导致远程代码执行的严重漏洞(CVE-2021-44228),增强了系统的安全性。 **部署与使用** 解压"apache-log4j-2.15.0-bin"后,你将得到Log4j的运行时...
Apache Log4j 是一个广泛使用的Java日志框架,它的版本2.8.2是一个重要的更新,提供了许多功能改进和安全修复。这个压缩包文件“apache-log4j-2.8.2-bin.tar”包含了Log4j 2.8.2的二进制发行版,适用于那些希望快速...
Apache Log4j 2.0 是一个广泛使用的Java日志框架,主要负责应用程序的调试、监控和日志记录。...学习和掌握Log4j 2.0,将有助于你在开发过程中实现高效、可控的日志管理,从而更好地调试和优化你的Java应用程序。
《深入理解Log4j:基于1.2.15 API文档的解析》 在Java世界里,日志处理是不可或缺的一部分,而Log4j作为一款经典的日志框架,以其强大的功能和灵活的配置赢得了广大开发者们的青睐。本文将基于"Log4j 1.2.15"的API...
3. 创建一个Log4j配置文件(如log4j2.xml或log4j2.properties),定义日志级别、Appender和Layout。 4. 在你的Java代码中初始化Log4j,并使用Logger类记录日志。 举例来说,一个简单的`log4j2.xml`配置文件可能如下...
- **配置日志**:创建`log4j2-spring.xml`配置文件,定义日志级别、输出格式、Appender等。例如: ```xml <?xml version="1.0" encoding="UTF-8"?> [%t] %-5level %logger{36} - %msg%n"/> ...
这个zip文件"apache-log4j-2.9.0-src.zip"包含了Log4j 2.9.0版本的源代码,允许开发者深入理解其内部工作原理,进行定制化开发或排查问题。 Log4j 2.9.0源码中包含以下几个核心知识点: 1. **配置文件解析**:Log4...
log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j.appender.Console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n # 文件Appender log4j.appender.File=org.apache...
log4j2-elasticsearch概述 这是log4j2附加程序插件的父项目,能够将日志批量推送到Elasticsearch集群。 最新发布的代码(1.5.x)可用。 项目包括: log4j2-elasticsearch-core实现的框架提供程序 log4j2-elastic...
然而,值得注意的是,Log4j曾爆出严重的CVE-2021-44228漏洞,也被称为Log4Shell,这是一个远程代码执行漏洞,影响了大量使用Log4j的系统。因此,即使使用的是2.9.1版本,也需要时刻关注最新的安全更新,以防类似的...