再谈springboot启动为什么不打印日志?

首先看下日志的启动流程,说一下前提,日志启动是基于spring事件机制,包括dubbo服务导出的启动也是基于spring事件机制再谈springboot启动为什么不打印日志?_第1张图片
我们看看spring事件监听器的定义

/*
 * Copyright 2002-2016 the original author or authors.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.springframework.context;

import java.util.EventListener;

/**
 * Interface to be implemented by application event listeners.
 * Based on the standard {@code java.util.EventListener} interface
 * for the Observer design pattern.
 *
 * 

**As of Spring 3.0, an ApplicationListener can generically declare the event type * that it is interested in. When registered with a Spring ApplicationContext, events * will be filtered accordingly, with the listener getting invoked for matching event * objects only.** * * @author Rod Johnson * @author Juergen Hoeller * @param the specific ApplicationEvent subclass to listen to * @see org.springframework.context.event.ApplicationEventMulticaster */ @FunctionalInterface public interface ApplicationListener extends EventListener { /** * Handle an application event. * @param event the event to respond to */ void onApplicationEvent(E event); }

图片截图不全,我们看看源码中的注释,就可知道了。我们声明一个事件类型,spring启动完成后,会进行分发事件,我们匹配自己定义的事件类型。接下来看看启动流程,当然是关于日志的加载流程
再谈springboot启动为什么不打印日志?_第2张图片
再谈springboot启动为什么不打印日志?_第3张图片
再谈springboot启动为什么不打印日志?_第4张图片
再谈springboot启动为什么不打印日志?_第5张图片
再谈springboot启动为什么不打印日志?_第6张图片
再谈springboot启动为什么不打印日志?_第7张图片
日志系统类有个静态代码块,当类加载的时候,静态代码块也会被加载,静态代码块如下
再谈springboot启动为什么不打印日志?_第8张图片
在这里插入图片描述
题外话,判断一个对象是否是同一个对象?1.由同一个classloader加载,并且是一个同类名。俩个classloader加载一个类,在虚拟机内部会认为是俩个类。
综上所述,是加载日志组件的流程。接下来我们自定义个日志配置文件,然后看看我们的自定义的xml文件是否生效,以及模拟控制台不打印日志的情况
首先演示我们的配置是生效的
再谈springboot启动为什么不打印日志?_第9张图片
接下来把依赖日志文件更改成log4j2,pom文件以及xml文件如下
再谈springboot启动为什么不打印日志?_第10张图片
xml文件如下




    
        
            
        
    

    
        
            
        
    

先来我们来看配置是否生效
再谈springboot启动为什么不打印日志?_第11张图片
说明配置已经生效。看看打印日志的模式样式是否与原来有区别
再谈springboot启动为什么不打印日志?_第12张图片
现在模拟不打印日志的情况,log4j2基础组件截图发下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
不打印情况下,主要是修改log4j2的配置文件,如下图

再谈springboot启动为什么不打印日志?_第13张图片

再谈springboot启动为什么不打印日志?_第14张图片
综上所述,我们知道因为整体项目使用maven依赖,都是在类路径下,可能再引用其他模块情况下,覆盖了我们项目的配置,配置文件中没有输出到控制台,所以出现了不打印的情况。个人能力有限,表述不清请指正。

你可能感兴趣的:(编程错误)