由声明logger谈起

最近看一些old fasion的代码,发现仅仅一个logger的声明,就很有意思。

以SLF为例,

首先是推荐的写法:

private final static Logger logger = LoggerFactory.getLogger(MyClass.class);

然后按词解读:

private :保持私有,不给外部类机会;
final   :保持不变,不给修改的机会;
static  :保持静态,节省开销;

至于

LoggerFactory.getLogger(MyClass.class);

我们能看到某些使用getClass() 替代的方法。

这里有些利弊:

getClass(): 不能使用static修饰,Java初始化顺序导致;

MyClass.class : 不能动态显示子类归属的log;

Ref: 1   2  3  4

——————————————分割线——————————————

刚才跟同事讨论了一下,好像关于是否static有很大争议 ,各有各的好处。

然后,对于某些共享类,特别是没有自己log的module,怎么加log也很有意思。

看过之前的某个遗留代码,为了拿className费尽周折啊,不过这种有并发问题,权作拓展思路吧

    public static void info(String msg) {
    	if(useLog4j)
    	{
    		instance.log4jLogger=org.apache.log4j.Logger.getLogger(getClassName());
    		instance.log4jLogger.info(getMethodName() +" : "+msg);
    	}
    	else
    	{
        	instance.logger.logp(Level.INFO, getClassName(), getMethodName(), msg);
    	}
    }
     private static String getClassName() {
        Throwable t = CusLogger.e.fillInStackTrace();
        StackTraceElement elements[] = t.getStackTrace();
        StackTraceElement element = elements[2];
        return element.getClassName();
    }
时间: 2024-08-30 17:48:08

由声明logger谈起的相关文章

简化版可用于多线程的logger

logger 嘛要高效,要简单.废话不多话. GitHub 地址 https://github.com/goldli/logger 本文所说的logger使用System.Logger做为NameSpace; 一.对象说明    Dll里logger共有两类对象    1.Logger 日志输出控件类.负责启用与停用日志功能.    2.Log 日志记录类.    二.启用/停用日志    Logger.Instance.Start();    Logger.Instance.Stop().Di

boost.log要点笔记

常用简写: namespace logging = boost::log; namespace src = boost::log::sources; namespace expr = boost::log::expressions; namespace sinks = boost::log::sinks; namespace attrs = boost::log::attributes; namespace keywords = boost::log::keywords; 要点: 结构图要牢记在

通过LOGBACK实现每个类、包或自定义级别

项实现LOGBACK对每个包或者类或者通过自定义级别的方式实现自定义输出的日志进入制定的文件.查阅了很多资料,都没有找到行之有效的解决方案,直到看到了这篇文章http://www.360doc.com/content/14/1015/18/8072791_417222724.shtml  找到了解决方案. 解决方案大体思路:正常来讲配置好LOGBACK后,在代码页面使用private static Logger logger = LoggerFactory.getLogger(*.class);

代码生成利器:IDEA 强大的 Live Templates

Java 开发过程经常需要编写有固定格式的代码,例如说声明一个私有变量, logger 或者 bean 等等.对于这种小范围的代码生成,我们可以利用 IDEA 提供的 Live Templates 功能.刚开始觉得它只是一个简单的 Code Snippet ,后来发现它支持变量函数配置,可以支持很复杂的代码生成.下面我来介绍一下 Live Templates 的用法. 基本使用 IDEA 自带很多常用的动态模板,在 Java 代码中输入 fori ,回车就会出现 for (int i = 0;

Java 写 Log

1. 一个最基本的例子 使用Logging框架写Log基本上就三个步骤 引入loggerg类和logger工厂类 声明logger 记录日志 下面看一个例子 //1. 引入slf4j接口的Logger和LoggerFactory import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class UserService { //2. 声明一个Logger,这个是static的方式,我比较习惯这么写. private fina

Java程序员修炼之道 之 Logging(2/3) - 怎么写Log

1. 一个最基本的例子 使用Logging框架写Log基本上就三个步骤 引入loggerg类和logger工厂类 声明logger 记录日志 下面看一个例子 //1. 引入slf4j接口的Logger和LoggerFactory import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class UserService { //2. 声明一个Logger,这个是static的方式,我比较习惯这么写. private fina

java日志框架slf4j与log4j的使用与配置

日志记录自然是非常重要的,但恐怕能记住slf4j与log4j等日志框架配置的人就很少了,这个东西不难,只是配置好后很少会去动它,开发新项目一般也是从其他项目拷贝,或者参照文档 废话不多说,先说log4j,使用log4j只要简单的几步 首先,弄到log4j的jar包,maven工程配置以下依赖就行,或者,从阿里的maven仓库下载jar包,添加到工程的"build path" <dependency> <groupId>log4j</groupId>

idea快速添加打印日志语句

神器虽好,logger的插件却比较难找,网上找了个替代方案是通过live template,快速插入日志打印语句. 目前能做到的是: 1,声明logger变量: 2,在方法入口处打印方法名和变量. 实现1: 在live template中新增名为logs的template group,然后新增live template,abbreviation填入自己喜欢的缩写,我这里是logf.Applicable context选择statement&expression&declaration,Te

IDEA 环境设置

IDEA环境设置 任何事物都有两面性,如何用好才是关键.IDEA为我们提供了丰富的功能,但不代表默认的配置就适合于你.我们应当根据自己的条件.需求合理的配置,从而驾驭好这匹悍马.让它成为我们编程的利器,而非障碍.下面就一些常用的配置做个说明. IDEA 运行环境设置 1.1 设置IDEA使用的JDK 1.2 JVM options设置 1.3 IDEA system,config文件位置调整 IDEA Settings 2.1 使用Eclipse的按键设置 2.2 使用子句安装的Maven,配置