Logger LOG = LoggerFactory.getLogger()

由Logger的名称可以知道这句的意思是用Logger工厂获取Logger实例,但是不明白其中的原理,看了看源码:

LoggerFactory中的getLogger方法,返回一个以name命名的静态绑定的实例,而这个name一般以Logger实例所在的类命名,如通过类名.Class.getName()获取。

  public static Logger getLogger(String name) {
    ILoggerFactory iLoggerFactory = getILoggerFactory();
    return iLoggerFactory.getLogger(name);
  }

ILoggerFactory的接口实例在编译时内部绑定LoggerFactory,这个接口中只有一个public Logger getLogger(String name)方法,根据参数名称返回适当的实例

看看这个getILoggerFactory()方法

  public static ILoggerFactory getILoggerFactory() {
    if (INITIALIZATION_STATE == UNINITIALIZED) {
      INITIALIZATION_STATE = ONGOING_INITIALIZATION;
      performInitialization();
    }
    switch (INITIALIZATION_STATE) {
      case SUCCESSFUL_INITIALIZATION:
        return StaticLoggerBinder.getSingleton().getLoggerFactory();
      case NOP_FALLBACK_INITIALIZATION:
        return NOP_FALLBACK_FACTORY;
      case FAILED_INITIALIZATION:
        throw new IllegalStateException(UNSUCCESSFUL_INIT_MSG);
      case ONGOING_INITIALIZATION:
        // support re-entrant behavior.
        // See also http://bugzilla.slf4j.org/show_bug.cgi?id=106
        return TEMP_FACTORY;
    }
    throw new IllegalStateException("Unreachable code");
  }
}

很明显这是返回ILoggerFactory的实例,用于调取getLogger方法。在Logger接口中规定了日志的输出的方法,根据相应的参数需要设置就可以在控制台看到输出的日志信息了。

时间: 2024-10-17 08:14:52

Logger LOG = LoggerFactory.getLogger()的相关文章

java中的 private Logger log=Logger.getLogger(this.getClass());

this.getClass()得到什么? this 表示当前对象的引用: getClass() 是 java.lang.Object 中的方法,它返回一个对象的运行时类: this.getClass() 就是返回当前对象的运行时类. Logger.getLogger(this.getClass())又得到什么? 他得到一个Logger对象,这个Logger将监视this.getClass()这个运行时类,这个运行时类里面你可能创建了log.info(""), log.debug(&qu

java如何LOG打印出日志信息

<dependency>--> <!--<groupId>org.slf4j</groupId>--> <!--<artifactId>slf4j-log4j12</artifactId>--> <!--<version>1.6.4</version>--></dependency> private static final Logger LOG = LoggerFac

logback logback.xml常用配置详解(一)&lt;configuration&gt; and &lt;logger&gt;

logback 配置详解(一)<configuration> and <logger> 一:根节点<configuration>包含的属性:scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true.scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒.当scan为true时,此属性生效.默认的时间间隔为1分钟.debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看l

struts2配置log

Struts2初始化时,首先就会初始化log,看源码如下: 1 public void init(FilterConfig filterConfig) throws ServletException { 2 InitOperations init = new InitOperations(); 3 Dispatcher dispatcher = null; 4 try { 5 FilterHostConfig config = new FilterHostConfig(filterConfig)

如何利用aop的环绕消息处理log, 以及各种坑的记录

本文链接: https://www.cnblogs.com/zizaiwuyou/p/11667423.html 因为项目里有很多地方要打log, 所以决定改为AOP统一处理, 好不容易整好了, 特此记录一下: 一, 新建项目, 添加注解类和切面类 pom.xml文件如下: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/

java log记录(@Aspect)

切面方法说明: @Aspect -- 作用是把当前类标识为一个切面供容器读取 @Pointcut -- (切入点):就是带有通知的连接点,在程序中主要体现为书写切入点表达式 @Before -- 标识一个前置增强方法,相当于BeforeAdvice的功能 @AfterReturning -- 后置增强,相当于AfterReturningAdvice,方法退出时执行 @AfterThrowing -- 异常抛出增强,相当于ThrowsAdvice @After -- final增强,不管是抛出异常

微信公众号之订阅号(已认证)实现oauth2授权登录详细步骤介绍

一: 简介 通过 微信公众平台---->权限接口 可以得知 微信的订阅号是没有授权登录接口的,只有服务号才有该权限.这点微信公众平台在多处反复强调 最终的事实是:微信订阅号是可以实现授权登录的! 二:具体实现步骤: 1. 首先在 微信公众平台(https://mp.weixin.qq.com/) [开发]----> [基本配置]----->[服务器配置]完成基本的配置信息 URL: 这里的地址我写的是我们HTML5项目的某个Controller或Servlet的地址,例如 http://

Java - 微信公众号 - 消息回复

1.开发接入 (1)更改入门教程中的Controller:  注(验证是属于GET,然而交互是属于POST) @RequestMapping(value = "/getMsg", method = {RequestMethod.GET, RequestMethod.POST}) public void getMsg(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException

Java企业微信开发_09_身份验证之移动端网页授权(有完整项目源码)

注: 源码已上传github: https://github.com/shirayner/WeiXin_QiYe_Demo 一.本节要点 1.1 授权回调域(可信域名) 在开始使用网页授权之前,需要先设置一下授权回调域.这里瞬间想到之前做JSSDK的时候,也设置过一个域名.二者本质上都是设置可信域名. 当用户授权完毕之后,请求将重定向到此域名(或者子域名)下的执行者(jsp页面或者servlet等).如何设置授权回调域,请见第二节. 1.2 获取Code https://open.weixin.