GVKun编程网logo

无法在logback.xml中使用Spring属性占位符(logback无法写入到文件)

14

本文的目的是介绍无法在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无法写入到文件)

无法在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属性占位符无法正常工作

java – Spring属性占位符无法正常工作

我在stackoverflow.com上看过类似的问题,但没有一个解决方案对我有帮助.
我使用的以下配置(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

logback-spring.xml

数据技术都能四世同堂,凭什么开发 30 岁就要被干掉?
<?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 配置

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

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的相关信息,请在本站寻找。

本文标签: