slf4j绑定器_用于ADFLogger的SLF4J绑定–缺少的部分

slf4j绑定器

由于最好的原因,在我的日常工作中,我希望为ADF Logger Oracle ADF提供一个SLF4J适配器。 毫不奇怪,slf4j没有用于ADFLogger的适配器,但是由于ADFLogger只是Java Util Logging的轻巧包装,因此花了一个多小时来填补这一空白。

存储库中的测试用例(更像是主程序)将确认适配器框架与Oracle Diagnostic Logging配合良好,而不会破坏日志消息的格式。 (或多或少是ADFLogger提供的唯一优势)。

ODL

您可以从github的存储库下载整个代码库 。 或者,如果您只对装订罐感兴趣,请在此处下载 。

日志级别:

考虑到ADF记录器(7)上的日志级别很多,而SLF4J(5)的级别较少,因此在ADF记录器的某些级别上做出了折衷。 映射如下:

LogLevelMapping

注意:在此调整过程中,不再支持日志级别FINER和CONFIG。

用法:

只需继续使用SLF4J实例替换您的ADFLogger。

private static final Logger slfLogger = LoggerFactory.getLogger(LoggingChecker.class);

代替

private static final ADFLogger adfLogger= ADFLogger.createADFLogger(LoggingChecker.class);

记录方式

一个。 记录到各个级别

@Testpublic void testLoggerLevels(){adfLogger.finest("finest Message from ADF Logger");slfLogger.trace("finest Message from SLF Logger");adfLogger.fine("fine Message from ADF Logger");slfLogger.debug("fine Message from SLF Logger");adfLogger.info("info Message from ADF Logger");slfLogger.info("info Message from SLF Logger");adfLogger.warning("warning Message from ADF Logger");slfLogger.warn("warning Message from SLF Logger");adfLogger.severe("severe Message from ADF Logger");slfLogger.error("severe Message from SLF Logger");}

b。 记录异常

异常测试

其中dummyException继承了Throwable

C。 记录参数

参数测试

参数传递

开发说明:

  1. ADF Logger Adapter框架由两个核心类( ADFLoggerFactory.javaADFLoggerAdapter.java )以及其他三个帮助器类组成。
  2. 适配器可以支持多个记录器,包括ADFLogger的ROOT记录器(这是默认记录,名称为空字符串)。
  3. SLF4J使用ADFLoggerFactory.java实例化ADFLoggerAdapter也就不足为奇了。
  4. 对于每个Logger实例, ADFLoggerAdapter.java组成一个ADFLoggerAdapter.java实例(绑定到记录器名称),并将调用委托给ADFLogger本身。
  5. fillCallerData方法从整个日志记录堆栈中筛选ADFLoggerAdapter的堆栈框架,以便将调用者类和方法名称保留为主机应用程序中的名称,而不是Adapter框架类中的名称。

测试用例(很好)

public class TestClass {private static final ADFLogger adfLogger= ADFLogger.createADFLogger(TestClass.class);private static final Logger slfLogger = LoggerFactory.getLogger(TestClass.class);private List<String> dummyList1=null;private List<Integer> dummyList2=null;private Exception dummyException=null;@Beforepublic void setUp(){dummyList1=new ArrayList<String>();dummyList1.add("Rock");dummyList1.add("Paper");dummyList1.add("Scissors");dummyList2=new ArrayList<Integer>();dummyList2.add(21);dummyList2.add(22);dummyList2.add(23);dummyException=new Exception("Mind blowing Exception");}@Testpublic void testLoggerLevels(){adfLogger.finest("finest Message from ADF Logger");slfLogger.trace("finest Message from SLF Logger");adfLogger.fine("fine Message from ADF Logger");slfLogger.debug("fine Message from SLF Logger");adfLogger.info("info Message from ADF Logger");slfLogger.info("info Message from SLF Logger");adfLogger.warning("warning Message from ADF Logger");slfLogger.warn("warning Message from SLF Logger");adfLogger.severe("severe Message from ADF Logger");slfLogger.error("severe Message from SLF Logger");}@Testpublic void testException(){adfLogger.severe("severe Message from ADF Logger", dummyException);slfLogger.error("severe Message from SLF Logger", dummyException);}@Testpublic void testParameters(){adfLogger.severe("severe Message from ADF Logger Param :{0}", dummyList1 );slfLogger.error("severe Message from SLF Logger Param :{}", dummyList1);adfLogger.severe("severe Message from ADF Logger Param 1 :[{0}] \n [{1}]", new Object[]{dummyList1, dummyList2} );slfLogger.error("severe Message from SLF Logger Param :{} \n {} ", dummyList1, dummyList2);slfLogger.error("severe Message from SLF Logger Param :[{}] \n [{}] ", new Object[]{dummyList1, dummyList2});}

输出:

记录器级别:

Jul 01, 2013 4:21:18 PM org.slf4j.test.TestClass testLoggerLevels
INFO: info Message from ADF Logger
Jul 01, 2013 4:21:18 PM org.slf4j.test.TestClass testLoggerLevels
INFO: info Message from SLF Logger
Jul 01, 2013 4:21:18 PM org.slf4j.test.TestClass testLoggerLevels
WARNING: warning Message from ADF Logger
Jul 01, 2013 4:21:18 PM org.slf4j.test.TestClass testLoggerLevels
WARNING: warning Message from SLF Logger
Jul 01, 2013 4:21:18 PM org.slf4j.test.TestClass testLoggerLevels
SEVERE: severe Message from ADF Logger
Jul 01, 2013 4:21:18 PM org.slf4j.test.TestClass testLoggerLevels
SEVERE: severe Message from SLF Logger

测试参数:

Jul 01, 2013 4:32:04 PM org.slf4j.test.TestClass testParameters
SEVERE: severe Message from ADF Logger Param :[Rock, Paper, Scissors]
Jul 01, 2013 4:32:04 PM org.slf4j.test.TestClass testParameters
SEVERE: severe Message from SLF Logger Param :[Rock, Paper, Scissors]
Jul 01, 2013 4:32:04 PM org.slf4j.test.TestClass testParameters
SEVERE: severe Message from ADF Logger Param 1 :[[Rock, Paper, Scissors]][[21, 22, 23]]
Jul 01, 2013 4:32:04 PM org.slf4j.test.TestClass testParameters
SEVERE: severe Message from SLF Logger Param :[Rock, Paper, Scissors][21, 22, 23]
Jul 01, 2013 4:32:04 PM org.slf4j.test.TestClass testParameters
SEVERE: severe Message from SLF Logger Param :[[Rock, Paper, Scissors]][[21, 22, 23]]

测试异常:

Jul 01, 2013 4:32:28 PM org.slf4j.test.TestClass testException
SEVERE: severe Message from ADF Logger
java.lang.Exception: Mind blowing Exceptionat org.slf4j.test.TestClass.setUp(TestClass.java:38)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)at org.junit.runners.ParentRunner.run(ParentRunner.java:300)at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)Jul 01, 2013 4:32:28 PM org.slf4j.test.TestClass testException
SEVERE: severe Message from SLF Logger
java.lang.Exception: Mind blowing Exceptionat org.slf4j.test.TestClass.setUp(TestClass.java:38)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)at java.lang.reflect.Method.invoke(Unknown Source)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42)at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:27)at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68)at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)at org.junit.runners.ParentRunner.run(ParentRunner.java:300)at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)

参考: ADFLogger的SLF4J绑定– Rerun.me博客上我们JCG合作伙伴 Arun Manivannan 的缺失作品 。

翻译自: https://www.javacodegeeks.com/2013/11/slf4j-binding-for-adflogger-the-missing-piece.html

slf4j绑定器

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

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

相关文章

核心网

在我们正式讲解之前&#xff0c;我想通过这张网络简图帮助大家认识一下全网的网络架构&#xff0c;通过对全网架构的了解&#xff0c;将方便您对后面每一块网络细节的理解。 这张图分为左右两部分&#xff0c;右边为无线侧网络架构&#xff0c;左边为固定侧网络架构。 无线侧…

JDK 11:轻松取出单文件Java源代码程序

JDK 11 Early Access Builds包含与JEP 330相关的预览功能&#xff08;“启动单个文件源代码程序”&#xff09;。 我之前在“ Shebang即将来到Java&#xff1f; ”和“ 为JDK 11提议的JEP 329和JEP 330 ”&#xff0c;由于JDK 11 Early Access Builds&#xff0c;在这篇文章中…

瑞利、莱斯与Nakagami-m信道衰落模型

一、信道的定义与调制信道的数学模型 1.信道的定义与分类 信道&#xff08;Channel&#xff09;是指以传输媒质为基础的信号通道。根据新到的定义&#xff0c;如果信道仅是指信号的传输媒质&#xff0c;这种信道称为狭义信道&#xff1b;如果这种信道不仅是传输媒质&#xff…

linux用if语句编程序,Shell 脚本基础 - 使用 if 语句进行条件检测

Bourne Shell 的 if 语句和大部分编程语言一样 - 检测条件是否真实&#xff0c;如果条件为真&#xff0c;shell 会执行这个 if 语句指定的代码块&#xff0c;如果条件为假&#xff0c;shell 就会跳过 if 代码块&#xff0c;继续执行之后的代码。if 语句的语法&#xff1a;if[判…

卫星导航定位 -- 坐标系统与时间系统

原文https://blog.csdn.net/f2157120/article/details/81210843 1 协议天球坐标系 以地球质心为坐标原点&#xff0c;以地球自转的轴为z轴 2 协议地球坐标系 3 WGS-84坐标系 4 CGS2000坐标系统 5 直角坐标系与大地坐标系转换 6 大地坐标系转换 7 时间系统 8 GNSS时间系统 …

博弈论学科整体概览

一、博弈论的概念 博弈论又被称为对策论&#xff08;Game Theory&#xff09;既是现代数学的一个新分支&#xff0c;也是运筹学的一个重要学科。博弈论主要研究公式化了的激励结构间的相互作用。是研究具有斗争或竞争性质现象的数学理论和方法。博弈论考虑游戏中的个体的预测行…

linux 进程组id 错乱,【Linux】终端,进程组,作业,会话及作业控制

终端概念在UNIX系统中,用用户通过终端登录系统后得到一一个Shell进程,这个终端成为Shell进程的控制终端 (Controlling Terminal),控制终端是保存在PCB中的信息,而我们知道fork会复制PCB中的信息,因此由Shell进程启动的其它进程的控制终端也是这个终端。默认情况 下(没有重定向)…

纳什均衡

纳什均衡&#xff08;或者纳什平衡&#xff09;&#xff0c;Nash equilibrium ,又称为非合作博弈均衡&#xff0c;是博弈论的一个重要策略组合&#xff0c;以约翰纳什命名。 定义 经济学定义 数学定义 纳什均衡的定义&#xff1a;在博弈G﹛S1,…,Sn&#xff1a;u1,…&#x…

奇异值分解(SVD)原理与在降维中的应用

奇异值分解 奇异值分解(Singular Value Decomposition&#xff0c;以下简称SVD)是在机器学习领域广泛应用的算法&#xff0c;它不光可以用于降维算法中的特征分解&#xff0c;还可以用于推荐系统&#xff0c;以及自然语言处理等领域。是很多机器学习算法的基石。本文就对SVD的…

自相关函数与互相关函数

1 概念 1 自相关函数 2 互相关函数 从定义式中可以看到&#xff0c;互相关函数和卷积运算类似&#xff0c;也是两个序列滑动相乘&#xff0c;但是区别在于&#xff1a;互相关的两个序列都不翻转&#xff0c;直接滑动相乘&#xff0c;求和&#xff1b;卷积的其中一个序列需要先…

Linux as4开启telnet,linux as4 虚拟机 上开启 telnet 和ssh 和 ftp 服务

1.telnet服务开启(1)输入[rootrehat ~]# chkconfig krb5-telnet --listkrb5-telnet on这是你的服务存在的状态&#xff0c;如果没有的话&#xff0c;可能是你的telnet名字和我的不一样&#xff0c;也可能是你的那个rpm包没有安装。我第一次的Linux中是没有安装的&#xff0…

5G的场景、需求、通信速率

5G三大典型场景 5G有三大典型场景&#xff0c;这三大场景描述了5G的需求也反应了5G与4G的不同&#xff0c;如图所示&#xff0c;三大场景分别为&#xff1a;增强型移动宽带通信&#xff08;eMBB&#xff09;&#xff0c;大规模机器型通信&#xff08;eMTC&#xff09;和超高可…

linux7禁用ipv6,RHEL 7 及 CentOS 7 彻底禁用IPv6的方法

原标题&#xff1a;RHEL 7 及 CentOS 7 彻底禁用IPv6的方法IPv6在未来可能成为主流&#xff0c;但是就目前而言&#xff0c;很多软件对IPv6的支持并不是很完善&#xff0c;可能导致各类问题。RHEL 7 & CentOS 7 在启动时默认是加载IPv6相关模块的&#xff0c;而禁用IPV6的方…

宏基站、分布式基站、小基站

基站即公用移动通信基站&#xff0c;是无线电台站的一种形式&#xff0c;是指在一定的无线电覆盖区中&#xff0c;通过移动通信交换中心&#xff0c;与移动电话终端之间进行信息传递的无线电收发信电台。 目前&#xff0c;在 5G时代 &#xff0c;“ 宏基站 为主&#xff0c; 小…

struts2面试问题_Struts2面试问答

struts2面试问题Struts2是用Java开发Web应用程序的著名框架之一。 最近&#xff0c;我写了很多Struts2教程 &#xff0c;在这篇文章中&#xff0c;我列出了一些重要的Struts2面试问题以及答案&#xff0c;以帮助您进行面试。 什么是Struts2&#xff1f; Struts1和Struts2之间…

什么是Mesh网络

网络间的通信原理 假设你的名字叫小不点&#xff0c;你住在一个大院子里&#xff0c;你的邻居有很多小伙伴&#xff0c;在门口传达室还有个看大门的李大爷&#xff0c;李大爷就是你的网关。当你想跟院子里的某个小伙伴玩&#xff0c;只要你在院子里大喊一声他的名字&#xff0…

根据谁创建资源授权资源

我的一位同事向我提出了一个关于StackOverflow的有趣问题&#xff0c;并由于我在Spring方面的经验&#xff0c;建议我回答一个很好的问题。 问题是&#xff1a;“ 如何基于使用注释在REST中创建资源的用户来授权特定资源 。” 要点是&#xff1a; 我想做的是创建一个名为Aut…

netbeans7.4_NetBeans 7.4的本机Java打包

netbeans7.4成为“ NetBeans 74 NewAndNoteworthy ”页面的NetBeans 7.4的新功能之一是“本机打包 ”&#xff0c;在该页面上被描述为“ JavaSE项目现在支持使用JavaFX提供的本机打包技术来创建本机包。 ” 我将使用一个非常简单的示例来演示NetBeans 7.4中的本机打包功能。 下…

斯坦纳点/树、泰森多边形

斯坦纳点 斯坦纳点别名正等角中心、费尔马点、斯坦纳点 在三角形的三边各向其外侧作等边三角形&#xff0c;这三个等边三角形的外接圆交于一点T&#xff0c;该点T即称为托里拆利点&#xff08;Torricelli’s point &#xff09;&#xff0c;而三个等边三角形的外接圆称为托里拆…

FXRibbon 1.2版发布

这次&#xff0c;有所不同。 Microsoft对FXRibbon的更新&#xff0c;就像Java的功能区控件&#xff08;JavaFX&#xff09;一样 。 在发出使FXRibbon做好更好的准备以将其更新到Java 9以及更高版本的要求之后&#xff0c;我借此机会还添加了一些功能&#xff0c;进行了一些美学…