Logging java.util.logging import java.util.logging.*; public class Main { public static void main(
Java中给项目程序添加log主要有三种方式,一使用JDK中的java.util.logging包,一种是log4j,一种是commons-logging。 这三种方式的区别如下: Java.util.logging,JDK标准库中的类,是JDK 1.4 版本之后添加的日志记录的功能包。 log4j,最强大的记录日志的方式。 在E:\Test下可以看到输出的日志文件Log0.log java.util.logging包中类的关系图如下: 参考文章: http://blog.csdn.net/dl88250/article/
JetBrains 宣布 IntelliJ 平台将完全停止使用 Log4j,并切换到 java.util.logging 作为标准日志框架。 所有这些要求都包含在作为 JDK 一部分的标准日志 API (java.util.logging) 中。 为了避免错误的安全警报以及减少潜在的攻击面,IntelliJ 平台删除 Log4j 组件并切换到使用 java.util.logging 作为标准日志框架,这些更新将在 2022.1 中发布。 此外,由于大量第三方插件(直接或间接)使用了 Log4j,IntelliJ 将发布 Log4j API 的存根实现,将日志输出重定向到 java.util.logging,此功能源自 SLF4J 项目。
JDK的java.util.logging包 第三方日志工具(commons-logging/slf4j,log4j/logback) JDK的java.util.logging包 JDK1.4引入了java.util.logging
从 Tomcat 6.0开始,Tomcat 内的Apache Commons Logging 日志库默认使用 java.util.logging 日志框架实现,如果你想要使用其他的日志框架,只需用对应框架的 jar 替换掉Tomcat 原来的jar即可,日志框架的选择支持以下三种方式: 使用系统自带的logging API: java.util.logging 使用java servlet规范提供的logging (默认) 由于 JDK 自带的 java.util.logging实现提供的日志管理能力极为有限,不支持应用级别日志管理。 因此,Tomcat 默认的日志库对java.util.logging API 进行了重新实现,这些实现被称为 “JULI” ,里面包含了一些特有的定制类,其中最重要的是一个自定义的LogManager 删除掉 $CATALINA_HOME/conf/ 目录下的 logging.properties 文件防止 java.util.logging 生成 0 字节大小的日志文件。
SLF4J Simple Logging Facade for Java(SLF4J)用作各种日志框架(例如 java.util.logging,logback,log4j)的简单外观或抽象,允许最终用户在部署时插入所需的日志框架 例如,要从 java.util.logging 切换到 log4j,只需将 slf4j-jdk14-1.8.0-beta2.jar 替换为 slf4j-log4j12-1.8.0-beta2.jar。 此外,logback-classic 本身实现了 SLF4J API,因此可以在 logback 和其他日志框架(如 log4j 或 java.util.logging(JUL))之间来回切换。 总结 我建议直接选择 SLF4J 而不是 Log4j,commons logging,logback 或 java.util.logging。
3、SLF4J Simple Logging Facade for Java(SLF4J)用作各种日志框架(例如java.util.logging,logback,log4j)的简单外观或抽象,允许最终用户在部署时插入所需的日志框架 例如,要从java.util.logging切换到log4j,只需将slf4j-jdk14-1.8.0-beta2.jar替换为slf4j-log4j12-1.8.0-beta2.jar SLF4J不依赖于任何特殊的类装载机制 此外,logback-classic本身实现了SLF4J API,因此可以在logback和其他日志框架(如log4j或java.util.logging(JUL))之间来回切换。 总结 我建议直接选择SLF4J而不是Log4j,commons logging,logback或java.util.logging 1、在开源库或内部库中使用SLF4J,将使其独立于任何特定的日志记录实现
1. java.util.logging ? JDK自带日志组件,使用方式简单,不需要依赖第三方日志组件。 支持将日志打印到控制台,文件,甚至可以将日志通过网络打印到指定主机。 允许用户使用具体的日志实现,如:log4j,Avalon LogKit,java.util.logging。 https://www.slf4j.org/ slf4j被设计成一个日志框架,为应用程序提供日志API,具体的日志实现可以交给log4j,java.util.logging,logback。
每一个Java程序员都知道日志对于任何一个Java应用程序,尤其是服务端程序是至关重要的,而很多程序员也已经熟悉各种不同的日志库如java.util.logging、Apache log4j、logback 在这篇文章中,我们将学习为什么使用SLF4J比log4j或者java.util.logging要优秀。自从上次我写Java程序员的10个日志技巧已经有一段时间了,我已经不记得我写的关于日志的一切了。 让我们再看看几个使用SLF4J而不是log4j、logback或者java.util.logging的理由。 SLF4J对比Log4J,logback和java.util.Logging的优势 正如我之前说的,在你的代码中使用SLF4J写日志语句的主要出发点是使得你的程序独立于任意特定的日志类库,依赖于特定类可能需要不同与你已有的配置 总结 总结这次说的,我建议使用SLF4J的而不是直接使用 Log4j, commons logging, logback 或者 java.util.logging 已经足够充分了。
如果Web应用程序使用的是java.util.logging日志,那么它们并不相互独立,这是因为java.util.logging是由JAVA系统中的Bootstrap ClassLoader来加载的, logs" pattern="common" resolveHosts="false"/> Tomcat默认使用JULI日志系统(可以参考官网文档修改成使用log4j),它是对默认的JDK日志java.util.logging
Facade for Java (SLF4J) serves as a simple facade or abstraction for various logging frameworks (e.g. java.util.logging 从官网的描述看,slf4j只是一种日志的门面和日志抽象框架,而java.util.logging,log4j,logback都是slf4j抽象框架的具体实现,只要调用slf4j的API就可以集成任何的实现框架在一起
logger.info("This is sample info statement"); SLF4J能用于现有的日志框架如Log4j、Commons-logging、java.util.logging <artifactId>slf4j-log4j12</artifactId> <version>1.7.2</version> </dependency> SLF4J结合JUL (java.util.logging
所以就需要更高级的日志记录 API(比如 Log4j 和 java.util.logging)。 它们可以把大量的日志信息保存到文件中,并且控制每个文件的大小,如果满了,就存储到下一个,方便查找。 这个级别是基于 Log4j 的,和 java.util.logging 有所不同,后者提供了更多的日志级别,比如说 SEVERE、FINER、FINEST。 ? 04、为什么选择 Log4j 而不是 java.util.logging java.util.logging 属于原生的日志 API,Log4j 属于第三方类库,但我建议使用 Log4j,因为 Log4j java.util.logging 的日志级别比 Log4j 更多,但用不着,就变成了多余。 Log4j 的另外一个好处就是,不需要重新启动 Java 程序就可以调整日志的记录级别,非常灵活。 先来看一下 java.util.logging 的使用方式: package com.itwanger; import java.io.IOException; import java.util.logging.FileHandler
针对 logging.properties 中的 java.util.logging 配置级别 一些库在 Confluence 中被用来使用 java.util.logging 而不是 log4j 或者 这些库包括: com.sun.jersey org.apache.shindig net.sf.ehcache Confluence 的 logging.properties 文件设置将 java.util.logging
3. java.util.logging:官方的尝试 在Log4j和Logback蓬勃发展的同时,Java官方也没有闲着。 从Java 1.4版本开始,官方引入了自己的日志框架——java.util.logging(简称JUL)。
java.util.logging (JUL) JDK1.4开始,通过java.util.logging提供日志功能。 强烈建议不要直接使用日志实现组件(logback、log4j、java.util.logging),理由前面也说过,就是无法灵活替换日志库。 groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.21</version> </dependency> slf4j + java.util.logging 从图中应该可以看出,无论你的老项目中使用的是common-logging或是直接使用log4j、java.util.logging,都可以使用对应的桥接jar包来解决兼容问题。 groupId> <artifactId>log4j-over-slf4j</artifactId> <version>1.7.12</version> </dependency> slf4j兼容java.util.logging
日志框架 java.util.logging (JUL) JDK1.4 开始,通过 java.util.logging 提供日志功能。 强烈建议不要直接使用日志实现组件(logback、log4j、java.util.logging),理由前面也说过,就是无法灵活替换日志库。 groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.21</version> </dependency> slf4j + java.util.logging 从图中应该可以看出,无论你的老项目中使用的是 common-logging 或是直接使用 log4j、java.util.logging,都可以使用对应的桥接 jar 包来解决兼容问题。 <artifactId>log4j-over-slf4j</artifactId> <version>1.7.12</version> </dependency> slf4j 兼容 java.util.logging
其中使用了 slf4j作为桥梁将日志从 java.util.logging 记录到 log4j.
slf4j是Java的简单日志门面API,很多日志实现都可以与之集成,如JDK logging (java.util.logging), log4j和logback。 此外,logback-classic 本身实现了 SLF4J API,因此可以在 logback 和其他日志框架(如 log4j 或 java.util.logging(JUL))之间来回切换。
)java.io.OutputStreamWriter(OutputStream) 类图: 8.Bridge(桥接) 作用:将抽象部分与其实现部分分离,使它们都可以独立地变化 JDK中体现:java.util.logging java.util.Collections#synchronizedList(List) 类图: 11.Façade(外观) 作用: (1)封装一组交互类,一致地对外提供接口 (2)封装子系统,简化子系统调用 JDK中体现:java.util.logging