本文的目的是介绍无法在logback.xml中使用Spring属性占位符的详细情况,特别关注logback无法写入到文件的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了
本文的目的是介绍无法在logback.xml中使用Spring属性占位符的详细情况,特别关注logback无法写入到文件的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解无法在logback.xml中使用Spring属性占位符的机会,同时也不会遗漏关于java – Spring属性占位符无法正常工作、logback-spring.xml、logback-spring.xml 配置、spingboot用logback-spring.xml替换logback.xml的知识。
本文目录一览:- 无法在logback.xml中使用Spring属性占位符(logback无法写入到文件)
- java – Spring属性占位符无法正常工作
- logback-spring.xml
- logback-spring.xml 配置
- spingboot用logback-spring.xml替换logback.xml
无法在logback.xml中使用Spring属性占位符(logback无法写入到文件)
我有一个使用Logback的Spring
Boot控制台应用程序。所有属性(针对应用程序和Logback)都被外部化为类路径中的标准application.properties文件。在应用程序本身中可以很好地拾取这些属性,但在logback.xml文件中不会拾取这些属性。在Spring
Boot启动之前,似乎好像处理了logback.xml,因此未处理EL占位符。
以FileNamePattern为例,在application.properties中,我有类似以下内容:
log.filePattern=/%d{yyyy/MM-MMMM/dd-EEEE}
在logback.xml中,我将得到:
<rollingPolicy> <FileNamePattern>${log.logDirectory}${log.filePattern}.log </FileNamePattern></rollingPolicy>
运行该应用程序时,我会看到以下错误:
ERROR in ch.qos.logback.core.joran.spi.Interpreter@24:25 - RuntimeException in Action for tag [rollingPolicy]java.lang.IllegalStateException: FileNamePattern[log.logDirectory_IS_UNDEFINEDlog.filePattern_IS_UNDEFINED.log]does not contain a valid DateToken
类似的代码在其他Spring(不是Spring Boot)应用程序中也能正常工作,因此我很好奇Spring Boot的行为是否有所不同。
解:
感谢您的回复@Gary!很高兴知道Spring EL和Logback变量之间的区别…我以为是Spring负责为我解析这些变量。我 确实
有元素,但是这让我开始思考。
我的application.properties文件在jar之外,因此Logback不知道在哪里找到它。通过保持我的春节,相关性在我的外部application.properties文件,移动测井相关性为application-
internal.properties文件(位于 里面 的罐子),并指向的logback到 该 文件(<propertyresource="application-internal.properties" />
)得到的一切工作正常!
答案1
小编典典${...}
在春季不是“ Spring EL”;他们是财产占位符。
我认为您正在将logback“变量”与Spring“属性占位符”混淆。
它们恰好使用相同的语法${...}
。
logback对Spring属性占位符机制一无所知,反之亦然。您需要根据logback文档而不是application.properties
/
来配置logback变量,application.yml
严格来说,/ 是Spring(boot)概念。
编辑:
快速查看了Logback文档后,添加
<property resource="application.properties" />
到logback.xml
应该工作。
java – Spring属性占位符无法正常工作
我使用的以下配置(maven项目结构):
src / main / resources / properties / app.properties文件
#possible values: dev test prod mode: dev
在Spring配置中:
<context:property-placeholder location="classpath:properties/app.properties"/> <import resource="classpath:/spring/db/${mode}-datasource-config.xml"/>
根据${mode}的值,我想导入相应的数据源配置文件.
当我使用mvn clean install tomcat7:run命运行嵌入式tomcat7时,我收到错误:
10,2013 5:52:29 PM org.apache.catalina.core.StandardContext loadOnStartup SEVERE: Servlet /SpringWebFlow threw load() exception java.lang.IllegalArgumentException: Could not resolve placeholder 'mode' in string value "classpath:/spring/db/${mode}-datasource-config.xml"
目标/ classes / properties / app.properties文件存在.
我正在使用IntelliJ IDEA,在编辑器中我可以点击< import resource =“classpath中的”${mode}“:/ spring / db / ${mode} -datasource-config.xml”/>并在属性文件中查看其值.编辑器本身也将${mode}更改为灰色的dev,表明它可以识别属性值.在编辑器中,我看到:< import resource =“classpath:/spring/db/dev-datasource-config.xml”/>
任何想法为什么我得到错误以及如何解决?
解决方法
从版本3.1开始,您可以使用ApplicationContextinitializer将PropertySources添加到Enviroment中,以解决您的问题.
见http://blog.springsource.org/2011/02/15/spring-3-1-m1-unified-property-management/
执行相同操作的其他选项是使用配置文件:http://blog.springsource.org/2011/02/14/spring-3-1-m1-introducing-profile/
编辑
例如:
将初始化程序添加到web.xml
<context-param> <param-name>contextinitializerClasses</param-name> <param-value>foo.bar.AppContextinitializer</param-value> </context-param>
和初始化程序:
public class AppContextinitializer implements ApplicationContextinitializer<ConfigurableWebApplicationContext> { @Override public void initialize(ConfigurableWebApplicationContext applicationContext) { Properties props; try { props = PropertiesLoaderUtils.loadAllProperties("/some/path"); PropertiesPropertySource ps = new PropertiesPropertySource("profile",props); applicationContext.getEnvironment().getPropertySources().addFirst(ps); } catch (IOException e) { // handle error } } }
logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
<!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
<property name="LOG_HOME" value="D:/log" />
<!-- 控制台输出 -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/webtest.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<!--日志文件保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>1MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- show parameters for hibernate sql 专为 Hibernate 定制 -->
<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="TRACE" />
<logger name="org.hibernate.type.descriptor.sql.BasicExtractor" level="DEBUG" />
<logger name="org.hibernate.SQL" level="DEBUG" />
<logger name="org.hibernate.engine.QueryParameters" level="DEBUG" />
<logger name="org.hibernate.engine.query.HQLQueryPlan" level="DEBUG" />
<!--myibatis log configure-->
<logger name="com.apache.ibatis" level="TRACE"/>
<logger name="java.sql.Connection" level="DEBUG"/>
<logger name="java.sql.Statement" level="DEBUG"/>
<logger name="java.sql.PreparedStatement" level="DEBUG"/>
<!-- 配置job日志输出至单独的日志文件中 -->
<appender name="PAY_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件输出的文件名-->
<FileNamePattern>${LOG_HOME}/pay/pay.log.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<!-- 日志输出编码 -->
<layout class="ch.qos.logback.classic.PatternLayout">
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
</pattern>
</layout>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>1MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!--需要将日志单独输出的包路径-->
<logger name="com.demo.PayController" additivity="false">
<appender-ref ref="PAY_LOG"/>
</logger>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILE" />
</root>
</configuration>
切面的一些东西
package com.lkx.aspectj;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class ServiceAspect {
// Service层切点
@Pointcut("execution(* com.lkx.service.*Service.*(..))")
public void servicePointCut() {
}
@Before("servicePointCut()")
public void doBefore(final JoinPoint jp) {
Class<?> targetClass = jp.getTarget().getClass();
Log log = LogFactory.getLog(targetClass);
if (log.isDebugEnabled()) {
String methodName = jp.getSignature().getName();
log.debug("Service Begining method: " + targetClass.getName() + "." + methodName);
}
}
@Around("servicePointCut()")
public Object doAround(final ProceedingJoinPoint pjp) throws Throwable {
Class<?> targetClass = pjp.getTarget().getClass();
Log log = LogFactory.getLog(targetClass);
long time = System.currentTimeMillis();
Object retVal = pjp.proceed();
if (log.isDebugEnabled()) {
time = System.currentTimeMillis() - time;
log.debug("process time: " + time + " ms");
}
return retVal;
}
@After("servicePointCut()")
public void doAfter(final JoinPoint jp) {
Class<?> targetClass = jp.getTarget().getClass();
Log log = LogFactory.getLog(targetClass);
if (log.isDebugEnabled()) {
String methodName = jp.getSignature().getName();
log.debug("Service Ending method: " + targetClass.getName() + "." + methodName);
}
}
@AfterThrowing(value = "servicePointCut()", throwing = "ex")
public void doThrowing(final JoinPoint jp, final Throwable ex) {
Class<?> targetClass = jp.getTarget().getClass();
Log log = LogFactory.getLog(targetClass);
log.error(ex.getMessage(), ex);
}
}
logback-spring.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="10 seconds">
<!-- 日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出 -->
<!-- scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true -->
<!-- scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。 -->
<!-- debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。 -->
<contextName>logback</contextName>
<!-- name的值是变量的名称,value的值时变量定义的值。通过定义的值会被插入到logger上下文中。定义变量后,可以使“${}”来使用变量。 -->
<property name="log.path" value="D:/guli_1010/edu" />
<!-- 彩色日志 -->
<!-- 配置格式变量:CONSOLE_LOG_PATTERN 彩色日志格式 -->
<!-- magenta:洋红 -->
<!-- boldmagenta:粗红-->
<!-- cyan:青色 -->
<!-- white:白色 -->
<!-- magenta:洋红 -->
<property name="CONSOLE_LOG_PATTERN"
value="%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%blue(%thread) |%blue(%file:%line) |%green(%logger) |%cyan(%msg%n)"/>
<!--输出到控制台-->
<appender name="CONSOLE">
<!--此日志appender是为开发使用,只配置最底级别,控制台输出的日志级别是大于或等于此级别的日志信息-->
<!-- 例如:如果此处配置了INFO级别,则后面其他位置即使配置了DEBUG级别的日志,也不会被输出 -->
<filter>
<level>INFO</level>
</filter>
<encoder>
<Pattern>${CONSOLE_LOG_PATTERN}</Pattern>
<!-- 设置字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--输出到文件-->
<!-- 时间滚动输出 level为 INFO 日志 -->
<appender name="INFO_FILE">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/log_info.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy>
<!-- 每天日志归档路径以及格式 -->
<fileNamePattern>${log.path}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy>
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录info级别的 -->
<filter>
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 时间滚动输出 level为 WARN 日志 -->
<appender name="WARN_FILE">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/log_warn.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy>
<fileNamePattern>${log.path}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy>
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录warn级别的 -->
<filter>
<level>warn</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 时间滚动输出 level为 ERROR 日志 -->
<appender name="ERROR_FILE">
<!-- 正在记录的日志文件的路径及文件名 -->
<file>${log.path}/log_error.log</file>
<!--日志文件输出格式-->
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
<charset>UTF-8</charset> <!-- 此处设置字符集 -->
</encoder>
<!-- 日志记录器的滚动策略,按日期,按大小记录 -->
<rollingPolicy>
<fileNamePattern>${log.path}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy>
<maxFileSize>100MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志文件保留天数-->
<maxHistory>15</maxHistory>
</rollingPolicy>
<!-- 此日志文件只记录ERROR级别的 -->
<filter>
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!--
<logger>用来设置某一个包或者具体的某一个类的日志打印级别、以及指定<appender>。
<logger>仅有一个name属性,
一个可选的level和一个可选的addtivity属性。
name:用来指定受此logger约束的某一个包或者具体的某一个类。
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,
如果未设置此属性,那么当前logger将会继承上级的级别。
-->
<!--
使用mybatis的时候,sql语句是debug下才会打印,而这里我们只配置了info,所以想要查看sql语句的话,有以下两种操作:
第一种把<root level="INFO">改成<root level="DEBUG">这样就会打印sql,不过这样日志那边会出现很多其他消息
第二种就是单独给mapper下目录配置DEBUG模式,代码如下,这样配置sql语句会打印,其他还是正常DEBUG级别:
-->
<!--开发环境:打印控制台-->
<springProfile name="dev">
<!--可以输出项目中的debug日志,包括mybatis的sql日志-->
<logger name="com.guli" level="INFO" />
<!--
root节点是必选节点,用来指定最基础的日志输出级别,只有一个level属性
level:用来设置打印级别,大小写无关:TRACE, DEBUG, INFO, WARN, ERROR, ALL 和 OFF,默认是DEBUG
可以包含零个或多个appender元素。
-->
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="WARN_FILE" />
<appender-ref ref="ERROR_FILE" />
</root>
</springProfile>
<!--生产环境:输出到文件-->
<springProfile name="pro">
<root level="INFO">
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
<appender-ref ref="WARN_FILE" />
</root>
</springProfile>
</configuration>
<!--请根据自己的需求来更改-->
spingboot用logback-spring.xml替换logback.xml
官方文章:
logback.xml加载早于application.properties,所以如果你在logback.xml使用了变量时,而恰好这个变量是写在application.properties时,那么就会获取不到,只要改成logback-spring.xml就可以解决。
pom文件
只继承了spring-boot-starter-parent原因请看下图maven继承树
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.test</groupId>
<artifactId>Quartz</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Quartz</name>
<description>Quartz project for Spring Boot</description>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>1.8</java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
resources下添加logback-spring.xml
以下是我的配置以供参考
<configuration>
<contextName>spring-boot-demo</contextName>
<!--各项目日志保存统一父目录->路径自己设置绝对路径和相对路径都可以-->
<property name="LOG_DIR" value="C:/TEMP" />
<!--最大保存天数-->
<property name="KEEP_MAX_DAY" value="180" />
<!--总最大保存文件大小-->
<property name="KEEP_TOTAL_MAX_SIZE" value="5GB" />
<!--单文件最大保存文件大小-->
<property name="KEEP_FILE_MAX_SIZE" value="100MB" />
<!--输出到控制台-->
<appender name="console">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!--输出到ERROR事件记录文件-->
<appender name="errorFile">
<filter>
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<file>${LOG_DIR}/${CONTEXT_NAME}/error/${CONTEXT_NAME}-error.log</file>
<rollingPolicy>
<fileNamePattern>${LOG_DIR}/${CONTEXT_NAME}/error/${CONTEXT_NAME}-error-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>${KEEP_FILE_MAX_SIZE}</maxFileSize>
<maxHistory>${KEEP_MAX_DAY}</maxHistory>
<totalSizeCap>${KEEP_TOTAL_MAX_SIZE}</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!--输出到WARN事件记录文件-->
<appender name="warnFile">
<filter>
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<file>${LOG_DIR}/${CONTEXT_NAME}/warn/${CONTEXT_NAME}-warn.log</file>
<rollingPolicy>
<fileNamePattern>${LOG_DIR}/${CONTEXT_NAME}/warn/${CONTEXT_NAME}-warn-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>${KEEP_FILE_MAX_SIZE}</maxFileSize>
<maxHistory>${KEEP_MAX_DAY}</maxHistory>
<totalSizeCap>${KEEP_TOTAL_MAX_SIZE}</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<!--输出到INFO事件记录文件-->
<appender name="infoFile">
<filter>
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<file>${LOG_DIR}/${CONTEXT_NAME}/info/${CONTEXT_NAME}-info.log</file>
<rollingPolicy>
<fileNamePattern>${LOG_DIR}/${CONTEXT_NAME}/info/${CONTEXT_NAME}-info-%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
<maxFileSize>${KEEP_FILE_MAX_SIZE}</maxFileSize>
<maxHistory>${KEEP_MAX_DAY}</maxHistory>
<totalSizeCap>${KEEP_TOTAL_MAX_SIZE}</totalSizeCap>
</rollingPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
</encoder>
</appender>
<logger name="org.springframework.jdbc.core" level="debug" additivity="false">
<appender-ref ref="console" />
</logger>
<logger name="com.springboot.web.dynamic_debug" level="debug" additivity="false">
<appender-ref ref="console" />
</logger>
<root level="info">
<appender-ref ref="console" />
<appender-ref ref="errorFile" />
<appender-ref ref="warnFile" />
<appender-ref ref="infoFile" />
</root>
</configuration>
关于无法在logback.xml中使用Spring属性占位符和logback无法写入到文件的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于java – Spring属性占位符无法正常工作、logback-spring.xml、logback-spring.xml 配置、spingboot用logback-spring.xml替换logback.xml的相关信息,请在本站寻找。
本文标签: