Java logger变量用static修饰的说明

探讨了在Java中使用static修饰符管理日志的原因,分析了static修饰符在日志记录中的作用,特别是在static方法调用和内存管理方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在QQ群中和诸多Java同行讨论得出以下结论:

我觉得日志用static修饰的思考策略应该是:
因为日志长期要用,而且,类的方法(不排除存在static方法)肯能被其他地方使用,
那么对于这类static方法,也是需要记录日志的,不能等new出来在记载,那么久漏掉这块日志了,所以,长期记录该类日志,要把logger做成static形式。

什么时候static无需修饰logger,就在于,该类没有static修饰的方法,另外,这个logger和普通成员变量还是有区别,普通成员变量比如String,创建比较简单快速,logger是创建了一系列类,logger占用内存比String变量大。所以,用static修饰,而普通变量不用static修饰。

频繁创建的相同的对象 用static 比如数据库连接字符串之类的 虽然对于较大的对象在初始化时需要时间 但是跑起来之后 就可以节约很多时间的 创建变量 分配内存 都需要时间 虽然很少 但是频率较高的话用static 会减少开支的 单例模式中可以看得出来 在初始化的第一次调用 或者直接程序启动的时候就创建 。

代码如下

package com.rh.test;

import org.apache.log4j.Logger;

public class TestLogger {
	public static final Logger loggerx = Logger.getLogger(TestLogger.class);
	public static final Logger loggery = Logger.getLogger(TestLogger.class);
	public static void main(String[] args) {
		System.out.println(loggerx);
		System.out.println(loggery);
	}
}

这个测试代码,说明了,logger是多例的,一个类一个logger。

logger底层源码实现:

    /**
     * {@inheritDoc}
     */
    public Logger getLogger(final String name) {
        return new NOPLogger(this, name);
    }

可以看出,logger是多例的。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值