0 0

Logger的问题?5


请javaeye的同仁帮我解释一下:
private Logger log=Logger.getLogger(this.getClass());
这句代码有什么作用。
我不懂,this.getClass()得到什么?
Logger.getLogger(this.getClass())又得到什么,这样写,有什么好处?

2008年8月07日 20:33

4个答案 按时间排序 按投票排序

0 0

采纳的答案

this.getClass()得到什么?

this 表示当前对象的引用;
getClass() 是 java.lang.Object 中的方法,它返回一个对象的运行时类;
this.getClass() 就是返回当前对象的运行时类。

Logger.getLogger(this.getClass())又得到什么?
他得到一个Logger对象,这个Logger将监视this.getClass()这个运行时类,这个运行时类里面你可能创建了log.info(""), log.debug(""),……等语句,那么这些语句就会根据你预先定义的Logger级别来输出你的日志。就跟你写System.out.print("")一样,不同的是Logger可以根据需要按级别进行日志输出控制。(当然这只是一方面)


Logger.getLogger(this.getClass())这样写,有什么好处?
这样一来你只需要在基类中写一行代码就可以了,子类可以直接使用,这也是复用的原则。
如果你有一个类A,你可以在A类的开始这么写
Logger log=Logger.getLogger(A.class)
这就定死了这个Logger只监视A类本身如果B类继承A类,你创建B类对象时,上面创建的log对象对B是不起作用的。这就就是hard code.

而Logger.getLogger(this.getClass())就不同,你创建B对象时,this就是B对象的引用了,见下列代码:

package com.zhaipuhong.j2se.keywords;

public class ThisKeywordsA {
	protected String className = this.getClass().toString();
	
	public ThisKeywordsA(){
		System.out.println("ThisKeywordsA className == " + className);
	}
}

package com.zhaipuhong.j2se.keywords;

public class ThisKeywordsB extends ThisKeywordsA{
	
	public ThisKeywordsB(){
		System.out.println("ThisKeywordsB className == " + className);
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ThisKeywordsB b = new ThisKeywordsB();
	}

}

运行结果:
ThisKeywordsA className == class com.zhaipuhong.j2se.keywords.ThisKeywordsB
ThisKeywordsB className == class com.zhaipuhong.j2se.keywords.ThisKeywordsB

由于B继承A,A对象首先被创建(请不要考虑抽象类和接口^_^)然后作为B对象的字对象创建B 对象. 此时的Logger就是B对象的一部分,可以为B对象所用。

2008年8月09日 14:51
0 0

1.this.getClass()得到的是一个Class类型的对象,这个getClass方法是Objct里的方法,是所有类都有的
2.Logger.getLogger(B.class);得到的是一个用当前类实例化的Logger对象,用来在输出日志的时候打印出当前的类名

2008年8月08日 08:34
0 0

第一块代码应该是:

class A{
private Logger log=Logger.getLogger(A.class); 
}

class B extends A{
private Logger log=Logger.getLogger(B.class); 
}

B中应该是Logger.getLogger(B.class), 前面的写错了

2008年8月07日 20:50
0 0

1, 应该是受保护的吧:protected Logger log = Logger.getLogger(this.getClass())

2,这种写法一般是用来给有继承关系的类使用的, 一般写法如下:

class A{
private Logger log=Logger.getLogger(A.class); 
}

class B extends A{
private Logger log=Logger.getLogger(A.class); 
}

而用楼主提到的写法:
class A{
protected Logger log=Logger.getLogger(this.getClass());
}

class B extends A{

}

则可以共用log, 这里的this.getClass()就拿当前类型的运行时类,因为B继承A, 所以B中的this.getClass()就相当于B.class , 而A中的就相当于A.class

2008年8月07日 20:48

相关推荐

    C# Logger C# 的日志工具

    在IT行业中,日志记录是软件开发不可或缺的一部分,它帮助开发者追踪程序运行状态,定位问题,以及进行性能分析。在C#编程环境中,C# Logger 是一个受到Apache log4j项目启发的日志工具,旨在提供高效、灵活的日志...

    Burpsuite插件之logger++使用方法1

    **Burpsuite插件之logger++使用方法** Logger++是一款为Burpsuite设计的增强型日志记录插件,由裁决目录开发。... ### Logger++介绍 ...通过熟练使用它的各项功能,用户可以提高工作效率,发现更多潜在的安全问题。

    JSLogger日志记录组件

    1. **多级别日志记录**:JSLogger支持多种日志级别,包括debug、info、warn和error,便于区分不同严重程度的问题。 2. **时间戳记录**:每条日志都带有精确的时间戳,方便分析日志的顺序和时间间隔。 3. **自定义...

    简单的logger类

    本文将详细介绍一个名为“简单的logger类”的实现,它支持自动创建文件来存储日志信息。 首先,我们需要理解日志记录的基本概念。日志记录允许程序员在程序执行过程中记录事件和信息,这有助于调试、性能分析和故障...

    Java Logger Logging 封装

    `Logger`是Java标准库`java.util.logging`包提供的日志工具,它提供了多种级别的日志记录,如`SEVERE`、`WARNING`、`INFO`、`CONFIG`、`FINE`、`FINER`和`FINEST`。本篇文章将深入探讨Java中的`Logger`封装,以及...

    java.util.logging.Logger使用详解

    日志级别定义了日志记录的严重程度,这对于诊断问题非常重要。Java 的日志级别比 log4j 更加详细,具体定义在 `java.util.logging.Level` 类中。 - **SEVERE**: 最高级别,表示非常严重的错误。 - **WARNING**: ...

    qt-logger.rar

    `QLOG_INFO()`宏是Log4Qt提供的便利工具,它会自动插入当前函数名、文件名和行号,使得日志更易读和定位问题。 总之,Log4Qt为Qt应用程序提供了强大而灵活的日志记录能力,通过配置和宏,我们可以轻松地控制日志...

    logger2js-1.0.6

    关于logger2js Version:v1 0 6 创意无限 简单实用 javascript logger&debug toolbox logger2js logger2js是用原生态javascript语言编写的web页面js日志&调试工具箱 主要用于客户端脚本的分析和查错 工具...

    文件Logger Email Logger

    在这个特定的案例中,"文件Logger Email Logger" 提供了两种关键功能:一是记录程序运行时的异常日志,二是通过电子邮件(Email)发送报警通知,帮助开发者及时发现并解决系统问题。 文件Logger是指将程序运行过程...

    Logger日志工具使用

    "Logger日志工具使用"这个主题,指的是如何有效地利用特定的日志库来记录应用程序运行时的信息。在这个Eclipse版本的开源项目中,我们可以找到一个强大的日志工具,它可能是基于Java的log4j、logback或者是其他的...

    fastify框架的logger日志工具

    在Fastify中,日志管理是系统监控、调试和错误追踪的关键部分,而`fastify-logger`正是Fastify官方推荐的日志插件。这个插件允许开发者以结构化的方式记录和处理应用程序的日志,提升开发效率并确保问题排查时有充足...

    带Androidlogger插件的notepad++

    【标题】"带Androidlogger插件的notepad++"是一个专为Android开发者设计的文本编辑器增强版本,它集成了Androidlogger插件,使得在使用Notepad++进行Android代码编辑时,可以方便地查看和分析日志信息。Notepad++...

    开源日志库Logger使用Demo

    总的来说,Logger库为Android开发者提供了一个强大且易用的日志工具,使得日志记录更加直观、高效,对于调试和问题排查具有显著的帮助。如果你正在寻找一种超越Android默认`Log`类的日志解决方案,Logger是一个值得...

    Logger日志文件查看

    这些文件对于诊断问题、跟踪系统行为和优化性能至关重要。"Logger日志文件查看"这一主题主要涉及如何有效查看和分析.log文件,以及可能用到的工具和技术。 1. **日志文件的格式与内容** 日志文件通常包含时间戳、...

    Go-go-logger一个简单的Go日志管理器

    2. 错误处理:当写入日志时遇到问题(如磁盘满、网络故障等),需要有适当的错误处理机制。 3. 性能优化:大量日志可能会对系统性能产生影响,因此在生产环境应考虑日志的压缩和批量发送。 总结起来,“go-logger”...

    Android代码-Logger

    orhanobut logger项目使用 开源地址:https://github.com/open-android/Logger 运行效果 使用步骤 1. 在project的build.gradle添加如下代码(如下图) allprojects { repositories { maven { url ...

    前端开源库-panto-logger

    logger.warn('警告:可能存在潜在问题'); logger.error('发生了错误', new Error('具体的错误信息')); ``` `panto-logger` 还支持自定义日志格式,允许开发者通过插件系统扩展其功能。这使得在不同的项目环境中,...

    Go-go-logger-Go程序的一个简单logger

    在Go语言中,日志处理是非常重要的一部分,它帮助开发者记录程序运行时的状态,以便于调试、监控和问题排查。`go-logger`是专为Go程序设计的一个简单日志库,它提供了一种轻量级的方式来管理和输出日志信息。下面...

    AndroidLogger

    综上所述,AndroidLogger是一款强大的Android开发辅助工具,通过其丰富的功能,可以有效地提高开发者在日志分析、问题排查和设备管理上的效率。如果你是Android开发者,不妨尝试一下这个插件,相信它会成为你日常...

    ruby logger

    在Ruby编程语言中,`logger`模块是标准库的一部分,用于提供日志记录功能。它是一个强大而灵活的工具,可以方便地在应用程序中插入日志记录,帮助开发者跟踪程序运行状态,排查错误,以及进行性能分析。这篇博客文章...

Global site tag (gtag.js) - Google Analytics