自定义Log4j 2.0

我们越来越接近Log4j 2 GA版本,因此,我们应该开始研究它会给我们带来什么。

我个人有很多理由对Log4j 2.0感到兴奋。 社区很棒,Apache许可证给了我很多自由,最后它受到Apache软件基金会的保护。 嘿,这是一个很棒的软件。

在过去的几周中,我围绕Log4j 2.0进行了很多讨论,并意识到有几个人喜欢他们可以轻松扩展框架。 在云时代,您可能想使用商业服务来收集日志,甚至使用您自己的服务。 今天,我们需要更加灵活地将日志发送到哪里,这就是Log4j 2.0所提供的。

使用Log4j 1和Logback,您可以通过扩展类和实现接口进行自定义。 仅此一项是可行的,但是提供您自己的配置元素并不是那么容易。

Log4j手册将其带到了重点:

通过在大多数配置声明中要求类属性,允许扩展Log4j1.x。 对于某些元素,尤其是PatternLayout,添加新的模式转换器的唯一方法是扩展PatternLayout类并通过代码添加它们。

使用Log4j 2.0,可以编写以下定制:

  • 核心:您可以编写Appender,记录器或过滤器。
  • 转换器:您可以转换一些LogEvent消息(例如:转换日期)
  • 查找:查找一些资源(例如:从系统属性中获取一些值)
  • 密钥提供者:您可以为日志提供加密功能

在许多情况下,Appender是最有趣的东西。 Appender是Log4js体系结构的最后一个元素,它实际上对Log-Event做一些事情 。 例如,一个Appender可能写入文件或将Log事件发送到数据库。

让我们看一下一个真正存在的琐碎Appender: File Appender 。

如果我们需要构建这样的东西,我们首先用@Plugin注释我们的类:

@Plugin(name = "File",category = "Core",elementType = "appender",printObject = true)
public final class FileAppenderextends AbstractOutputStreamAppender<FileManager> {

最重要的是,注释将采用插件名称,其类别“ Core”和元素类型“ appender”,告诉log4j这将是一个追加器。 稍后将插件名称用于我们的配置文件。

至此,您几乎可以随意实现所需的任何东西。 您应该确保实现了Appender-interface 。 在FileAppender中,对AbstractOutputStreamAppender进行了扩展,它实现了Appender接口。 您实际上不需要这样做,但是这很有意义。 与其他框架不同,Log4j 2.0在后台使用字节数组进行操作,这使您可以做更多的事情。 您通常想保持这种传统。

对于您的Appender,您只需要做一件事:在Appenders类中实现一个Plugin-Factory。 File-Appender的简化版本如下:

@PluginFactory
public static FileAppender createAppender(@PluginAttribute("fileName") final String fileName,...@PluginElement("Layout") Layout<? extends Serializable> layout,@PluginElement("Filters") final Filter filter...) {// Do things...return new FileAppender(layout, filter, fileName, ...);
}

工厂方法使用@PluginFactory注释。 它是静态的,并创建Appender的实例。 工厂还处理配置。 它接受使用@PluginAttribute或@PluginElement注释的属性。 您可能会猜到,这些是您配置中的元素。 它可能看起来像这样:

<Configuration><Appenders><File name="File" fileName="target/mylog.log"><PatternLayout><Pattern>%d %p %C{1.} [%t] %m%n</Pattern></PatternLayout></File>...

@PluginAttribute从附加元素(在本例中为“文件”)中命名属性。 @PluginElement为嵌套元素命名,例如PatternLayout是Layout实例。

旁注:您可能已经注意到配置文件的可读性得到了提高。 这也是Log4j 2.0的新功能。 但是,如果您出于某些原因坚持使用严格的样式,则仍然可以按照这种方式编写配置:

<Appender type="File" name="File" fileName="target/mylog.log">

现在,假设我们有一个全新的插件,该插件位于公司的包装中。 我们如何使Log4j 2.0识别它? 对于Log4j 1来说,这并非微不足道,但对于新Log4j而言,它却很简单。

只需将一个或多个包含您的附加程序的软件包添加到配置中:

<Configuration packages="de.grobmeier.appenders">

将扫描软件包,如果找到了插件,则会添加它们。 如果您担心启动时间性能,甚至可以在构建时预加载插件 。

让我们回顾一下。 创建您自己的Log4j 2.0 Appender将需要三个步骤:

  • 创建一个实现Appender并具有@Plugin批注的类
  • 使用@PluginFactory批注创建静态方法
  • 将您的附加程序添加到您的配置中

使用插件架构,甚至可以进行复杂的设置。 例如,您可以为NoSQL数据库创建一个抽象的“ NoSQL Appender”,然后基于此提供各种实现。 这已经是现实,因为Log4j支持MongoDB和CouchDB 。

如果您想了解有关这种高级用法的更多信息,建议您使用NoSQL软件包 。

祝您玩得开心,不要忘了我们很乐意在Log4j邮件列表中看到您所做的工作。

参考: PHP和Java Entwickler博客上的JCG合作伙伴 Christian Grobmeier 自定义Log4j 2.0 。

翻译自: https://www.javacodegeeks.com/2014/02/customizing-log4j-2-0.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/365049.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机斐波那流程图,循环结构——斐波那契数列.DOC

循环结构——斐波那契数列循环结构——斐波那契数列1&#xff0e;教学目标根据新课标的要求和学生的认知特点&#xff0c;确定本节课的教学目标。(1)知识与技能学生能理解循环结构概念&#xff1b;把握循环结构的三要素&#xff1a;循环的初始状态、循环体、循环的终止条件&…

为什么用链路聚合_H3C ComwareV7平台网络设备可靠性配置——链路聚合

H3C ComwareV7平台网络设备可靠性配置——链路聚合链路聚合简介&#xff1a;链路聚合是通过多个物理接口(通常指以太网接口&#xff0c;串口只在特定场景且与以太网聚合技术等同故不再赘述)捆绑实现的逻辑接口&#xff0c;而这些被捆绑在一起的以太网接口就称为该聚合组的成员端…

用php实现一个双向队列

队列是一种线性表&#xff0c;按照先进先出的原则进行 单向队列&#xff1a;只能从头进&#xff0c;从尾出 双向队列&#xff1a;头尾都可以进出 class DuiLie { private $array array();//声明空数组 public function setFirst($item){ //array_unshift() 函数用于向数组插入…

idea+maven+ssm搭建boot_crm项目遇到的问题

使用ideamavenssm搭建一个boot_crm项目&#xff0c;遇到的问题如下&#xff1a; 1.环境搭建好了&#xff0c;相关配置文件都配置好了&#xff0c;也部署到了tomcat&#xff0c;但是无法启动首页。 通过百度&#xff0c;google找到了&#xff0c;原因是web.xml文件出了问题&…

大型计算机变形,计算机变形病毒的主要特征和发展趋势

计算机变形病毒的主要特征和发展趋势计算机病毒具有一些基本的特性&#xff0c;这些基本特性主要指的是病毒的传染性、破坏性、恶作剧等&#xff0c;这是普通病毒所具备的基本特性&#xff0c;而能用变化自身代码和形状来对抗反病毒手段的变形病毒才是下一代病毒首要的基本特征…

Redis与Jedis排序

在本文中&#xff0c;我们将讨论Redis SORT命令。 Redis提供了SORT命令&#xff0c;我们可以使用该命令从LIST&#xff0c;SET或ZSET中检索或存储排序的值。 我们可以使用最简单的形式在KEY上使用命令&#xff0c;如下例所示&#xff1a; SORT numbers_list这将对键中包含的…

获取 HTML5 网页设计灵感的10个网站推荐

这篇文章向大家推荐10个收集 HTML5 网页作品的网站&#xff0c;让大家感受一下 HTML5 的魅力。作为下一代网页标准&#xff0c;HTML5 增加了很多新标签以及新特性&#xff0c;正引领网页技术革命。希望这些优秀的 HTML5 网页案例能带给大家制作 HTML5 网页的灵感。 HTML5 Gall…

postgresql存图片字段类型_PostgreSQL让人着迷的多态性,另辟蹊径省时又省力

PostgreSQL 让人着迷的地方&#xff0c;不在于他比某些数据库的流行&#xff0c;也不在于比某些数据库的高“贵”&#xff0c; 更不如某些数据库的“简单”。Postgresql 让人无法自拔的是他的”多端变化”&#xff0c; 用开发的角度来说&#xff0c;叫多态性。PG本身支持着太多…

计算机怎么查看U盘品牌,如何查看电脑u盘使用

如何查看电脑u盘使用其实笔记本设置U盘启动也并不困难&#xff0c;小编这就教你怎样设置U盘启动&#xff01;全是硬货&#xff01;第一步&#xff1a;我们先把U盘插入笔记本的USB接口上&#xff0c;(注意&#xff1a;请不要通过USB延长线来连接笔记本)插上U盘后重启笔记本本。电…

Maven补全之生命周期(Lifecycle)

Maven补全之生命周期&#xff08;Lifecycle) Maven生命周期基础概念 Maven是基于生命周期构建的&#xff0c;一个Maven项目的构建是已经被清晰定义的过程。 对于我们使用Maven构建项目来说&#xff0c;POM.xml文件可以确保我们得到自己想要的项目&#xff08;项目名&#xff0c…

嵌入式-第一季-第2课

第二课 嵌入式系统概述 一&#xff0e;核心概念 嵌入式系统是&#xff08;1&#xff09;以应用为中心&#xff0c;以计算机技术为基础&#xff0c;&#xff08;2&#xff09;软硬件可剪裁&#xff0c;对&#xff08;3&#xff09;功能、可靠性、成本、体积、功耗严格要求的专用…

善用封盖

不久前&#xff0c;在博客文章中 &#xff0c;我解释了Groovy中的Closure。 这篇博客文章将解释一个使用它们的好例子。 最近&#xff0c;我发现自己不得不为服务AJAX请求的大量后端Controller API编写相同的异常处理逻辑。 就像这样&#xff1a; class ApiRugbyPlayerControl…

12款精美的免费 HTML 网站模板下载

这篇文章收集了12款精美的免费HTML网站模板分享给大家&#xff0c;您可以免费下载使用。相信这些漂亮的HTML网站模板既能够帮助您节省大量的时间和精力&#xff0c;又能有很满意的效果。感谢那些优秀的设计师分享他们的劳动成果&#xff0c;让更多的人可以使用他们的创意设计&a…

两个数相乘积一定比每个因数都大_小升初数学知识点大全含公式+20类必考应用题(含答案解析),孩子考试一定用得上!...

小升初数学知识点大全含公式一、几何图形周长、面积和体积公式*三角形的面积&#xff1d;底高2。S ah2正方形的面积&#xff1d;边长边长 S a长方形的面积&#xff1d;长宽 公式 S ab平行四边形的面积&#xff1d;底高 S ah梯形的面积&#xff1d;(上底下底)高2 S(ab)h2内角和&…

WPF自定义TabControl样式

WPF自定义TabControl样式 原文:WPF自定义TabControl样式WPF自定义TabControl&#xff0c;TabControl美化 XAML代码&#xff1a; <TabControl x:Class"SunCreate.Common.Controls.TabControlEx"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentat…

11计算机,11-计算机科学与技术

《11-计算机科学与技术》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《11-计算机科学与技术(23页珍藏版)》请在人人文库网上搜索。1、计算机软件技术基础,机械工业出版社2007年7月,第一部分 数据结构与算法基础,第1章 算法 第2章 数据结构的基础 第3章 线性表及其存…

Spring新变化

让我们检查一下Spring社区在前几天宣布的一些新版本&#xff1a; Spring Boot 1.0.0.RC1 Spring很高兴地宣布Spring Boot v1.0.0的第一个候选版本。 它包含了先前里程碑中的许多错误修复和增强功能。 二进制文件已发布到Spring Maven存储库 。 使用下载说明和Maven / Gradle坐…

H.264分层结构与码流结构

H.264分层结构 H.264编码器输出的Bit流中&#xff0c;每个Bit都隶属于某个句法元素。句法元素被组织成有层次的结构&#xff0c;分别描述各个层次的信息。 在H.264 中&#xff0c;句法元素共被组织成 序列、图像、片、宏块、子宏块五个层次。在这样的结构中&#xff0c;每一层…

20个很酷的CSS3导航菜单制作教程

CSS3 是对 CSS 规范的一个很大的改善和增强&#xff0c;它使得 Web 开发人员可以很容易的在网站中加入时尚的效果。以前很多需要编写 JavaScript 才能实现的效果&#xff0c;如今只需要简单的写几句 CSS3 代码就能实现。今天这篇文章就向大家推荐20个很酷的CSS3导航菜单制作教程…

金算盘高手论坛资料中心_3D006期 菜鸟论坛精英PK专栏 速来围观!!

点上方“菜鸟选号论坛”→点右上角“...”→选“星标★”每日上午更新&#xff0c;星标置顶与大神不走散苹果是置顶&#xff0c;安卓是星标 点击"菜鸟选号论坛"关注我们论坛明星版块&#xff0c;集全网各路高手之大乘&#xff0c;打造草根明星 展示舞台。同时主要是为…