如何获取logback 获取iploggingsystem

博客分类:
这几天用了用Logback感觉挺爽的,性能上比log4j 1改善了不少performance(据说前些天出来的log4j 2 又相对于Logback在performance上又提升了不少),而且功能还是很强大的。
提到Logback就不得不了解SLF4j(Sample Logging Facade for java) Java简单的日志门面,从它的命名我们不难看出它是一个通用的logging接口,它兼容了Log4j 1 (Log4j 2 现在不得而知)、java.util.logging和Jakarta Commons Logging,这几个比较流行的日志框架,而Logback是SLF4j的默认实现。
使用Logback需要使用的jar:
logback-core-1.0.13.jar
logback-classic-1.0.13.jar
slf4j-api-1.7.5.jar
jcl-over-slf4j-1.7.5.jar
将common-logging.jar与slf4j对接,然后由Logback输出
Logback会在classpath 中按照如下顺序读取配置文件:
logback.groovy
logback-test.xml
logback.xml
&?xml version="1.0" encoding="UTF-8" ?&
&configuration debug="false"&
&property name="logdir" value="D:/log"&&/property&
&!-- 控制台 --&
&appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"&
&pattern&%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n&/pattern&
&/encoder&
&/appender&
&!-- 出错日志 appender
&appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender"&
&rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"&
&!-- 按天回滚 daily --&
&!-- logdir 在maven profile里配置 --&
&fileNamePattern&${logdir}/errorlog-%d{yyyy-MM-dd}.log&/fileNamePattern&
&!-- 日志最大的历史 60天 --&
&maxHistory&60&/maxHistory&
&/rollingPolicy&
&pattern&%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n&/pattern&
&/encoder&
&/appender&
&!-- 访问日志 appender
&appender name="COMMON" class="ch.qos.logback.core.rolling.RollingFileAppender"&
&Encoding&UTF-8&/Encoding&
&file&${logdir}/commonlog.log&/file&
&!--按每小时滚动文件,如果一个天内达到10M(取决于fileNamePattern中的%d{yyyy-MM-dd_HH}还是%d{yyyy-MM-dd})也会回滚文件,回滚文件将会被压缩成zip格式 --&
&rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"&
&!-- 按天回滚 daily --&
&fileNamePattern&${logdir}/commonlog-%d{yyyy-MM-dd}.log&/fileNamePattern&
&timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"&
&maxFileSize&10M&/maxFileSize&
&/timeBasedFileNamingAndTriggeringPolicy&
&/rollingPolicy&
&pattern&%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n&/pattern&
&/encoder&
&/appender&
&root level="info"/&
&!--错误日志--&
&logger name="error" level="info"&
&appender-ref ref="STDOUT"/&
&appender-ref ref="ERROR"/&
&logger name="com.sdw.soft" level="debug"&
&appender-ref ref="STDOUT"/&
&appender-ref ref="COMMON"/&
&/configuration&
为了方便日志记录而又不手动重复一遍又一遍写private static final Logger logger = LoggerFactory.logger(XXX);
一下使用了AOP偷了懒。
* @Author: Sonicery_D
@Component
public class LoggerUtils {
private static final Logger logger = LoggerFactory.getLogger(LoggerUtils.class);
@Pointcut(value="execution(* com.sdw.soft..*Service.*(..))")
public void printLog(){
@Before(value="printLog()")
public void beforeExecute(JoinPoint jp){
String methodName = jp.getSignature().getName();
String className = jp.getTarget().getClass().getName();
StringBuffer sb = new StringBuffer("类["+className+"]-方法["+methodName+"]开始执行------");
int i = 1;
for(Object obj : jp.getArgs()){
if(obj instanceof String){
sb.append("arg"+i+"="+obj.toString()+",");
logger.info("AOP 日志拦截---{}",sb.toString());
Sonicery_D
浏览: 18416 次
来自: 北京
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Spring Boot中logback配置文件加载过程8 months ago检测和获取日志系统,检测的顺序定义在SYSTEMS中,最终通过反射创建LogbackLoggingSystem实例。// org.springframework.boot.logging.LoggingSystem
public static LoggingSystem get(ClassLoader classLoader) {
String loggingSystem = System.getProperty(SYSTEM_PROPERTY);// null
if (StringUtils.hasLength(loggingSystem)) {
if (NONE.equals(loggingSystem)) {
return new NoOpLoggingSystem();
return get(classLoader, loggingSystem);
for (Map.Entry&String, String& entry : SYSTEMS.entrySet()) {
if (ClassUtils.isPresent(entry.getKey(), classLoader)) {
return get(classLoader, entry.getValue());
throw new IllegalStateException("No suitable logging system located");
* A System property that can be used to indicate the {@link LoggingSystem} to use.
public static final String SYSTEM_PROPERTY = LoggingSystem.class.getName();
private static final Map&String, String& SYSTEMS;
Map&String, String& systems = new LinkedHashMap&String, String&();
systems.put("ch.qos.logback.core.Appender",
"org.springframework.boot.logging.logback.LogbackLoggingSystem");
systems.put("org.apache.logging.log4j.core.impl.Log4jContextFactory",
"org.springframework.boot.logging.log4j2.Log4J2LoggingSystem");
systems.put("java.util.logging.LogManager",
"org.springframework.boot.logging.java.JavaLoggingSystem");
SYSTEMS = Collections.unmodifiableMap(systems);
然后在ApplicationEnvironmentPreparedEvent之后进行logback的初始化。private void onApplicationEnvironmentPreparedEvent(
ApplicationEnvironmentPreparedEvent event) {
if (this.loggingSystem == null) {
this.loggingSystem = LoggingSystem
.get(event.getSpringApplication().getClassLoader());
initialize(event.getEnvironment(), event.getSpringApplication().getClassLoader());
* Initialize the logging system according to preferences expressed through the
* {@link Environment} and the classpath.
* @param environment the environment
* @param classLoader the classloader
protected void initialize(ConfigurableEnvironment environment,
ClassLoader classLoader) {
new LoggingSystemProperties(environment).apply();
LogFile logFile = LogFile.get(environment);
if (logFile != null) {
logFile.applyToSystemProperties();
initializeEarlyLoggingLevel(environment);
initializeSystem(environment, this.loggingSystem, logFile);
initializeFinalLoggingLevels(environment, this.loggingSystem);
registerShutdownHookIfNecessary(environment, this.loggingSystem);
重点看配置文件检测的过程。private void initializeWithConventions(
LoggingInitializationContext initializationContext, LogFile logFile) {
// 获取logback自己支持的配置文件
String config = getSelfInitializationConfig();
if (config != null && logFile == null) {
// self initialization has occurred, reinitialize in case of property changes
reinitialize(initializationContext);
// 如果没有则检测spring相关的logback配置
if (config == null) {
config = getSpringInitializationConfig();
if (config != null) {
loadConfiguration(initializationContext, config, logFile);
loadDefaults(initializationContext, logFile);
logback自身配置文件的生效顺序。// org.springframework.boot.logging.logback.LogbackLoggingSystem
protected String[] getStandardConfigLocations() {
return new String[] { "logback-test.groovy", "logback-test.xml", "logback.groovy",
"logback.xml" };
通过这里可以看到spring boot中支持的logback配置文件格式,就是在logback自配置文件(logback-test.xml, logback.xml等)基础上文件名后面加了“-spring”,如logback-test-spring, logback-spring等。/**
* Return the spring config locations for this system. By default this method returns
* a set of locations based on {@link #getStandardConfigLocations()}.
* @return the spring config locations
* @see #getSpringInitializationConfig()
protected String[] getSpringConfigLocations() {
String[] locations = getStandardConfigLocations();
for (int i = 0; i & locations.length; i++) {
String extension = StringUtils.getFilenameExtension(locations[i]);
locations[i] = locations[i].substring(0,
locations[i].length() - extension.length() - 1) + "-spring."
+ extension;
return locations;
此外,Spring Boot使用JUnit时,如果没有配置SpringBootTest注解,日志系统根本不会得到初始化,会使用org.slf4j.impl.StaticLoggerBinder获取,如果在test/resource下面存在logback-test.xml则会生效,否则就使用系统默认的配置。如果配置了置SpringBootTest注解,则SpringBoot会正常的初始化,日志系统会正常加载。参考赞赏还没有人赞赏,快来当第一个赞赏的人吧!9收藏分享举报文章被以下专栏收录{&debug&:false,&apiRoot&:&&,&paySDK&:&https:\u002F\u002Fpay.zhihu.com\u002Fapi\u002Fjs&,&wechatConfigAPI&:&\u002Fapi\u002Fwechat\u002Fjssdkconfig&,&name&:&production&,&instance&:&column&,&tokens&:{&X-XSRF-TOKEN&:null,&X-UDID&:null,&Authorization&:&oauth c3cef7c66aa9e6a1e3160e20&}}{&database&:{&Post&:{&&:{&isPending&:false,&contributes&:[{&sourceColumn&:{&lastUpdated&:,&description&:&&,&permission&:&COLUMN_PUBLIC&,&memberId&:2393062,&contributePermission&:&COLUMN_PUBLIC&,&translatedCommentPermission&:&all&,&canManage&:true,&intro&:&&,&urlToken&:&pr0grammer&,&id&:19382,&imagePath&:&v2-7addec665cb82.jpg&,&slug&:&pr0grammer&,&applyReason&:&0&,&name&:&编程之路&,&title&:&编程之路&,&url&:&https:\u002F\u002Fzhuanlan.zhihu.com\u002Fpr0grammer&,&commentPermission&:&COLUMN_ALL_CAN_COMMENT&,&canPost&:true,&created&:,&state&:&COLUMN_NORMAL&,&followers&:1090,&avatar&:{&id&:&v2-7addec665cb82&,&template&:&https:\u002F\u002Fpic1.zhimg.com\u002F{id}_{size}.jpg&},&activateAuthorRequested&:false,&following&:false,&imageUrl&:&https:\u002F\u002Fpic1.zhimg.com\u002Fv2-7addec665cb82_l.jpg&,&articlesCount&:49},&state&:&accepted&,&targetPost&:{&titleImage&:&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-ac9c51581f75fcc3aa84c0_r.jpg&,&lastUpdated&:,&imagePath&:&v2-ac9c51581f75fcc3aa84c0.png&,&permission&:&ARTICLE_PUBLIC&,&topics&:[12,16465],&summary&:&这里不会列举Spring Boot中logback配置语法,网上很多。这里主要过一下logback在Spring Boot应用中是如何初始化的,以及加载logback相关配置文件的顺序。先列出几点:如果classpath下有logback-test.xml会优先生效,xxx-spring.xml优先级最低。日志系统初始…&,&copyPermission&:&ARTICLE_COPYABLE&,&translatedCommentPermission&:&all&,&likes&:0,&origAuthorId&:0,&publishedTime&:&T21:22:45+08:00&,&sourceUrl&:&&,&urlToken&:,&id&:3337029,&withContent&:false,&slug&:,&bigTitleImage&:false,&title&:&Spring Boot中logback配置文件加载过程&,&url&:&\u002Fp\u002F&,&commentPermission&:&ARTICLE_ALL_CAN_COMMENT&,&snapshotUrl&:&&,&created&:,&comments&:0,&columnId&:0,&content&:&&,&parentId&:0,&state&:&ARTICLE_PUBLISHED&,&imageUrl&:&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-ac9c51581f75fcc3aa84c0_r.jpg&,&author&:{&bio&:&&,&isFollowing&:false,&hash&:&008b736bbdaf1d3e8f35cf70&,&uid&:48,&isOrg&:false,&slug&:&vonzhou&,&isFollowed&:false,&description&:&https:\u002F\u002Fgithub.com\u002Fvonzhou&,&name&:&Chown&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fvonzhou&,&avatar&:{&id&:&v2-b5d4daa5163ba79&,&template&:&https:\u002F\u002Fpic4.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},&memberId&:2393062,&excerptTitle&:&&,&voteType&:&ARTICLE_VOTE_CLEAR&},&id&:719195}],&title&:&Spring Boot中logback配置文件加载过程&,&author&:&vonzhou&,&content&:&\u003Cp\u003E这里不会列举Spring Boot中logback配置语法,网上很多。\u003C\u002Fp\u003E\u003Cp\u003E这里主要过一下logback在Spring Boot应用中是如何初始化的,以及加载logback相关配置文件的顺序。\u003C\u002Fp\u003E\u003Cp\u003E先列出几点:\u003C\u002Fp\u003E\u003Cul\u003E\u003Cli\u003E如果classpath下有logback-test.xml会优先生效,xxx-spring.xml优先级最低。\u003C\u002Fli\u003E\u003Cli\u003E日志系统初始化之前日志输出有DEBUG,因为此刻logback-spring还未生效,spring boot默认日志级别是DEBUG。\u003C\u002Fli\u003E\u003Cli\u003E有些依赖的库日志输出不受控制,是因为最终使用的logger不是logback,比如使用的log4j。\u003C\u002Fli\u003E\u003Cli\u003ESpring Boot使用JUnit测试时使用SpringBootTest注解与否在日志系统初始化时有区别。\u003C\u002Fli\u003E\u003C\u002Ful\u003E\u003Cp\u003E下面通过浏览代码看看具体的过程。\u003C\u002Fp\u003E\u003Cp\u003E在Spring应用启动时会先获取到对应的日志实例。\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-java\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&c1\&\u003E\u002F\u002F org.springframework.boot.logging.LoggingApplicationListener\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Eprivate\u003C\u002Fspan\u003E \u003Cspan class=\&kt\&\u003Evoid\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003EonApplicationStartedEvent\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EApplicationStartedEvent\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eevent\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Ethis\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EloggingSystem\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ELoggingSystem\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003Eget\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eevent\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EgetSpringApplication\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E().\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EgetClassLoader\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E());\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Ethis\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EloggingSystem\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EbeforeInitialize\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E();\u003C\u002Fspan\u003E\n\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E检测和获取日志系统,检测的顺序定义在SYSTEMS中,最终通过反射创建LogbackLoggingSystem实例。\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-java\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&c1\&\u003E\u002F\u002F org.springframework.boot.logging.LoggingSystem\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Epublic\u003C\u002Fspan\u003E \u003Cspan class=\&kd\&\u003Estatic\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ELoggingSystem\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003Eget\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EClassLoader\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EclassLoader\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EloggingSystem\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ESystem\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EgetProperty\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003ESYSTEM_PROPERTY\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E);\u003C\u002Fspan\u003E\u003Cspan class=\&c1\&\u003E\u002F\u002F null\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EStringUtils\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EhasLength\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EloggingSystem\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E))\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003ENONE\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003Eequals\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EloggingSystem\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E))\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&k\&\u003Ereturn\u003C\u002Fspan\u003E \u003Cspan class=\&k\&\u003Enew\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ENoOpLoggingSystem\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E();\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&k\&\u003Ereturn\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eget\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EclassLoader\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EloggingSystem\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E);\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Efor\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EMap\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EEntry\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eentry\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E:\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ESYSTEMS\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EentrySet\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E())\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EClassUtils\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EisPresent\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eentry\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EgetKey\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(),\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EclassLoader\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E))\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&k\&\u003Ereturn\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eget\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EclassLoader\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eentry\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EgetValue\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E());\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Ethrow\u003C\u002Fspan\u003E \u003Cspan class=\&k\&\u003Enew\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EIllegalStateException\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s\&\u003E\&No suitable logging system located\&\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E);\u003C\u002Fspan\u003E\n\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\n\n\u003Cspan class=\&cm\&\u003E\u002F**\u003C\u002Fspan\u003E\n\u003Cspan class=\&cm\&\u003E * A System property that can be used to indicate the {@link LoggingSystem} to use.\u003C\u002Fspan\u003E\n\u003Cspan class=\&cm\&\u003E *\u002F\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Epublic\u003C\u002Fspan\u003E \u003Cspan class=\&kd\&\u003Estatic\u003C\u002Fspan\u003E \u003Cspan class=\&kd\&\u003Efinal\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ESYSTEM_PROPERTY\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ELoggingSystem\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003Eclass\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EgetName\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E();\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&kd\&\u003Eprivate\u003C\u002Fspan\u003E \u003Cspan class=\&kd\&\u003Estatic\u003C\u002Fspan\u003E \u003Cspan class=\&kd\&\u003Efinal\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EMap\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ESYSTEMS\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E;\u003C\u002Fspan\u003E\n\n\u003Cspan class=\&kd\&\u003Estatic\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&n\&\u003EMap\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Esystems\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&k\&\u003Enew\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ELinkedHashMap\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E&();\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&n\&\u003Esystems\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003Eput\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s\&\u003E\&ch.qos.logback.core.Appender\&\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&s\&\u003E\&org.springframework.boot.logging.logback.LogbackLoggingSystem\&\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E);\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&n\&\u003Esystems\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003Eput\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s\&\u003E\&org.apache.logging.log4j.core.impl.Log4jContextFactory\&\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&s\&\u003E\&org.springframework.boot.logging.log4j2.Log4J2LoggingSystem\&\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E);\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&n\&\u003Esystems\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003Eput\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&s\&\u003E\&java.util.logging.LogManager\&\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&s\&\u003E\&org.springframework.boot.logging.java.JavaLoggingSystem\&\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E);\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&n\&\u003ESYSTEMS\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ECollections\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EunmodifiableMap\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Esystems\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E);\u003C\u002Fspan\u003E\n\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E然后在ApplicationEnvironmentPreparedEvent之后进行logback的初始化。\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-java\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&kd\&\u003Eprivate\u003C\u002Fspan\u003E \u003Cspan class=\&kt\&\u003Evoid\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003EonApplicationEnvironmentPreparedEvent\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&n\&\u003EApplicationEnvironmentPreparedEvent\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eevent\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&k\&\u003Ethis\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EloggingSystem\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E==\u003C\u002Fspan\u003E \u003Cspan class=\&kc\&\u003Enull\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&k\&\u003Ethis\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EloggingSystem\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ELoggingSystem\u003C\u002Fspan\u003E\n\t\t\t\t\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003Eget\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eevent\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EgetSpringApplication\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E().\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EgetClassLoader\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E());\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&n\&\u003Einitialize\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eevent\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EgetEnvironment\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(),\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eevent\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EgetSpringApplication\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E().\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EgetClassLoader\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E());\u003C\u002Fspan\u003E\n\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\n\t\u003Cspan class=\&cm\&\u003E\u002F**\u003C\u002Fspan\u003E\n\u003Cspan class=\&cm\&\u003E * Initialize the logging system according to preferences expressed through the\u003C\u002Fspan\u003E\n\u003Cspan class=\&cm\&\u003E * {@link Environment} and the classpath.\u003C\u002Fspan\u003E\n\u003Cspan class=\&cm\&\u003E * @param environment the environment\u003C\u002Fspan\u003E\n\u003Cspan class=\&cm\&\u003E * @param classLoader the classloader\u003C\u002Fspan\u003E\n\u003Cspan class=\&cm\&\u003E *\u002F\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Eprotected\u003C\u002Fspan\u003E \u003Cspan class=\&kt\&\u003Evoid\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003Einitialize\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EConfigurableEnvironment\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eenvironment\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&n\&\u003EClassLoader\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EclassLoader\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Enew\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ELoggingSystemProperties\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eenvironment\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E).\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003Eapply\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E();\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&n\&\u003ELogFile\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ElogFile\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ELogFile\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003Eget\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eenvironment\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E);\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003ElogFile\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E!=\u003C\u002Fspan\u003E \u003Cspan class=\&kc\&\u003Enull\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&n\&\u003ElogFile\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EapplyToSystemProperties\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E();\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&n\&\u003EinitializeEarlyLoggingLevel\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eenvironment\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E);\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&n\&\u003EinitializeSystem\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eenvironment\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&k\&\u003Ethis\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EloggingSystem\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ElogFile\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E);\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&n\&\u003EinitializeFinalLoggingLevels\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eenvironment\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&k\&\u003Ethis\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EloggingSystem\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E);\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&n\&\u003EregisterShutdownHookIfNecessary\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Eenvironment\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&k\&\u003Ethis\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EloggingSystem\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E);\u003C\u002Fspan\u003E\n\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E重点看配置文件检测的过程。\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-java\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&kd\&\u003Eprivate\u003C\u002Fspan\u003E \u003Cspan class=\&kt\&\u003Evoid\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003EinitializeWithConventions\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&n\&\u003ELoggingInitializationContext\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EinitializationContext\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ELogFile\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ElogFile\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&c1\&\u003E\u002F\u002F 获取logback自己支持的配置文件\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Econfig\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EgetSelfInitializationConfig\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E();\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Econfig\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E!=\u003C\u002Fspan\u003E \u003Cspan class=\&kc\&\u003Enull\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E&&\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ElogFile\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E==\u003C\u002Fspan\u003E \u003Cspan class=\&kc\&\u003Enull\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&c1\&\u003E\u002F\u002F self initialization has occurred, reinitialize in case of property changes\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&n\&\u003Ereinitialize\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EinitializationContext\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E);\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&k\&\u003Ereturn\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E;\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&c1\&\u003E\u002F\u002F 如果没有则检测spring相关的logback配置\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Econfig\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E==\u003C\u002Fspan\u003E \u003Cspan class=\&kc\&\u003Enull\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&n\&\u003Econfig\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EgetSpringInitializationConfig\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E();\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Eif\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Econfig\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E!=\u003C\u002Fspan\u003E \u003Cspan class=\&kc\&\u003Enull\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&n\&\u003EloadConfiguration\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EinitializationContext\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Econfig\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ElogFile\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E);\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&k\&\u003Ereturn\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E;\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&n\&\u003EloadDefaults\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003EinitializationContext\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003ElogFile\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E);\u003C\u002Fspan\u003E\n\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003Elogback自身配置文件的生效顺序。\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-java\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&c1\&\u003E\u002F\u002F org.springframework.boot.logging.logback.LogbackLoggingSystem\u003C\u002Fspan\u003E\n\u003Cspan class=\&nd\&\u003E@Override\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Eprotected\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E[]\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003EgetStandardConfigLocations\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E()\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Ereturn\u003C\u002Fspan\u003E \u003Cspan class=\&k\&\u003Enew\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E[]\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E \u003Cspan class=\&s\&\u003E\&logback-test.groovy\&\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&s\&\u003E\&logback-test.xml\&\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E \u003Cspan class=\&s\&\u003E\&logback.groovy\&\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E\n\t\t\t\u003Cspan class=\&s\&\u003E\&logback.xml\&\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E};\u003C\u002Fspan\u003E\n\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E通过这里可以看到spring boot中支持的logback配置文件格式,就是在logback自配置文件(logback-test.xml, logback.xml等)基础上文件名后面加了“-spring”,如logback-test-spring, logback-spring等。\u003C\u002Fp\u003E\u003Cdiv class=\&highlight\&\u003E\u003Cpre\u003E\u003Ccode class=\&language-java\&\u003E\u003Cspan\u003E\u003C\u002Fspan\u003E\u003Cspan class=\&cm\&\u003E\u002F**\u003C\u002Fspan\u003E\n\u003Cspan class=\&cm\&\u003E * Return the spring config locations for this system. By default this method returns\u003C\u002Fspan\u003E\n\u003Cspan class=\&cm\&\u003E * a set of locations based on {@link #getStandardConfigLocations()}.\u003C\u002Fspan\u003E\n\u003Cspan class=\&cm\&\u003E * @return the spring config locations\u003C\u002Fspan\u003E\n\u003Cspan class=\&cm\&\u003E * @see #getSpringInitializationConfig()\u003C\u002Fspan\u003E\n\u003Cspan class=\&cm\&\u003E *\u002F\u003C\u002Fspan\u003E\n\u003Cspan class=\&kd\&\u003Eprotected\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E[]\u003C\u002Fspan\u003E \u003Cspan class=\&nf\&\u003EgetSpringConfigLocations\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E()\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E[]\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Elocations\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EgetStandardConfigLocations\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E();\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Efor\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&kt\&\u003Eint\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ei\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E0\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E;\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ei\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E&\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Elocations\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003Elength\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E;\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E++)\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E{\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&n\&\u003EString\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eextension\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003EStringUtils\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003EgetFilenameExtension\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Elocations\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E]);\u003C\u002Fspan\u003E\n\t\t\u003Cspan class=\&n\&\u003Elocations\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E]\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E=\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Elocations\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E].\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003Esubstring\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E(\u003C\u002Fspan\u003E\u003Cspan class=\&mi\&\u003E0\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E,\u003C\u002Fspan\u003E\n\t\t\t\t\u003Cspan class=\&n\&\u003Elocations\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E[\u003C\u002Fspan\u003E\u003Cspan class=\&n\&\u003Ei\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E].\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003Elength\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E()\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E-\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eextension\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E.\u003C\u002Fspan\u003E\u003Cspan class=\&na\&\u003Elength\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E()\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E-\u003C\u002Fspan\u003E \u003Cspan class=\&mi\&\u003E1\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E)\u003C\u002Fspan\u003E \u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E \u003Cspan class=\&s\&\u003E\&-spring.\&\u003C\u002Fspan\u003E\n\t\t\t\t\u003Cspan class=\&o\&\u003E+\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Eextension\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E;\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\t\u003Cspan class=\&k\&\u003Ereturn\u003C\u002Fspan\u003E \u003Cspan class=\&n\&\u003Elocations\u003C\u002Fspan\u003E\u003Cspan class=\&o\&\u003E;\u003C\u002Fspan\u003E\n\u003Cspan class=\&o\&\u003E}\u003C\u002Fspan\u003E\n\u003C\u002Fcode\u003E\u003C\u002Fpre\u003E\u003C\u002Fdiv\u003E\u003Cp\u003E此外,Spring Boot使用JUnit时,如果没有配置SpringBootTest注解,日志系统根本不会得到初始化,会使用org.slf4j.impl.StaticLoggerBinder获取,如果在test\u002Fresource下面存在logback-test.xml则会生效,否则就使用系统默认的配置。如果配置了置SpringBootTest注解,则SpringBoot会正常的初始化,日志系统会正常加载。\u003C\u002Fp\u003E\u003Ch2\u003E参考\u003C\u002Fh2\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=https%3A\u002F\u002Flogback.qos.ch\u002Fmanual\u002Fconfiguration.html%23auto_configuration\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003EConfiguration in logback\u003C\u002Fa\u003E\u003C\u002Fp\u003E\u003Cp\u003E\u003Ca href=\&http:\u002F\u002Flink.zhihu.com\u002F?target=https%3A\u002F\u002Fdocs.spring.io\u002Fspring-boot\u002Fdocs\u002Fcurrent\u002Freference\u002Fhtml\u002Fboot-features-logging.html\& class=\& wrap external\& target=\&_blank\& rel=\&nofollow noreferrer\&\u003ESpring Boot Logging\u003C\u002Fa\u003E\u003C\u002Fp\u003E&,&updated&:new Date(&T13:22:45.000Z&),&canComment&:false,&commentPermission&:&anyone&,&commentCount&:0,&collapsedCount&:0,&likeCount&:9,&state&:&published&,&isLiked&:false,&slug&:&&,&lastestTipjarors&:[],&isTitleImageFullScreen&:false,&rating&:&none&,&titleImage&:&https:\u002F\u002Fpic2.zhimg.com\u002Fv2-ac9c51581f75fcc3aa84c0_r.jpg&,&links&:{&comments&:&\u002Fapi\u002Fposts\u002F2Fcomments&},&reviewers&:[],&topics&:[{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&Spring Boot&},{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&日志&},{&url&:&https:\u002F\u002Fwww.zhihu.com\u002Ftopic\u002F&,&id&:&&,&name&:&Spring&}],&adminClosedComment&:false,&titleImageSize&:{&width&:527,&height&:388},&href&:&\u002Fapi\u002Fposts\u002F&,&excerptTitle&:&&,&tipjarState&:&activated&,&tipjarTagLine&:&真诚赞赏,手留余香&,&sourceUrl&:&&,&pageCommentsCount&:0,&tipjarorCount&:0,&annotationAction&:[],&hasPublishingDraft&:false,&snapshotUrl&:&&,&publishedTime&:&T21:22:45+08:00&,&url&:&\u002Fp\u002F&,&lastestLikers&:[{&bio&:null,&isFollowing&:false,&hash&:&473daeb355de5&,&uid&:886500,&isOrg&:false,&slug&:&xxx-39&,&isFollowed&:false,&description&:&&,&name&:&xxx&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fxxx-39&,&avatar&:{&id&:&722fe661cf0cde717b241&,&template&:&https:\u002F\u002Fpic3.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:null,&isFollowing&:false,&hash&:&06aa3f66e32381a3fec7b3f&,&uid&:057400,&isOrg&:false,&slug&:&xu-jia-shan-96&,&isFollowed&:false,&description&:&小猪把一盆热水倒在头上问:“屌吗?”\n“屌!”\n“拽吗?”\n“拽!”\n于是小伙伴们纷纷点赞,小猪一声惨叫,点在了水泡上。&,&name&:&徐家山&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fxu-jia-shan-96&,&avatar&:{&id&:&adbc43ac56ac4e3f6d1e&,&template&:&https:\u002F\u002Fpic4.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&Web开发&,&isFollowing&:false,&hash&:&c3b8dd324eba49408cd6&,&uid&:617900,&isOrg&:false,&slug&:&ba-xi-18&,&isFollowed&:false,&description&:&&,&name&:&Ragty&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fba-xi-18&,&avatar&:{&id&:&v2-b6050e5eabefaa543f30&,&template&:&https:\u002F\u002Fpic4.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&知乎已经了&,&isFollowing&:false,&hash&:&1b0a3f2cb487ccb7f2c6eae135b028f0&,&uid&:16,&isOrg&:false,&slug&:&raistlic&,&isFollowed&:false,&description&:&What I'm working on: take the sh out of IT.&,&name&:&无忧&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fraistlic&,&avatar&:{&id&:&da8e974dc&,&template&:&https:\u002F\u002Fpic4.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false},{&bio&:&有梦想最可爱&,&isFollowing&:false,&hash&:&05db57471b1&,&uid&:52,&isOrg&:false,&slug&:&hu-xiao-yan-52&,&isFollowed&:false,&description&:&&,&name&:&胡笑颜&,&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fhu-xiao-yan-52&,&avatar&:{&id&:&49ad99953&,&template&:&https:\u002F\u002Fpic1.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}],&summary&:&这里不会列举Spring Boot中logback配置语法,网上很多。这里主要过一下logback在Spring Boot应用中是如何初始化的,以及加载logback相关配置文件的顺序。先列出几点:如果classpath下有logback-test.xml会优先生效,xxx-spring.xml优先级最低。日志系统初始…&,&reviewingCommentsCount&:0,&meta&:{&previous&:null,&next&:null},&annotationDetail&:null,&commentsCount&:0,&likesCount&:9,&FULLINFO&:true}},&User&:{&vonzhou&:{&isFollowed&:false,&name&:&Chown&,&headline&:&https:\u002F\u002Fgithub.com\u002Fvonzhou&,&avatarUrl&:&https:\u002F\u002Fpic4.zhimg.com\u002Fv2-b5d4daa5163ba79_s.jpg&,&isFollowing&:false,&type&:&people&,&slug&:&vonzhou&,&bio&:&&,&hash&:&008b736bbdaf1d3e8f35cf70&,&uid&:48,&isOrg&:false,&description&:&https:\u002F\u002Fgithub.com\u002Fvonzhou&,&badge&:{&identity&:null,&bestAnswerer&:null},&profileUrl&:&https:\u002F\u002Fwww.zhihu.com\u002Fpeople\u002Fvonzhou&,&avatar&:{&id&:&v2-b5d4daa5163ba79&,&template&:&https:\u002F\u002Fpic4.zhimg.com\u002F{id}_{size}.jpg&},&isOrgWhiteList&:false,&isBanned&:false}},&Comment&:{},&favlists&:{}},&me&:{},&global&:{&experimentFeatures&:{&ge3&:&ge3_9&,&ge2&:&ge2_1&,&navi&:&1&,&growthSearch&:&s2&,&nwebQAGrowth&:&experiment&,&qawebRelatedReadingsContentControl&:&close&,&liveStore&:&ls_a2_b2_c1_f2&,&nwebSearch&:&nweb_search_heifetz&,&vdlc&:&e&,&rt&:&y&,&isOffice&:&false&,&enableTtsPlay&:&post&,&stic&:&o&,&newLiveFeedMediacard&:&new&,&newMobileAppHeader&:&true&,&androidPassThroughPush&:&all&,&hybridZhmoreVideo&:&yes&,&nwebGrowthPeople&:&default&,&nwebSearchSuggest&:&default&,&qrcodeLogin&:&qrcode&,&enableVoteDownReasonMenu&:&enable&,&play&:&0&,&isShowUnicomFreeEntry&:&unicom_free_entry_off&,&growthBanner&:&default&,&newMobileColumnAppheader&:&new_header&,&androidDbRecommendAction&:&open&,&biu&:&1&,&info&:&1&,&androidDbFeedHashTagStyle&:&button&,&appStoreRateDialog&:&close&,&default&:&None&,&isNewNotiPanel&:&no&,&biua&:&1&,&zcmLighting&:&zcm&,&adR&:&b&,&wechatShareModal&:&wechat_share_modal_show&,&uRe&:&0&,&androidProfilePanel&:&panel_b&}},&columns&:{&next&:{}},&columnPosts&:{},&columnSettings&:{&colomnAuthor&:[],&uploadAvatarDetails&:&&,&contributeRequests&:[],&contributeRequestsTotalCount&:0,&inviteAuthor&:&&},&postComments&:{},&postReviewComments&:{&comments&:[],&newComments&:[],&hasMore&:true},&favlistsByUser&:{},&favlistRelations&:{},&promotions&:{},&switches&:{&couldSetPoster&:false},&draft&:{&titleImage&:&&,&titleImageSize&:{},&isTitleImageFullScreen&:false,&canTitleImageFullScreen&:false,&title&:&&,&titleImageUploading&:false,&error&:&&,&content&:&&,&draftLoading&:false,&updating&:false,&globalLoading&:false,&pendingVideo&:{&resource&:null,&error&:null}},&drafts&:{&draftsList&:[],&next&:{}},&config&:{&userNotBindPhoneTipString&:{}},&recommendPosts&:{&articleRecommendations&:[],&columnRecommendations&:[]},&env&:{&edition&:{&baidu&:false,&yidianzixun&:false,&qqnews&:false},&isAppView&:false,&appViewConfig&:{&content_padding_top&:128,&content_padding_bottom&:56,&content_padding_left&:16,&content_padding_right&:16,&title_font_size&:22,&body_font_size&:16,&is_dark_theme&:false,&can_auto_load_image&:true,&app_info&:&OS=iOS&},&isApp&:false,&userAgent&:{&ua&:&Mozilla\u002F5.0 (compatible, MSIE 11, Windows NT 6.3; Trident\u002F7.0; rv:11.0) like Gecko&,&browser&:{&name&:&IE&,&version&:&11&,&major&:&11&},&engine&:{&version&:&7.0&,&name&:&Trident&},&os&:{&name&:&Windows&,&version&:&8.1&},&device&:{},&cpu&:{}}},&message&:{&newCount&:0},&pushNotification&:{&newCount&:0}}

我要回帖

更多关于 logback system.out 的文章

 

随机推荐