Logger之Logger.getLogger(CLass)

掌握 Java 领域 log4j,优化日志记录流程 在 Java 开发中,日志记录是一项至关重要的任务。它不仅有助于开发人员调试代码、定位问题,还能在系统运行过程中提供关键的信息记录,方便后续的系统监控和分析。log4j 作为 Java 领域中一款经典且功能强大的日志框架,被广泛应用于各种 Java 项目中。本文的目的就是全面介绍 log4j 的相关知识,从基础概念到实际应用,帮助读者深入理解 log4j,并掌握如何使用它来优化日志记录流程。范围涵盖 log4j 的核心原理、配置方法、代码实现以及在不同场景下的应用等方面。 阅读详情

  之前一直在使用System.out.println()来调试.但是用这种方式开发项目部署到生产环境,会因为众多的控制台输出降低应用的性能.这时候Log4J就成为可平衡开发和部署应用的利器了.

  在项目中使用Log4J并不是一件困难的事情,简单粗暴的方式就是在每个类A中声明一个Logger私有属性

 private static Logger logger = Logger.getLogger(A.class);

这样虽然简单,但是带来有两个问题:

 1.增加系统开销-每个使用Log4J的类都增加了对象属性.

 2.麻烦:每个使用Logger的类都要重复声明上面Logger对象.

其实不难发现可以使用重构手法,声明一个公用的类Log4jUtils,处理Logger的公共操作.

不过呢,问题不这么简单.首先要解决一个问题,Logger.getLogger(A.class)中的A.class有什么用?A.class可以不可以瞎写?

先做个试验,先简单配置log4j.properties文件

#日志级别,输出目的地
log4j.rootLogger=debug,stdout

log4j.appender.stdout=org.apache.log4j.Conso
leAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#输出格式
log4j.appender.stdout.layout.ConversionPattern=%c %d{ABSOLUTE} %5p %c{1}:%L - %m%n

新建一个测试类

import org.apache.log4j.Logger;

/**
 * Created by li on 2015/5/24.
 */

public class LoggerTest {
    private static Logger logger = Logger.getLogger(Object.class);

    public static void main(String[] args) {
        logger.debug("Hello World!");
    }
}

查看结果:


结合log4j.properties配置的
log4j.appender.stdout.layout.ConversionPattern=%c %d{ABSOLUTE} %5p %c{1}:%L - %m%n
不难知道%c输出所属的类目,通常就是所在类的全名。但是我们追踪的其实是LoggerTest类,结果返回的却是java.lang.Object,简直就是误导.

这时候将LoggerTest类的代码修改

private static Logger logger = Logger.getLogger(LoggerTest.class);

运行结果变为:

要的结果终于出现了.至此,明白了getLogger(class)的参数用途:追踪产生此日志的类.


现在就出现了新的问题:若要使用一个类Log4jUtils来专门处理Logger对象的声明等操作,那么如何处理getLogger(class)的参数问题?

也就是如何在Log4jUtils得到调用logger对象的类型.


解决这个困难可以是使用Java的反射机制

看下面的代码:

类Log4jUtils:

/**
 * Created by li on 2015/5/23.
 */
public class Log4JUtils{

    private static Logger logger =  null;

    public static Logger getLogger(){
       if (null == logger){
            //Java8 废弃了Reflection.getCallerClass()
           logger = Logger.getLogger(Reflection.getCallerClass().getName());
           logger.debug("调用者类名"+Reflection.getCallerClass().getName());
       }
        return logger;
    }
}



修改类LoggerTest的代码:

/**
 * Created by li on 2015/5/24.
 */

public class LoggerTest {
//    private static Logger logger = Logger.getLogger(LoggerTest.class);

    public static void main(String[] args) {
        Log4JUtils.getLogger().debug("Hello World!");
    }
}
运行结果:


看到这个结果就很爽了.以后项目就可以放弃使用System.out.println()打印语句了.






ESP32锂电池电量检测实战:从引脚选择到低功耗优化(附完整电路图) 本文详细介绍了ESP32锂电池电量检测的实战方案,从ADC引脚选择到低功耗优化,提供完整的电路图和代码实现。通过MOS管智能开关和深度睡眠技术,显著降低静态功耗至0.5μA,提升设备续航能力。适合物联网开发者解决电量检测中的常见问题。 阅读详情

相关推荐

网络设备心跳线带宽高导致虚拟化平台不稳定的问题处理

本文记录了网络设备心跳线带宽高导致虚拟化平台不稳定的问题处理一例。

forestqq的博客 2199

logging模块学习笔记:logger 对象、日志等级

logger:日志对象,logging模块中最基础的对象,用logging.getLogger(name)方法进行初始化,name可以不填。通常logger的名字我们对应模块名,如聊天模块、数据库模块、验证模块等。 logger对象的常用方法有: setLevel:设置日志等级 日志等级分别有以下几种: CRITICAL : 'CRITICAL', ERROR : 'ERROR',...

weixin_33862188的博客 2972

MyBatis-Plus找不到注解@Table

问题 MyBatis-Plus 引入 mybatis-plus-boot-starter 依赖版本为 3.4.3.4,添加注解 @Table 报错: @Table(name = "t_order") 解决方法 MyBatis-Plus 新版本表注解方式已改为: @TableName("t_order")

邓邓子的博客 2230

Java日志管理:Logger.getLogger()

第一、Logger.getLogger()和LogFactory.getLog()的区别    1.Logger.getLogger()是使用log4j的方式记录日志;     2.LogFactory.getLog()则来自apache的common-logging包。 common-logging组件:        Jakarta Commons Logging (JCL)提供的是一个日志(

6449

java:log4j:private static Logger logger = Logger.getLogger(MstNinushiAction.class); 什么意思?

后面的.class有什么作用? Logger.getLogger(Class clazz) 语法 **.class是将你要加入日志的类加进入 假如你的myclass这个类需要加日志信息就在 private static Logger logger = Logger.getLogger(myclass.class); 这是获取一个myclass类的loggermyclass内定义的日志信息就能...

不花的花和尚的博客 6158

private static Logger logger =Logger.getLogger(AssembleMsgService.class)什么意思?

作为一个新人中的菜鸡,最近在看一个项目的代码其中有这么一段看得我很是费解 public class AssembleMsgService { private static Logger logger = Logger.getLogger(AssembleMsgService.class); 1、Logger logger = logger.getlogger(); 看到这个会想到这是log4j下的一个方法,log4j是一个开源项目,通过在项目中使用Log4J我们可以控制日志信息输出到控制台、文件、GUI

qq_43842093的博客 1633

LoggerLogger.getLogger(CLass)使用

  之前一直在使用System.out.println()来调试.但是用这种方式开发项目部署到生产环境,会因为众多的控制台输出降低应用的性能.这时候Log4J就成为可平衡开发和部署应用的利器了.   在项目中使用Log4J并不是一件困难的事情,简单粗暴的方式就是在每个类A中声明一个Logger私有属性 [html...

y_8023的博客 3790

log4j Logger.getLogger .class参数作用

public class LoggerTest { // Object.class主要是跟踪输出日志的类 private static Logger logger = Logger.getLogger(Object.class); public static void main(String[] args) { logger.debug("Hello World!"); } } 如果要重构,可以声明一个公共类处理公共操作。 参考文章:

ycoder的博客 287

Java日志管理:Logger.getLogger()和LogFactory.getLog()的区别(详解Log4j

第一、Logger.getLogger()和LogFactory.getLog()的区别    1.Logger.getLogger()是使用log4j的方式记录日志;     2.LogFactory.getLog()则来自apache的common-logging包。 common-logging组件:        Jakarta Commons Logging (JCL)提供的是一...

JavaCrazyer的ItEye(codewu.com)技术博客 2134

log4j - Logger.getLogger(Class) 参数作用

在项目中使用Log4J并不是一件困难的事情,简单粗暴的方式就是在每个类A中声明一个Logger私有属性 [html] view plain copy private static Logger logger = Logger.getLogger(A.class);   这样虽然简单,但是带来有两个问题:  1.增加系统开销

永远的北极光 2万+

java中Logger.getLogger(Test.class)

<br />log4的使用方法: <br />log4是具有日志记录功能,主要通过一个配置文件来对程序进行监测<br />有两种配置方式:一种程序配置,一种文件配置<br />有三个主要单元要了解,Logger,appender,layout.<br />logger是进行记录的主要类,appender是记录的方式,layout是记录的格式<br />logger七种日志级别:debug,info,warn,error,fatal,all,off<br />最常用的应该是debug()和info();而wa

班轻扬 2141

Logger.getLogger()

之前一直在使用System.out.println()来调试.但是用这种方式开发项目部署到生产环境,会因为众多的控制台输出降低应用的性能.这时候Log4J就成为可平衡开发和部署应用的利器了。     在项目中使用Log4J并不是一件困难的事情,简单粗暴的方式就是在每个类A中声明一个Logger私有属性     private static Logger logger = Logger.

云华100的专栏 877

Java日志:Logger的简单入门

编写Java程序是实现日志的方式有很多,而作为Java自带的日志,java.util.logging.Logger的使用在某种程度上比其他几种要方便一些。今天就讲一下怎么初步的去使用logger。 简单的日志记录 首先要获取一个Logger对象,这个对象是通过Java自带的一个静态方法public static getLogger(String name)获得,参数name是日志的名字。 Logger logger=Logger.getLogger("日志"); 然后输出日志,输出日志可以通过log方法来

weixin_45136445的博客 7280

Logger logger = Logger.getLogger(this.getClass())

logger log4j.Logger

Monster_WangXiaotu的博客 3259

Logger logger = Logger.getLogger(Class clazz)获取不得的问题。

因为有多个同名的Logger类,在测试的时候没注意就直接选了第一个,发现不能用,以为是JAR包的问题,重新导一遍也不能,配置文件检查过也不行,最后发现是类用错了。 要打印日志用的是log4j包里的Logger...

ss的博客 5693

南瓜种子分选振动机(step+exb+说明书)全套技术资料100%好用.zip

南瓜种子分选振动机(step+exb+说明书)全套技术资料100%好用.zip

上一篇: Centso 安装ECShop
下一篇: centos 安装 mysql 5.6和workbench
lixwcqs
博客等级 码龄15年 23粉丝 72原创
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值