摘要:想要看级别的信息,你需要在启动时传入这个系统属性使用与日志现在我们可以试验并更换不同的日志实现,但你的程序代码可以保持不变。我们要做的是用另一个流行的日志实现来替换掉,比如。又一次,我们必须对我们选的每一个日志实现做配置。
使用slf4j库作为你的Java应用日志API层有很多好处,这里我会展示一小部分关于如何使用和配置它的例子。
你可以把slf4j想成一个Java的接口,然后你需要实现这个接口,从而在运行时提供实际的日志记录,例如把日志写到控制台(STDOUT)或者一个文件上等等。每种实现(或成为绑定)都显而易见地有他们自己的方式来配置日志的输出,但是你的应用对实现者并无感知并且一直使用相同的org.slf4j.Logger API。让我们看看如何在实际中使用它。
使用slf4j做简单的日志记录创建基于Maven的工程,在pom.xml中添加如下内容
org.slf4j slf4j-api 1.7.5
现在你可以在你的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); else LOGGER.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简简单单的使用了一个什么也不会做的空实现。
为了看到正确的输出,你应该尝试使用一个简单(simple)的实现,这个实现根本不需要任何配置!只要回到pom.xml然后添加如下配置
org.slf4j slf4j-simple 1.7.5
现在你可以在控制台(STDOUT)看见INFO级别的日志输出了。这个简单的logger会默认显示任何INFO或者更高级别的信息。想要看DEBUG级别的信息,你需要在Java启动时传入这个系统属性(system property)
使用slf4j与Log4j日志-Dorg.slf4j.simpleLogger.defaultLogLevel=DEBUG
现在我们可以试验并更换不同的日志实现,但你的程序代码可以保持不变。
我们要做的是用另一个流行的日志实现来替换掉slf4j-simple,比如Log4j。
org.slf4j slf4j-log4j12 1.7.5
又一次,我们必须对我们选的每一个日志实现做配置。在这个例子中,我们需要一个文件src/main/resources/log4j.properties。
log4j.rootLogger=DEBUG, STDOUT log4j.logger.deng=INFO log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout log4j.appender.STDOUT.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n
重运行你的程序,你会看到同样的输出结果。
使用slf4j和JDK日志JDK实际上带有一个日志包,你可以在pom.xml中替换为另一个日志实现。
org.slf4j slf4j-jdk14 1.7.5
现在JDK日志的配置起来有一点困难。这里不仅需要一个配置文件src/main/resources/logging.properties,你还需要添加一个系统属性
-Djava.util.logging.config.file=logging.properties
这是一个logging.properties的示例
使用slf4j和Logback日志level=INFO
handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=FINEST
deng.level=FINEST
Logback日志实现是一个高质量的实现。如果你想在项目中写认真的代码,你会想要考虑这中方式。还是修改你的pom.xml文件,替换成这样
ch.qos.logback logback-classic 1.0.13
这是一个简单的配置src/main/resources/logback.xml
用slf4j写你自己的日志库%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
如果你正在很多终端用户(END USER)提供Java库,那么让你的项目仅依赖slf4j-api绝对是个好想法,然后让你的用户在他们开发和运营环境中选择任意的日志实现。作为终端用户,他们可以快速地从上面提到的日志库中选择一个,并且从他们自己喜欢的日志实现的特性中受益。
翻译自: How to Configure SLF4J with Different Logger Implementations
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/64620.html
摘要:这篇文章是边听尚硅谷的课程边记的笔记,也是为了之后方便查看,视频链接精彩的故事小张负责一个大型系统的开发,为了监控系统的运行状况,系统中包含大量的语句,为了更好地管理呢,小张决定写一个日志框架对日志进行管理,他设想的日志框架应该包含以下几个 这篇文章是边听尚硅谷的课程边记的笔记,也是为了之后方便查看,视频链接:https://www.bilibili.com/vide... 1. 精彩...
摘要:日志消息,是换行符如果使用作为日志配置文件,还要使用功能,会有以下错误切换日志框架可以按照的日志适配图,进行相关的切换的方式切换为 三、日志 1、日志框架 小张;开发一个大型系统; 1、System.out.println();将关键数据打印在控制台;去掉?写在一个文件? 2、框架来记录系统的一些运行时信息;日志框架 ; zhanglogging.jar; 3、高大上的几个功能?异步...
摘要:深入学习系列三那些年我们用过的日志框架目前常见的日志框架和中文似乎不太好翻译有一下几种即其中,为同一个作者所写。如前面所述,在才被引入,在这之前,并没有官方的日志库供开发者使用。 title: 【Java深入学习系列】三. 那些年我们用过的日志框架date: 2016-10-16 15:32:50 category: java 目前常见的Java日志框架和facades(中文似乎不太好...
摘要:本文要来分享给大家程序员最常用的日志框架组件。没有基础的同学也不要着急,这套教程覆盖了目前所有的日志框架,只要你学,就一定用得到,先收藏,以备不时之需。 作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用、WEB应用以及移动应用。然而日志系统是一个成熟Java应用所必不可少的。在开发和调试阶段,日志可以帮...
阅读 2216·2021-11-25 09:43
阅读 3063·2021-10-14 09:42
阅读 3456·2021-10-12 10:12
阅读 1463·2021-09-07 10:17
阅读 1857·2019-08-30 15:54
阅读 3148·2019-08-30 15:54
阅读 1490·2019-08-30 15:53
阅读 1815·2019-08-29 11:21