首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Log4J记录器应该声明为瞬态吗?

在讨论Log4J记录器是否应该声明为瞬态之前,我们需要了解Log4J记录器的基本概念。Log4J是Apache的一款开源日志记录工具,它提供了一个灵活的日志记录机制,可以记录日志信息到不同的输出设备,如控制台、文件、网络等。

在Java EE应用程序中,记录器通常作为一个单例对象使用,以确保在整个应用程序中只有一个实例存在。这样可以确保日志记录的一致性和可管理性。如果将记录器声明为瞬态,那么每个请求都会创建一个新的记录器实例,这将导致日志记录的不一致性,并且可能会影响性能和资源管理。

因此,建议将Log4J记录器声明为单例对象,而不是瞬态对象。这可以通过在应用程序中使用静态变量或单例模式来实现。此外,为了确保记录器的配置正确,建议在应用程序启动时对其进行初始化,并在应用程序结束时进行销毁。

总之,将Log4J记录器声明为瞬态并不是一个好主意,因为这将导致日志记录的不一致性和性能问题。相反,建议将其声明为单例对象,并在应用程序启动时进行初始化。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

为什么日志要private static final

private static final Log logger = LogFactory.getLog(SpringProperties.class); 对于使用PMD的任何人来说,如果日志记录器没有声明为静态的和...具体地说,LoggerIsNotStaticFinal规则简单地说日志应该明为静态的和final的。我也喜欢确保他们是私人的。...为什么开发java.util.logging包的人将他们的API建立在Log4j上,却忽略了其中一些最有用的部分?哦,好吧。 现在说正题。为什么声明日志记录器是私有的、静态的和final的良好实践呢?...日志记录器是一个内部实现细节,因此它应该是私有的。对于类的所有实例,您只需要一个日志记录器,因此是静态的。并且记录器不能被替换,因此是最终的。所以如果这是好的,有什么不好的(至少在我看来)?...为什么子类应该从横切关注点的超类了解内部实现细节?无论如何,虽然这是一个愚蠢的小咆哮,但是当您扩展一个声明像这样的受保护日志记录器的超类时,它确实很烦人。

2.1K20

log4j.xml示例_log4j.xml示例配置

这将覆盖所有记录器级别的配置,仅当您要为所有记录器禁用一些较低级别的记录时才使用此配置。 在上述情况下,即使将任何记录器级别定义为调试,也将禁用所有跟踪和调试日志。    ...  “ debug”属性用于切换内部log4j日志语句的打印。 您应该将其保留为false,以避免通过log4j框架进行批量日志记录。 如果将其更改为true,则将获得以下类似的日志。    ...下一部分是记录器,我们也可以有多个记录器。 “名称”属性用于定义将使用此记录器的软件包。 请注意,如果一个类有多个记录器匹配项,那么将使用最特定的一个。    ...xml根记录器 (log4j xml root logger)   Finally root logger needs to be defined, this is the default level...最后,需要定义根记录器,这是默认级别,如果找不到记录器匹配项,则使用附加程序。

1.1K00
  • ​可观测性之Log4j2优雅日志打印

    简介对于Log4j2大家应该都不是很陌生,听说最多的应该是2021年年底出现的安全漏洞了,不过最让大家头痛的应该不仅仅是这个安全漏洞的处理,安全漏洞通过升级最新的依赖版本即可快速解决,平时在使用过程中遇到过比较多的问题应该就是日志...Log4j再后来就有了软件开发者Ceki Gulcu设计出了一套日志库也就是log4j并捐献给了Apache帮助简化日志打印。...Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了显著的改进,并提供了Logback中可用的许多改进,同时修复了Logback体系结构中的一些固有问题。...了解了日志组件的历史,可以看到最后log4j2集众家之长,那应该如何优雅的使用log4j2日志呢,可以继续往下看。...根记录器和其他记录器之间的主要区别是: 1.根记录器没有名称属性。

    1.3K30

    Log4j2优雅日志打印

    简介 对于Log4j2大家应该都不是很陌生,听说最多的应该是2021年年底出现的安全漏洞了,不过最让大家头痛的应该不仅仅是这个安全漏洞的处理,安全漏洞通过升级最新的依赖版本即可快速解决,平时在使用过程中遇到过比较多的问题应该就是日志...Log4j 再后来就有了软件开发者Ceki Gulcu设计出了一套日志库也就是log4j并捐献给了Apache帮助简化日志打印。...Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了显著的改进,并提供了Logback中可用的许多改进,同时修复了Logback体系结构中的一些固有问题。...了解了日志组件的历史,可以看到最后log4j2集众家之长,那应该如何优雅的使用log4j2日志呢,可以继续往下看。...根记录器和其他记录器之间的主要区别是: 1.根记录器没有名称属性。

    1.8K40

    我敢打赌绝大多数程序员没有这么深入研究过 System.out.println()!

    # System.out.println VS 日志记录组件(Log4j 等) Log4J 具有多种记录级别,如果我们正在编写一个小程序,只是为了实验/学习目的那么使用 System.out.println...但当我们开发生产质量软件时,我们应该注意到应该使用记录组件(log4j 等),并且应该避免使用 System.out.println。 为什么? 灵活性:log4j记录器提供了多种记录级别。...可重构性:log4j 只需一个参数更改即可关闭所有日志记录。...粒度:在应用程序中,每个类都可以有不同的记录器并相应地进行控制。 实用性:在 System.out 中限制重定向消息的选项,但是如果是记录器(like log4j),则可以提供多种选项。...所以我们不应该使用 System.out.println 进行日志记录和调试(logging and debugging) # 静态导入来缩短 System.out.println 有时我们觉得 System.out.println

    70620

    【转】最详细的Log4J使用教程一、入门实例二、Log4J基本使用方法三、Spring中使用Log4J四、实战经验总结

    在apache网站:jakarta.apache.org/log4j 可以免费下载到Log4j最新版本的软件包。...举例:Testlog4.main(TestLog4.java:10) 2.2 在代码中使用Log4j 获取记录器 使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。...其语法为:public static Logger getLogger( String name);通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。...读取配置文件 当获得了日志记录器之后,第二步将配置Log4j环境,其语法为: BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。...:缓存操作和数据库操作 发现在缓存操作中有一行打印日志的语句使用了JSON库,例如JSON.toJsonString(obj),这个对象非常复杂,导致一个读取缓存的操作可以达到300ms左右,而实际上应该

    4.2K20

    Java基础系列(三十三):日志进阶

    我们的日志记录器都是原始日志记录器(命名为“”)的子类,而原始日志记录器将会把所有等于或高于INFO级别的记录发送到控制台。然而,我们并不想两次看到这些记录。...鉴于这个原因,应该将userParentHandlers属性设置为false。...boolean isLoggable(LogRecord record) 在这个方法中,可以利用自己喜欢的标准,对日志记录进行分析,返回true表示这些记录应该包含在日志中。例如。...叨叨两句 虽说讲了这么多日志的内容,但是日常的开发中,我们使用Logging的频率并不高,它比起Slf4j和Log4j来说过于简单,但是它可以帮我们去理解更深层次日志的使用,后面我们会在开发实战篇--常用日志框架中详细讲解...Slf4j和Log4j,敬请期待~

    74650

    常用日志框架(Log4j,Slf4j,Logback)之间到底有啥区别

    Log4j Apache Log4j 是一个非常古老的日志框架,并且是多年来最受欢迎的日志框架。 它引入了现代日志框架仍在使用的基本概念,如分层日志级别和记录器。...2015 年 8 月 5 日,该项目管理委员会宣布 Log4j 1.x 已达到使用寿命。 建议用户使用 Log4j 1 升级到 Apache Log4j 2。...除了这些功能外,它还允许基于 lambda 表达式对日志语句进行延迟评估,为低延迟系统提供异步记录器,并提供无垃圾模式以避免由垃圾收集器操作引起的任何延迟。...Logback logback 是由 log4j 创始人设计的又一个开源日志组件,作为流行的 log4j 项目的后续版本,从而替代 log4j。...我强烈建议,Java 中的任何新代码开发都应该使用 SLF4J 来记录日志。

    25K23

    从 Java 到 Kotlin,再从 Kotlin 回归 Java

    看起来您应该显式地声明类型(如T?),以满足由Java方法填充的所有Kotlin变量。 ? 类字面量 ? 在使用Log4j或Gson之类的Java库时,类字面量是很常见的。...我是新来的,有静态成员可用?”他问。 “没有。我是面向对象的,而静态成员不是面向对象的,” Kotlin回答。 “好吧,但我需要用于 MyClass 日志记录器,该怎么办?”...你可以把日志记录器放在伴生对象中,” Kotlin 如此解释。 “明白了。是这样?” ? “对!...明白?这很简单。” 我很喜欢对象声明的概念——单例是种很有用的模式。从从语言中去掉静态成员就不太现实了。我们在Java中已经使用了若干年的静态日志记录器,这是非常经典的模式。...这是想回归 C++ 语法?对于我来说,这让人感到困惑。 这里最具争议的话题是默认封闭。可能是因为 Java 程序员过度使用了继承,可能你应该在允许类被继承之前想想清楚。

    1.8K40

    一文读懂常用日志框架(Log4j、SLF4J、Logback)有啥区别

    4、Log4j Apache Log4j是一个非常古老的日志框架,并且是多年来最受欢迎的日志框架。 它引入了现代日志框架仍在使用的基本概念,如分层日志级别和记录器。...2015年8月5日,该项目管理委员会宣布Log4j 1.x已达到使用寿命。 建议用户使用Log4j 1升级到Apache Log4j 2。...除了这些功能外,它还允许基于lambda表达式对日志语句进行延迟评估,为低延迟系统提供异步记录器,并提供无垃圾模式以避免由垃圾收集器操作引起的任何延迟。...6、Logback logback是由log4j创始人设计的又一个开源日志组件,作为流行的log4j项目的后续版本,从而替代log4j。 Logback的体系结构足够通用,以便在不同情况下应用。...我强烈建议,Java中的任何新代码开发都应该使用SLF4J来记录日志。

    3.5K41

    忽视日志吃大亏,手把手教你玩转 SpringBoot 日志

    在生产环境中,应该关闭 TRACE 级别的日志记录,以避免输出过多无用信息。 DEBUG 是用于输出程序中的一些调试信息,通常用于开发过程中。...像 TRACE 一样,在生产环境中应该关闭 DEBUG 级别的日志记录。 INFO 用于输出程序正常运行时的一些关键信息,比如程序的启动、运行日志等。通常在生产环境中开启 INFO 级别的日志记录。...当我们的 com.zhanfu.child.Slave 打印日志时,当然会使用后者(更精确)的设置,但前者的设置还使用?...它采用了异步记录器,利用了多线程来提高性能。 Log4j2在性能方面更加强大。它使用了异步记录器和多线程,还引入了RingBuffer数据结构和Disruptor库来加速日志事件的传递和处理。...但如果需要轻量级的日志框架或者只需要基本的日志记录功能,Logback也是一个不错的选择 但如果我们同时引用了这两者,会报错?还是会使用其中的某一个?

    3.3K51

    全网最全、最细致的Java日志框架以及门面技术。

    Log4j 4.1 Log4j简介 Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、CUI组件,甚至可以是套接口服务器、NT的事件记录器。... 还需要有log4j日志框架的配置文件(这个配置文件在main-->resources下)并且这个配置文件需要声明为 log4j.properties #...8.2 Log4j2特征 性能提升:在多线程场景中,异步记录器的吞吐量比Log4j 1.x 和 Logback高18倍,延迟低。...此外,过滤器还可以与记录器关联。与Logback不同,Log4j2可以在任何这些情况下使用通用的Filter类。 插件架构:Log4j2 使用插件模式配置组件。...AsyncAppender 应该是在它引用 Appender 之后配置,因为如果在Appender的时候出现异常,对应用来说是无法感知的。

    3.5K30

    深入了解Java对象序列化

    指定类的成员变量都坚持除了成员声明为瞬态和静态;他们不坚持。在下面的例子中,A类实现了Serializable。B类继承类;也因此,B是可序列化的。B类包含一个引用类C ....观察到的任何变化的静态和瞬态变量不存储在这个过程。有许多问题与序列化过程。正如我们所看到的,如果一个超类声明可序列化的,所有的子也会序列化的类。这意味着,如果一个继承B继承了C继承D…将序列化的对象!...说,如果我们有50个字段,我们不想坚持?我们必须将这50字段声明为瞬态!在反序列化过程中可能出现类似的问题。如果我们想反序列化只有五个字段而不是恢复所有10个字段序列化之前和存储?...} } 输出: Book [bookId=6, isbn=123-456-789, title=Graph Theory, publisher=PHI, author=ND] 注意:任何字段声明为瞬态对外化没有影响...因为我们可以控制领域坚持什么,不借助readExternal和writeExternal方法,使与瞬态场non-persistable修饰符也是无关紧要的。

    93680

    Java日志框架学习--LogBack和Log4j2--下

    : 日志的记录器,主要用于存放日志对象,也可以定义日志类型、级别。...Log4j2简介 Apache Log4j 2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些问题。...在多线程场景中,异步记录器的吞吐量比Log4j 1.x和Logback高18倍,延迟低。 自动重新加载配置 与Logback一样,Log4j2可以在修改时自动重新加载其配置。...此外,过滤器还可以与记录器关联。与Logback不同,Log4j2可以在任何这些情况下使用通用的Filter类。 插件架构 Log4j使用插件模式配置组件。...这时候,我们应该考虑使用无锁的异步记录器(AsyncLogger)。 AsyncLogger方式 AsyncLogger才是log4j2实现异步最重要的功能体现,也是官方推荐的异步方式。

    1.1K10

    《手把手教你》系列基础篇(八十七)-java+ selenium自动化测试-框架设计基础-Log4j 2实现日志输出-上篇(详解教程)

    1.简介 Apache Log4j 是一个非常古老的日志框架,并且是多年来最受欢迎的日志框架。 它引入了现代日志框架仍在使用的基本概念,如分层日志级别和记录器。...除了这些功能外,它还允许基于 lambda 表达式对日志语句进行延迟评估,为低延迟系统提供异步记录器,并提供无垃圾模式以避免由垃圾收集器操作引起的任何延迟。...虽然采用xml风格进行配置,依然包含三个组件,分别是 Logger(记录器)、Appender(输出目的地)、Layout(日志布局)。...这不同的级别的含义大家都很容易理解,这里就简单介绍一下: trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出。...重大错误,这种级别你可以直接停止程序了,是不应该出现的错误么!不用那么紧张,其实就是一个程度的问题。

    36330

    还不了解,日志框架

    项目 JUL 2002 Log4j 作为 Apache 基金会的一员,Apache 希望将 Log4j 引入 jdk 不过被 sun 公司拒绝了 随后,sun 模仿 Log4j,在 jdk1.4...,可以 更灵活的控制日志的输出过程 Log4j组件 Log4J 主要由:Loggers日志记录器 Appenders输出端 Layout日志格式化器 Loggers日志记录器 控制日志的输出级别与日志是否输出...; public class Log4jTest { // 定义 log4j 日志记录器 public static final Logger LOGGER = Logger.getLogger...日志输出格式 Logger 日志记录器对象 根据context环境(配置文件,LoggerFactory.getLogger()生成一个 日志记录器对象,主要用于存放日志对象,定义日志类型、级别...Slf4j + Log4j2应该是未来的大势所趋 可最近出的一个bug 估计,也危险了☠ Slf4j + log4j2 整合案例: pom.xml 添加依赖: 使用 slf4j 作为 日志门面,需要使用

    14810
    领券