素材牛VIP会员
java中使用log4j如何不用每次调用都声明一下?
 轻***却  分类:Java代码  人气:799  回帖:10  发布于6年前 收藏

每次写个新的类,就要在下面声明下:

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

这样的话不是很麻烦吗?有没有什么办法,把Logger设置成可以静态调用的类,直接调用info,error等方法,同时还可以打印出当前类、线程号等信息?

 标签:java

讨论这个帖子(10)垃圾回帖将一律封号处理……

Lv2 入门
Br***23 产品经理 6年前#1

使用lombok框架比较好。可以避免写这样的代码。

Lv6 码匠
su***an JAVA开发工程师 6年前#2

lombok++

在每个类加上一个Log相关的注解即可。

Lv3 码奴
赵***6 Linux系统工程师 6年前#3

看看这个 https://segmentfault.com/a/11...

Lv5 码农
lo***ge 其它 6年前#4

这主要是为了日志的灵活性,针对不同的包类可以设置不同的日志级别,你可以自己定义个类

public class Xlog{
    public static void debug(String s){
        Class caller = sun.reflect.Reflection.getCallerClass();
        Logger logger = LoggerFactory.getLogger(caller);
        logger.debug(s);
    }
}

然后直接用Xlog的这个静态方法写日志

Lv3 码奴
那***s JS工程师 6年前#5

看看aop的教程,例子一般就是log,以后需要打log的方法上面@一下就好了

Lv3 码奴
谁***的 交互设计师 6年前#6

Java8的接口默认方法,
搞个接口ILogger,
包含各级日志方法,
方法内调用 getLogger然后输出日志,
参考kotlin的anko库的AnkoLogger,
https://github.com/Kotlin/ank...

或者固定的静态方法,
通过stack trace判断调用者的类再输出日志,

Lv3 码奴
gu***di 软件测试工程师 6年前#7

可以用 lombok https://projectlombok.org 不仅可以解决你这个问题,还可以简化相当多的代码书写

Lv4 码徒
风***2 站长 6年前#8

安利给你lombok

Lv6 码匠
許***愿 Linux系统工程师 6年前#9

你大可以简单封装一下实现你要的目的,比如建个类把Logger封装进去,暴露几个静态接口出来。至于为什么很多代码书写的时候写成private static Logger logger = Logger.getLogger(Test.class);,其实主要是为了提高日志的灵活性、准确性等。

Lv4 码徒
骑***火 技术总监 6年前#10

声明log是因为他可以定义不同的logger name可以通过logger name定制自己的输出方式, 比如level, appender...等

如果你的日志是以相同的方式处理那你完全可以声明公共的静态 log 对象, 需要的地方使用该log也不存在重复声明的情况了.
如:

import static xxx.GlobalLogs.log;

log.debug("...");
log.info("...");
//...

当然你还可以使用 lombok 的方式来简化你的代码.

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取