如何使用不同的记录器实现配置SLF4J

slf4j库用作Java应用程序日志记录API层有很多好处。 在这里,我将展示一些示例,说明如何与不同的记录器一起使用和配置它。

您可以将slf4j视为Java接口,然后在运行时需要一个实现(仅一个)来提供实际的日志记录详细信息,例如写入STDOUT或文件等。每个日志记录实现(或称为绑定)都将显然,它们具有配置日志输出的方式,但是您的应用程序将保持不可知状态,并始终使用相同的org.slf4j.Logger API。 让我们看看这在实践中是如何工作的。

在简单记录器中使用

pom.xml创建一个基于Maven的项目。

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.5</version></dependency>

现在,您可以像这样在Java代码中使用Logger

package deng;
import org.slf4j.*;
public class Hello {static Logger LOGGER = LoggerFactory.getLogger(Hello.class);public static void main(String[] args) {for (int i = 0; i < 10; i++)if (i % 2 == 0)LOGGER.info("Hello {}", i);elseLOGGER.debug("I am on index {}", i);}
}

上面的代码将编译您的程序,但是当您运行它时,您将看到这些输出。

bash> java deng.Hello
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

这就是说,在运行时,您缺少日志记录“实现”(或记录器绑定),因此slf4j仅使用“ NOP”实现,而没有执行任何操作。 为了正确查看输出,您可以尝试使用根本不需要任何配置的简单实现! 只需返回您的pom.xml并添加以下内容:

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>1.7.5</version></dependency>

现在,您将看到在INFO级别的STDOUT上记录输出。 这个简单的记录器将默认显示任何INFO级别或更高级别的消息。 为了查看DEBUG消息,您需要在Java启动时传递此系统属性-Dorg.slf4j.simpleLogger.defaultLogLevel=DEBUG

在Log4j记录器中使用

现在,我们可以尝试并交换不同的记录器实现,但是您的应用程序代码可以保持不变。 我们需要的是用另一个流行的记录器实现(例如Log4j)替换slf4j-simple

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.5</version></dependency>

同样,我们必须为选择的每个实现配置日志记录。 在这种情况下,我们需要一个src/main/resources/log4j.properties文件。

log4j.rootLogger=DEBUG, STDOUTlog4j.logger.deng=INFOlog4j.appender.STDOUT=org.apache.log4j.ConsoleAppenderlog4j.appender.STDOUT.layout=org.apache.log4j.PatternLayoutlog4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

重新运行您的程序,您应该会看到类似的输出。

JDK实际上附带了一个记录程序包,您可以使用此记录程序实现替换pom.xml

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-jdk14</artifactId><version>1.7.5</version></dependency>

现在,JDK日志记录的配置有点难以使用。 不仅需要一个配置文件,例如src/main/resources/logging.properties ,而且您还需要添加一个系统属性-Djava.util.logging.config.file=logging.properties ,以便它进行选择。起来 这是一个入门的示例:

等级= INFO

handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=FINEST
deng.level=FINEST

结合使用

logback记录器实现是超级dupa质量实现。 如果您打算编写投入生产的严肃代码,则可能需要评估此选项。 再次修改您的pom.xml以替换为:

<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.0.13</version></dependency>

这是开始配置的src/main/resources/logback.xml配置示例。

<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender>
<logger name="deng" level="DEBUG"/>
<root level="INFO"><appender-ref ref="STDOUT" /></root>
</configuration>

使用

如果要提供供大型最终用户使用的Java库,则最好将项目设置为仅依赖slf4j-api ,然后让用户在其开发或运行时环境中选择任何记录器实现。 作为最终用户,他们可以快速选择上述选项之一,并充分利用自己喜欢的日志记录实现功能。

资源资源

  • http://slf4j.org/
  • http://logging.apache.org/log4j/1.2/
  • http://docs.oracle.com/javase/7/docs/technotes/guides/logging/
  • http://logback.qos.ch/

参考: 如何在A Programmer's Journal博客上与JCG合作伙伴 Zemian Deng 一起使用不同的记录器实现配置SLF4J 。

翻译自: https://www.javacodegeeks.com/2013/08/how-to-configure-slf4j-with-different-logger-implementations.html

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

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

相关文章

Presto 学习

Presto 基础知识与概念学习可以参考这些博客&#xff1a; presto 0.166概述 https://www.cnblogs.com/sorco/p/7060166.html Presto学习-presto介绍 https://blog.csdn.net/paicMis/article/details/78516475 Presto必知必会 https://blog.csdn.net/jiangshouzhuang/article/de…

4月24号

今天老师讲了好多理论&#xff0c;首先讲了一个程序运行多次就是多个进程&#xff0c; from multiprocessing import Processimport time import osdef task(): print(%s:父进程%s%(os.getpid(),os.getppid())) time.sleep(3)if __name____main__: pProcess(targettas…

撸个微信小程序的省市区选择器

起因 微信小程序虽然已经有现成的封装好的省市区选择器给开发者使用&#xff0c;然鹅不幸的是&#xff0c;微信地址库的数据和公司用的地址库数据很难一一对上&#xff0c;那就只能撸起袖子自己写个组件了。 最终效果 思维导图 主要代码 组件 region-picker.js /* region-pic…

docker build 变量_DockerFile 设置环境变量

镜像的Layer 在docker docs里面有一句话: We’ve already seen that Docker images are read-only templates from which Docker containers are launched. Each image consists of a series of layers. Docker makes use of union file systems to combine these layers into…

计算机巧用剪纸做画册教案,大班绘画剪纸制作的教案总结

大班绘画剪纸制作的教案总结第一篇&#xff1a;写生画&#xff1a;目标&#xff1a;培养幼儿细微的观察能力&#xff0c;进一步引导幼儿能抓住人物的典型特征&#xff0c;大胆表现。准备&#xff1a;不同脸型人物的范画两张。过程&#xff1a;一、导入。1&#xff0e; 组织游戏…

python之路_day6

本节内容&#xff1a;面向对象编程介绍为什么要用面向对象进行开发&#xff1f;面向对象的特性&#xff1a;封装、继承、多态类、方法、引子 你现在是一家游戏公司的开发人员&#xff0c;现在需要你开发一款叫做<人狗大战>的游戏&#xff0c;你就思考呀&#xff0c;人狗作…

Netty 简介

上文我们介绍了NIO和BIO的区别&#xff0c;NIO相对于BIO是一次很大的进步。但我们平时开发中并不会使用NIO。这是因为NIO在开发中存在以下问题 NIO的类库和API繁杂&#xff0c;使用麻烦&#xff0c;需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等&am…

简单性与鲁棒性–在锁定文件处理中展示

今天&#xff0c;我们将讨论在设计不足和过度设计之间保持简单&#xff0c;愚蠢&#xff08;KISS&#xff09;和鲁棒性的设计价值之间的冲突。 我们正在编写一个批处理Java应用程序&#xff0c;需要确保在服务器上一次最多运行一个实例。 一个团队成员有一个很好的想法&#x…

mssql导出数据到mysql_MSSQL数据导出到MYSQL

MSSQL数据导出到MYSQL花了一天时间把MSSQL里的数据导出到MYSQL&#xff0c; 好麻烦&#xff0c;二个数据库都是阿里云买的云服务器。先上阿里云控制面板&#xff0c;备份下MSSQL数据库&#xff0c;下载备份下来&#xff0c;在本地电脑上还原2.本地MSSQL数据库上执行select * in…

演示教学法在计算机基础课程中的应用,演示教学法在《计算机基础》课程中的应用...

科 学 论坛演示教学法在《计算机基础》课程中的应用撩淹阳辉(湖南铁路科技职业技术学院 湖南 株洲 412006)摘 要&#xff1a;文章通过谈了笔者自己对《计算机基础》课程中演示教学方法的思考&#xff0c;明确了在《计算机基础》课程中运用演示教学的实效&#xff0c;但同时针对…

MUI调用原生自定义方法实现计算缓存与清空缓存

由于项目需要最近在做webapp开发用的是MUI框架&#xff0c;自己本来是做原生开发的&#xff0c;在开发的时候有一个需求是实现计算缓存和清除缓存的功能&#xff0c;原生java方法实现轻轻松松&#xff0c;网上代码一大把&#xff0c;不过是webapp倒是不好搞&#xff0c;MUI自己…

mysql dump 表数据 shell 脚本

userubuntu:~$ cat mysql_jd_espc_dump.sh ## 这段语句为导出语句mysqldump -uroot -ppassword espc --ignore-tableespc.contract --ignore-tableespc.signature --ignore-tableespc.invitation > ~/dump_1.sql## 下面是其他定制业务&#xff0c;不需要关注 sed s/MyISAM/…

Java中的多重继承与组合vs继承

有时我写了几篇有关Java 继承 &#xff0c; 接口和组成的文章。 在这篇文章中&#xff0c;我们将研究多重继承&#xff0c;然后学习组成优于继承的好处。 Java中的多重继承 多重继承是创建具有多个超类的单个类的能力。 与其他一些流行的面向对象的编程语言&#xff08;例如C …

mysql改date格式_mysql数据库修改添加Date格式列的方法

import java.sql.*;import java.text.DateFormat;//数据库的查询public class SelectTable {String dbDriver"com.mysql.jdbc.Driver";String dbUrl"jdbc:mysql://localhost:3306/sss";//根据实际情况变化String username"root";String password…

开源|蚂蚁金服开源AntV F2:一个专注于移动,开箱即用的可视

小蚂蚁说&#xff1a;AntV 是蚂蚁金服全新一代数据可视化解决方案&#xff0c;主要子产品包括 G2、G6、F2。此前我们已经相继发布过AntV的相关开源消息与版本迭代&#xff0c;包括《蚂蚁金服开源&#xff1a;数据驱动的高交互可视化图形语法G2》&#xff0c;《开源 | 蚂蚁金服开…

数学第一单元计算机思维导图,七年级下册数学第一单元思维导图图片

七年级下册数学第一单元思维导图图片_七年级数学下册思维导图第五章 相交线与平行线思维导图???邻补角? ???两条直线相交??对顶角???????相交线????????两条直线被第??三垂条直直线所截(三线八角)?????内同 同错旁 位角内 角角相 交 线 与 平 行…

DMA(Direct Memory Access)简介

什么是DMA&#xff08;Direct Memory Access&#xff09; DMA绕过CPU&#xff0c;在内存和外设之间开辟了一条 “隧道” &#xff0c;直接控制内存与外设之间的操作&#xff0c;并完全由硬件控制。这样数据传送不经过cpu&#xff0c;不需要保护、恢复CPU现场等一系列操作&#…

Puppeteer入门初探

本文来自网易云社区作者&#xff1a;唐钊最近在看 node 爬虫相关的一些东西&#xff0c;我记得还是很久以前常用的 node 爬虫工具还是 superagengtcherrio,他们的思路是通过发起 http 请求然后截取 respone 的内容&#xff0c;但是随着前端mvvm等框架的盛行&#xff0c;现在更多…

访问量大如何增加服务器,服务器流量过大原因及解决方法

造成网站服务器流量过大的原因&#xff1a;1.网站规模较大(比如门户网站、网络商城等)&#xff0c;即网站本身访问量需求大&#xff0c;查看网站的Page View值、Hits值、日流量都很高。2.网站页面设计不合理&#xff0c;页面中包含大图片或音频、视频文件等文件&#xff0c;导致…

关于VUE项目地图开发中大量点标记绘制一些总结

问题说明 在地图开发中&#xff0c;当地图中绘制大量的标记点后&#xff0c;无论是拖动或者缩放&#xff0c;都会感觉到明显的卡顿现象。&#xff08;一般超过800个点后就比较明显了&#xff09;.在平时的工作业务中&#xff0c;由于公司的实时监控页面需要展现5000-20000车辆…