,但是近年发展明显放缓,因为要维持较老java版本的使用,。而作为其代替品,slf4j/logback做出了许多必要改进,为什么还需要log4j2?主要有以下几个原因:Log4j2被设计用作审计日志框架,log4j和logback在重载配置时,都会丢失日志时间,而log4j2不会。Logback中appenders中的异常对于应用来说是不可见的,log4j2可以配置异常向应用渗透。Log4j2包含基于 LMAXDisruptorlibrary的下一代无锁AsynchronousLoggers,在多线程环境下,AsynchronousLoggers相比slf4j/logback提高了10倍以上的吞吐量,并且有着更低的延时。Log4j2的插件机制,使得在不需要修改框架的情况下,通过添加 Appenders, Filters, Layouts, Lookups轻松扩展框架。简单的插件配置,无需指定具体类名即可在configuration中配置插件。支持自定义日志级别,可以在代码或者configuration中自定义日志级别。支持lambda表达式,java8的应用可以在请求日志级别启用时使用lambda表达式懒构建一个日志消息,不需要显示的日志级别检查,使得代码更简洁。支持消息对象,消息允许支持有趣和复杂的结构,传递到日志记录系统,并且可以高效的操作。用户可以自由创建消息类型和编写Layouts,FiltersandLookups来操作这些消息。Log4j1在Appenders上支持Filters 。logback增加了TurboFilters ,允许在日志事件在处理前进行过滤。Log4j2可以配置Filters在Logger后者Appender前运行。许多Logback的Appenders不接受Layout,并且只能按照固定格式发送日志数据。大部分log4j2接收Layout配置,允许日志数据按照任何所需格式传输。Log4j1与logback的Layouts是返回一个String类型,这可能导致一些编码问题。Log4j2使用了简单的方式:返回一个byte数组。这以为着Layouts可以用在几乎任何appenders,而不仅仅是写入OutputStream。Syslogappender支持TCP与UDP,以及BSDsyslog和RFC5424格式。Log4j2得益于java5的并发支持,将锁的可能降到最低水平。Log4j1有已知的死锁问题,Logback也需要使用synchronization来保持在相当高的锁级别。。LogManager会定位一个合适的LoggerContext然后从中获取Logger。如果Logger必须新建,那么与之关联的LoggerConfig遵守如下规则:(1)与Logger名称完全相同。(2)父Logger的名称。(3)RootLoggerConfig。LoggerConfig对象是根据configuration配置中的Logger声明创建的。LoggerConfig又与处理LogEvents的LoggerConfig关联。:loggingAPI可以禁用一些log语句输出的同时允许其他一些语句块输出。这种能力建立在开发者按照一定规则将日志分类的基础上。。。Loggers与LoggerConfigs都是带名称的实体。Logger名称是大小写敏感的,并且符合如下命名层级规则:。那么这个LoggerConfig是另外的LoggerConfig的子类。类似于java的package路径。例如:.foo"."的LoggerConfig的父类。类似的,“java”是""的父类和""的祖先类。开发人员对这样的命名方案应该很熟悉。RootLoggerConfig居于LoggerConfig分层的顶层。RootLoggerConfig总是存在于每个LoggerConfig的层次中。任何一个与root LoggerConfig相关联的Logger可以通过如下方式获得:Loggerlogger=Lo
log4j2中文手册 来自淘豆网www.taodocs.com转载请标明出处.