복붙노트

[SPRING] LOG_PATH_IS_UNDEFINED 폴더를 만드는 LogBack으로 봄 부팅

SPRING

LOG_PATH_IS_UNDEFINED 폴더를 만드는 LogBack으로 봄 부팅

LogBack과 함께 Spring Boot를 사용하고 있고 yml 파일에서 아래의 구성을 사용하고 있습니다 :

logging:
    path: C:/var/log/pincode

logging.path Spring 환경 변수가 LOG_PATH 환경 변수로 전송되고 로그 파일이 올바른 위치에 배치되지만 내 프로젝트의 루트 디렉토리에 LOG_PATH_IS_UNDEFINED 디렉토리가 작성됩니다.

이것은 SpringBoot가 환경 변수로 LogBack을 구성하는 데 사용하는 다른 단계로 인해 발생하는 것 같습니다.

17:29:21,325 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
17:29:21,337 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern LOG_PATH_IS_UNDEFINED/catalina.out.%d{yyyy-MM-dd} for the active file
17:29:21,340 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'LOG_PATH_IS_UNDEFINED/catalina.out.%d{yyyy-MM-dd}'.
17:29:21,340 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
17:29:21,343 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Mon Aug 11 17:24:07 BRT 2014
17:29:21,346 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - Active log file name: LOG_PATH_IS_UNDEFINED/catalina.out
17:29:21,346 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - File property is set to [LOG_PATH_IS_UNDEFINED/catalina.out]
...
17:29:21,358 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.

그리고 나서 logback을 다시 설정하기 시작합니다.하지만 이번에는 i path를 사용합니다.

17:29:21,672 |-INFO in ch.qos.logback.core.joran.action.NestedComplexPropertyIA - Assuming default type [ch.qos.logback.classic.encoder.PatternLayoutEncoder] for [encoder] property
17:29:21,673 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - No compression will be used
17:29:21,673 |-INFO in c.q.l.core.rolling.TimeBasedRollingPolicy - Will use the pattern C:/var/log/pincode//catalina.out.%d{yyyy-MM-dd} for the active file
17:29:21,674 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - The date pattern is 'yyyy-MM-dd' from file name pattern 'C:/var/log/pincode//catalina.out.%d{yyyy-MM-dd}'.
17:29:21,674 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Roll-over at midnight.
17:29:21,674 |-INFO in c.q.l.core.rolling.DefaultTimeBasedFileNamingAndTriggeringPolicy - Setting initial period to Mon Aug 11 17:29:21 BRT 2014
17:29:21,674 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - Active log file name: C:/var/log/pincode//catalina.out
17:29:21,674 |-INFO in ch.qos.logback.core.rolling.RollingFileAppender[serverConsole] - File property is set to [C:/var/log/pincode//catalina.out]
...
17:29:21,685 |-INFO in ch.qos.logback.classic.joran.action.ConfigurationAction - End of configuration.

내 logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
<include resource="org/springframework/boot/logging/logback/basic.xml" />
<property name="FILE_LOG_PATTERN"
    value="%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${PID:- } [%t] --- %-40.40logger{39} : %m%n%wex" />

<appender name="serverConsole"
          class="ch.qos.logback.core.rolling.RollingFileAppender">
    <Append>true</Append>
    <File>${LOG_PATH}/catalina.out</File>
    <encoder>
        <pattern>${FILE_LOG_PATTERN}</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/catalina.out.%d{yyyy-MM-dd}
        </fileNamePattern>
        <maxHistory>15</maxHistory>
    </rollingPolicy>
</appender>

<!-- Plain Text Rolling Appender -->
<appender name="server"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <Append>true</Append>
    <File>${LOG_PATH}/pincode.log</File>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>INFO</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
        <pattern>${FILE_LOG_PATTERN}</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/pincode.log.%d{yyyy-MM-dd}
        </fileNamePattern>
        <maxHistory>15</maxHistory>
    </rollingPolicy>
</appender>

<!-- Plain Text Rolling Appender -->
<appender name="server-error"
    class="ch.qos.logback.core.rolling.RollingFileAppender">
    <Append>true</Append>
    <File>${LOG_PATH}/pincode-error.log</File>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>ERROR</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
    <encoder>
        <pattern>${FILE_LOG_PATTERN}</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/pincode-error.log.%d{yyyy-MM-dd}
        </fileNamePattern>
        <maxHistory>15</maxHistory>
    </rollingPolicy>
</appender>

<logger name="com.app" level="INFO">
    <appender-ref ref="server" />
    <appender-ref ref="server-error" />
</logger>

<root level="INFO">
    <appender-ref ref="serverConsole" />
</root> 

프로젝트에서 logback.xml 파일을 제거하면 폴더가 생성되지 않으므로 yml을 파싱하기 전에 Spring이 xml을로드하고 있습니까?

이 LOG_PATH_IS_UNDEFINED 디렉토리를 만들기 위해 Logback을 피하는 방법은 무엇입니까?

해결법

  1. ==============================

    1.귀하의 경우 LOG_PATH는 시작할 때 정의되지 않습니다. 대신 $ {LOG_PATH : -.}을 사용해야합니다.를 참조하십시오.

    귀하의 경우 LOG_PATH는 시작할 때 정의되지 않습니다. 대신 $ {LOG_PATH : -.}을 사용해야합니다.를 참조하십시오.

    그러나 application.properties에 logging.path를 정의하면 두 개의 로그 파일이 표시됩니다. $ {logging.path} 디렉토리에 있습니다.

    Logger 초기화 후 Spring 컨테이너를 LOG_PATH로 설정 ... Logged가 아는 한 게으른 파일 생성을 지원하지 않습니다. 이 경우 logback.xml 대신 logback-spring.xml을 사용해야합니다.

  2. ==============================

    2.나는 비슷한 문제와 그 문제를 해결하기 쉽다. 기본적으로 Spring Boot는 Spring Boot 속성 인 --login.path에 대한 시스템 속성 - LOG_PATH를 제공하므로 application.properties에 logging.path를 정의하고 logback 구성에서 logback-spring.xml을 사용하면됩니다.

    나는 비슷한 문제와 그 문제를 해결하기 쉽다. 기본적으로 Spring Boot는 Spring Boot 속성 인 --login.path에 대한 시스템 속성 - LOG_PATH를 제공하므로 application.properties에 logging.path를 정의하고 logback 구성에서 logback-spring.xml을 사용하면됩니다.

    LOG_PATH에 대해 logback 을 선언해서는 안되며 필요할 때마다 사용하십시오.

    여기 저기에서 보아라.

  3. ==============================

    3.같은 문제가 발생했습니다. logback.xml에 엔트리 넣기

    같은 문제가 발생했습니다. logback.xml에 엔트리 넣기

    <property resource="application.properties" />
    

    application.properties에서

    FILE_LOG_PATTERN=###
    LOG_FILE=###
    

    응용 프로그램이 시작되면 작성된 디렉토리의 이름이 특성 파일에 정의 된 이름입니다.

  4. ==============================

    4.같은 문제가 발생했습니다. 내 자신의 logback.xml을 정의하려고 시도하고 내 application.properties 파일에 정의 된 logging.path 및 logging.file 속성을 사용하는 데 문제가있었습니다. 여기 어떻게 문제를 해결했는지 (그리고 해결했는지) 알아 보겠습니다.

    같은 문제가 발생했습니다. 내 자신의 logback.xml을 정의하려고 시도하고 내 application.properties 파일에 정의 된 logging.path 및 logging.file 속성을 사용하는 데 문제가있었습니다. 여기 어떻게 문제를 해결했는지 (그리고 해결했는지) 알아 보겠습니다.

    먼저 logging.path 및 logging.file 속성을 모두 정의 할 수 없음을 알게되었습니다. 여러 날 동안 여러 파일을 생성 할 RollingFileAppender를 사용하기 때문에 logging.file을 정의하지만 파일 접두사와 같이 사용하십시오.

    application.properties에서

    # Don't add the file type at the end.  This will be added in logback.xml
    logging.file=logs/my-app-name
    

    src / main / resources / logback.xml에 있습니다.

    <configuration>
    
        <property name="FILE_LOG_PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
    
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder> 
              <Pattern>${FILE_LOG_PATTERN}</Pattern>
            </encoder> 
        </appender>
    
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <encoder> 
              <Pattern>${FILE_LOG_PATTERN}</Pattern>
            </encoder> 
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}.log</fileNamePattern>
                <maxHistory>30</maxHistory>
            </rollingPolicy>
        </appender>
    
        <root level="INFO">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="FILE" />
        </root>
    
    </configuration>
    

    이것은 대부분의 경우 작동하는 것 같습니다. 파일에 내 자신의 FILE_LOG_PATTERN을 정의했습니다. 이것은 선택 사항입니다. 흥미로운 부분은 fileNamePattern입니다. 내 application.properties 파일의 logging.file을 LOG_FILE 변수로 올바르게 변환합니다. 여기서 유일한 실수는 Logback을 시작할 때 Logback이 아직 정의되지 않은 것에 대해 불평하고 LOG_FILE_IS_UNDEFINED_XXX라는 빈 파일을 현재 디렉토리에 생성한다는 것입니다. 그러나 내 속성의 실제 로그 파일이 만들어지고 올바르게 추가됩니다.

    앤드류

  5. ==============================

    5.당신의 경우는 아니지만 bootstrap.properties가 있으면 logging.path가 거기에 정의되어 있는지 확인하십시오.

    당신의 경우는 아니지만 bootstrap.properties가 있으면 logging.path가 거기에 정의되어 있는지 확인하십시오.

  6. ==============================

    6.logback.xml에서 LOG_PATH 속성을 선언하십시오.

    logback.xml에서 LOG_PATH 속성을 선언하십시오.

    <property name="LOG_PATH" value="" />
    

    여기서 로그 파일이 작성되는 디렉토리를 지정해야합니다. 이 필드를 비워두면 logback은 프로그램 실행시 새 디렉토리를 만듭니다. 생성 된 디렉토리의 이름은 LOG_PATH_IS_UNDEFINED입니다.

  7. ==============================

    7.logback에 엔트리 넣기 :

    logback에 엔트리 넣기 :

    <property name="DEV_HOME" value="c:/application_logs/ps-web" />
    

    그것을 참조하십시오 :

    $ {DEV_HOME}. % d {yyyy-MM-dd} .log

  8. ==============================

    8.POM 파일에 다음을 추가해보십시오.

    POM 파일에 다음을 추가해보십시오.

    <plugin>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.0.0</version>
                <configuration>
                    <filesets>
                        <fileset>
                            <directory>${basedir}/catalina.base_IS_UNDEFINED</directory>
                            <includes>
                                <include>**/*.log</include>
                            </includes>
                            <followSymlinks>false</followSymlinks>
                        </fileset>
                    </filesets>
                </configuration>
            </plugin>
    
  9. ==============================

    9.logback.xml의 이름을 your-logback.xml로 변경하고 application.properties에 logging.config = classpath : your-logback.xml을 추가하면됩니다.

    logback.xml의 이름을 your-logback.xml로 변경하고 application.properties에 logging.config = classpath : your-logback.xml을 추가하면됩니다.

  10. ==============================

    10.로그백 양식을 .yml 파일의 외부 경로로 호출하기 위해 다음과 같이 작동했습니다.

    로그백 양식을 .yml 파일의 외부 경로로 호출하기 위해 다음과 같이 작동했습니다.

    벌채 반출:   config : C : /folder/logback.xml

  11. ==============================

    11.application.properties에 logging.path와 logging.file을 설정 한 이후로 같은 문제가 있었지만, 일부 로그는 Spring Boot LogBack 구성 전에 생성되어 LOG_PATH_IS_UNDEFINED / LOG_FILE_IS_UNDEFINED 파일에 기록 된 다음 로그가 올바른 위치로 전환되었습니다.

    application.properties에 logging.path와 logging.file을 설정 한 이후로 같은 문제가 있었지만, 일부 로그는 Spring Boot LogBack 구성 전에 생성되어 LOG_PATH_IS_UNDEFINED / LOG_FILE_IS_UNDEFINED 파일에 기록 된 다음 로그가 올바른 위치로 전환되었습니다.

    2 가지 가능한 해결책을 찾았습니다.

    1) 부트 스트랩의 구성이 이전에 일어나기 때문에 logging.path 및 logging.file을 bootstrap.properties에 구성하십시오

    또는

    2) 응용 프로그램을 시작할 때 -Dlogging.path = ... -Dlogging.file = ...을 사용하여 logging.path 및 logging.file을 시스템 등록 정보로 설정하십시오

  12. ==============================

    12.Spring Boot Finchley (2.x)를 사용하고 있다면 application.properties 또는 application.yml 파일에 spring.application.name을 정의하고 Logback 구성에 다음을 추가 할 수 있습니다.

    Spring Boot Finchley (2.x)를 사용하고 있다면 application.properties 또는 application.yml 파일에 spring.application.name을 정의하고 Logback 구성에 다음을 추가 할 수 있습니다.

    <configuration>
      <springProperty scope="context" name="springAppName" source="spring.application.name"/>
    </configuration>
    

    이제 $ {springAppName}이 (가) 변수로 사용되어 로그 패턴을 처리 할 수 ​​있습니다.

  13. ==============================

    13.Spring Boot 환경이 준비되기 전에, Spring Boot 메인 클래스 나 SpringApplication은 loggerfactory를 초기화 할 것이고, 이것은 기본 설정 파일 (logback.groovy, logback.xml, logback-test.xml)을 감지 할 것이다. 그러나 이번에는 Spring Boot 응용 프로그램이 아직 시작되지 않았으므로 변수 LOG_PATH가 설정되지 않았습니다. 따라서 처음에는 logback 설정 파일의 이름을 변경하고 Spring 부팅 설정에서 logging.config로 수동으로 파일 이름을 설정해야합니다. 이런 방식으로 로그백은 파일 첨부기를 만드는 대신 기본적으로 콘솔 appender를 구성하고, Spring 부트 환경이 준비되면 enviromentready 이벤트를 발생시켜 LoggingApplicationListener에 의한 로그백 재구성을 발생시킵니다. 이 문제는 springboot의 페이지 https://github.com/spring-projects/spring-boot/issues/2558에서 확인할 수 있습니다.

    Spring Boot 환경이 준비되기 전에, Spring Boot 메인 클래스 나 SpringApplication은 loggerfactory를 초기화 할 것이고, 이것은 기본 설정 파일 (logback.groovy, logback.xml, logback-test.xml)을 감지 할 것이다. 그러나 이번에는 Spring Boot 응용 프로그램이 아직 시작되지 않았으므로 변수 LOG_PATH가 설정되지 않았습니다. 따라서 처음에는 logback 설정 파일의 이름을 변경하고 Spring 부팅 설정에서 logging.config로 수동으로 파일 이름을 설정해야합니다. 이런 방식으로 로그백은 파일 첨부기를 만드는 대신 기본적으로 콘솔 appender를 구성하고, Spring 부트 환경이 준비되면 enviromentready 이벤트를 발생시켜 LoggingApplicationListener에 의한 로그백 재구성을 발생시킵니다. 이 문제는 springboot의 페이지 https://github.com/spring-projects/spring-boot/issues/2558에서 확인할 수 있습니다.

  14. ==============================

    14.나는 당신이 오류 파일을 포함했다고 가정합니다. 바꿔주세요

    나는 당신이 오류 파일을 포함했다고 가정합니다. 바꿔주세요

    <include resource="org/springframework/boot/logging/logback/basic.xml" />
    

    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    

    그런 다음 시도해보십시오.

  15. ==============================

    15.버전 : 1.5.9

    버전 : 1.5.9

    bootstrap.yml

    spring:
      application:
        name: awesome-app
    # profile:
    #   active: dev
    logging:
      path: /code/awesome-app
    

    spring-logback.xml

    ${LOG_PATH}/awesome-app.log
    

    application.yml

    spring:
      application:
        name: awesome-app
    # profile:
    #   active: dev
    logging:
      path: /code/awesome-app
    

    spring-logback.xml

    ${LOG_PATH}/awesome-app.log
    

    맞춤 로그 구성 : https : //docs.spring.io/spring-boot/docs/1.5.6.RELEASE/reference/htmlsingle/#boot-features-custom-log-configuration

  16. from https://stackoverflow.com/questions/25251983/springboot-with-logback-creating-log-path-is-undefined-folder by cc-by-sa and MIT license