ADFLogger的SLF4J绑定–缺少的部分

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

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

ODL

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

日志级别:

考虑到ADF Logger(7)上有许多日志级别,而SLF4J(5)中有更少的日志级别,因此在ADF Logger上的某些级别上做出了折衷。 映射如下:

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

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

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

相关文章

c语言int 转bool_C++代码实现逆波兰式_C 语言

100行以内C代码实现逆波兰式逆波兰式(Reverse Polish notation&#xff0c;RPN&#xff0c;或逆波兰记法)&#xff0c;也叫后缀表达式(将运算符写在操作数之后)。算术表达式转逆波兰式例子&#xff1a;逆波兰式整体的算法流程图如下&#xff1a;下面给出我基于C 语言对逆波兰式…

css的再深入9(更新中···)

一 单位 1.px 就是一个基本的单位 像素 2.em 也是一个单位 用父级元素的字体大小乘以em前面的数字。如果父级没有就继承上一个父级直到body&#xff0c;如果body没有那就默认是16px。 3.rem 也是一个单位&#xff0c;只跟根节点<html>的字体大小有关&#xff0c;如果没…

指令的存储与执行初探

前言导读&#xff1a;从零开始构造一台二进制加法器 假设一个处理器与存储器相连&#xff0c;存储器中存放着一些指令。这些指令通过处理器发出的寻址信号被加载到处理器中&#xff0c;这个过程称为取指令。 下面通过简单的加法运算&#xff0c;来看一下指令和数据是怎么存储在…

java 中的流_Java中的流(IO

Java中的流(IO流.java.io包中定义了多个流类型(类或抽象类)来实现 输入 / 输出功能&#xff0c;可以从不同的角度对其进行分类&#xff1a;按单位可分为&#xff1a; 字节流 (一个字节一个字节的读取) 字符流 (一个字符一个字符的读取『一个字符是两个字节』)按…

python基础学习_35岁零基础学习Python编程是否能学得会并用得上

首先&#xff0c;学习编程语言并没有年龄上的限制&#xff0c;在当前的工业互联网时代&#xff0c;不论是初级职场人还是资深职场人&#xff0c;学习一门编程语言都是有必要的&#xff0c;从这个角度来看&#xff0c;35岁开始学习编程语言是完全可以的。虽然说学习Python语言并…

css的再深入7(更新中···)

1.transparent 透明的 2.placeholder 提示语 写页面 搞清结构层次&#xff0c;保证模块化&#xff0c;让他们之间不能受到影响 (1) 元素性质 (2) 标准流 浮动带来的脱离文档流撑不起父级的高度的问题可以采用清除浮动的方式消除影响&#xff0c;absolute和fixed带来的脱…

窥探JBoss Fuse 6.1的新功能

我对即将发布的Fuse 6.1版本感到非常兴奋&#xff0c;因为有很多很棒的新功能是我真正想要的&#xff0c;而且已经有一段时间了。 HAWT工具。 因此&#xff0c;这是一个快速的先睹为快&#xff0c;主要关注于新版本的Fuse Management Console&#xff08;现已由hawtio开源项目…

[C语言] 选择排序之直接选择排序的特性及实现

[C语言] 选择排序之直接选择排序的特性及实现 1、算法特性 直接选择是一种简单、不稳定的选择排序方法&#xff0c;属于最为基础的排序方法之一。 其时间复杂度最好情况为O&#xff08;n&#xff09;、最差为O&#xff08;n&#xff09;、平均为O&#xff08;n&#xff09;&…

电脑测速软件_联通你我【宽带提速】让网速飞!超实用的宽带测速提速攻略来啦!...

宅在家里&#xff0c;在家娱乐、在家办公、在家上课&#xff0c;都需要畅快的宽带网络&#xff0c;所以很多小伙伴都办理了联通宽带怎样才是正确的宽带测速姿势&#xff1f;小沃给大家介绍两种简便的测速方法&#xff0c;同时说说怎样才能完全释放宽带网速、让咱享受到真正的提…

MyEclipse - 查询使用的JDK版本

查询 MyEclipse 使用的 JDK 版本 MyEclipse 菜单->Windows->Proferences->java->Installs Jres重新设置JDK路径&#xff0c;改为开发程序时的JDK版本&#xff08;如上图&#xff09;&#xff08;我做到这一步就可以了&#xff01;我的eclipse是7.0&#xff0c;jdk…

解析什么是绝对定位,相对定位与浮动

在理解定位之前&#xff0c;先说一个概念&#xff0c;文档普通流&#xff0c;就是元素标签正常在HTML里的顺序&#xff0c;块级元素从上至下排列&#xff0c;行内元素从左到右排列。 绝对定位 绝对定位&#xff1a;absolute&#xff0c;元素相对于离它最近的已定位祖先元素进…

具有多个查询参数的Camel CXF服务

出色的Apache Camel团队忙于解决查询中多个参数的处理问题&#xff0c;这是一种解决方法。 希望该帖子将在下一版本的Camel中变得过时。 &#xff08;当前&#xff0c;我使用2.7.5&#xff09; 问题 大于1的查询参数作为null值传递给Camel-CXF服务。 假设网址中有四个查询参数…

《JavaScript高级程序设计》读书笔记(三)基本概念第四小节 操作符

内容---语法 上一小节---数据类型 本小节 操作符---流程控制语句---理解函数 操作符--操作数据值的操作符--算术&#xff08;如加减&#xff09;、位操作符、关系、相等--ECMAScript操作符可以适用于很多类型的值--在用于对象时&#xff0c;会先调用对象的valueOf()和&#xff…

el-table数据不显示_数据透视表,一篇就够了

| 函数部分告一段落&#xff0c;这一篇文章助你学懂数据透视表目录&#xff1a;一、创建数据透视表二、数据透视表字段列表值的显示方式三、分析1、切片器2、计算字段3、计算项4、组合四、设计1、分类汇总2、报表布局首先&#xff0c;我们要知道应用数据透视表的前提&#xff1…

app vue 真机运行_使用 HBuilder 将 Vue 项目打包成手机 App

在开发移动端 app 时可以选择原生 app 和 webapp&#xff0c; 原生 app 体验好&#xff0c;开发成本高&#xff0c;相对的 webapp 体验要差&#xff0c;开发成本低。webapp 要求很低&#xff0c;可以说只要会开发web 站就能开发 webapp&#xff0c;这里不讨论怎么选择&#xff…

解决安卓字体偏移:页面整体缩放

在h5中实现一些小标签、按钮的时候&#xff0c;很容易发现部分安卓机型上的字体显示有问题&#xff0c;总会向上偏移2px左右。这是设置padding或line-height无法修复的&#xff0c;与rem也无关&#xff0c;即使在字体大于12px时依然存在。下图来自于网友的分享&#xff0c;从左…

bmp调色板颜色信息重复_如何更改 Linux 终端颜色主题 | Linux 中国

你可以用丰富的选项来定义你的终端主题。-- Seth Kenlon如果你大部分时间都盯着终端&#xff0c;那么你很自然地希望它看起来能赏心悦目。美与不美&#xff0c;全在观者&#xff0c;自 CRT 串口控制台以来&#xff0c;终端已经经历了很多变迁。因此&#xff0c;你的软件终端窗口…

mac 配置java adb环境_MAC 配置android adb命令的环境变量

1,打开终端&#xff0c;敲入命令&#xff1a;sudo vi .bash_profile (如果有密码就为本机登录密码)(如果没有这个文件就会创建一个新的)默认终端目录如图&#xff0c;生成的文件为隐藏文件&#xff1a;(显示隐藏文件命令&#xff1a;defaults write com.apple.finder AppleSho…

mac懒人版_这些实用的Mac软件你迟早会用到,建议收藏!

日常使用mac&#xff0c;遇到不同的问题可以通过不同的应用进行来进行处理&#xff0c;所以称手的工具是必不可少的。然而这些问题也会引导我们去发现更多实用优秀的软件&#xff0c;今天macdown就把自己在使用Mac过程中遇到的一些实用的Mac软件推荐给大家&#xff0c;相信你迟…

Metro风格的Java组合框(JMetro)–重新介绍

我上一篇有关JMetro的文章–我的都市风格的Java外观&#xff08;或外观&#xff09;是关于日历选择器控件的外观 。 我本打算使用Tom Eugelink不错的日历选择器&#xff0c;但是当时我了解到它是由Oracle创建并随Java 8一起交付的&#xff0c;因此出于时间的考虑&#xff08;几…