博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Logger之Logger.getLogger(CLass)
阅读量:4617 次
发布时间:2019-06-09

本文共 2245 字,大约阅读时间需要 7 分钟。

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

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

1 private static Logger logger = Logger.getLogger(A.class);
  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类的代码修改

private static Logger logger = Logger.getLogger(LoggerTest.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()打印语句了

转载于:https://www.cnblogs.com/2227556036Daily/p/9396326.html

你可能感兴趣的文章
设计模式学习笔记——Prototype原型模式
查看>>
pom.xml里有红叉报错的解决办法
查看>>
Perl last和next的用法区别
查看>>
Selenium 管理 Cookies
查看>>
exceptionfunction[LeetCode]Permutations
查看>>
bzoj 4595 激光发生器
查看>>
multi cookie & read bug
查看>>
js时间转换
查看>>
(转载) Android Studio你不知道的调试技巧
查看>>
队列实现霍夫曼树
查看>>
关于微信公众平台测试号配置失败的问题
查看>>
【NOIP2001】统计单词个数
查看>>
linux常用端口
查看>>
异常处理
查看>>
/proc/uptime详解
查看>>
如何建立合适的索引?
查看>>
acwing 651. 逛画展
查看>>
Vijos P1243 生产产品 (单调队列优化DP)
查看>>
iOS常用第三方库 -转
查看>>
Android布局学习
查看>>