programing

스프링 부트 - 로그 파일이 기록되지 않았습니다(로그).파일이 존중되지 않음)

randomtip 2023. 3. 22. 22:55
반응형

스프링 부트 - 로그 파일이 기록되지 않았습니다(로그).파일이 존중되지 않음)

Spring Boot을 사용하고 있는데 로그 출력을 파일에 쓰고 싶습니다.

문서에 따르면 이것은 단순히 설정만으로 이루어집니다.

logging.file=filename.log

출력은 하지만, 「」는 정상적으로 동작합니다.filename.log작성되지 않았습니다. 수동으로 되지 않습니다.가가뭘 쳤??

logging.file.namelogging.file

spring-boot-parent(from version 2.2.0) logging. , 「 」는파일은 권장되지 않습니다.

질문에는 않아서 하지 않습니다.logging.file자산이 존중되지 않습니다.

은 '천하태평'입니다.logback-spring.xml같은 디렉토리에 있는 조르쥬의 대답에서application.properties상주합니다.매뉴얼에 따르면 Spring Boot에서 픽업됩니다.제 경우엔 이런 일이 일어나지 않는 것 같아요.

추가로 더 돼요.logging.config=classpath:logback-spring.xml츠키노의 내관분 의 application.properties 진행 중입니다.

logging.config=classpath:logback-spring.xml
logging.file=logs/logfile.log

( )을 했습니다.logs(미국의

저 같은 경우에는 어플리케이션 속성 파일에서 아래를 사용했습니다.

logging.file

대신 다음 것을 사용해야 합니다.

logging.file.name

그 후, 다이렉트 패스 파일에 로그를 넣을 수 있게 되었습니다.

저도 같은 문제가 있었어요.파일 시스템에 대한 파일 권한 때문일 수 있습니다.응용 프로그램 폴더는 root이 소유했지만 ./logs는 프로세스 소유자가 소유합니다.그 때문에, 다음의 기능은 기능하지 않았습니다.

logging.file=my.log

근데 이게...

logging.file=/opt/myapp/logs/my.log

스프링 부트:버전 2.4.3

이든 '어느쪽이든'에서 .application.properties 일::logging.file.name ★★★★★★★★★★★★★★★★★」logging.file.path

예를 들어 다음과 같습니다.

logging.file.name=logs/myapp.log
logging.file.path=logs

logs디렉토리로 이동합니다.클래스 경로에 자동으로 생성됩니다.

권장되지 않는 이 파일을 .~/.m2/repository/org/springframework/boot/spring-boot/2.4.3/spring-boot-2.4.3.jar!/org/springframework/boot/logging/LoggingSystemProperties.class

도움이 될지는 모르겠지만 로그백을 사용하고 있습니다.Spring-Boot 및 는 다음과 .

여기에 이미지 설명 입력

파일: logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="logback.xsd">

    <property resource="\application.properties"/>

    <appender name="FILE"
        class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${app.logPathPrefix}/myproject.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${app.logPathPrefix}/myproject.%d{yyyy-MM-dd}.%i.log.gz</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>50MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>

        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%logger:%line] %msg%n
            </pattern>
        </encoder>
    </appender>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%level] [%thread] [%logger:%line] %msg%n
            </pattern>
        </encoder>
    </appender>


    <logger name="org.springframework" level="INFO" />
    <logger name="com.mycompany" level="INFO" />
    <logger name="org.hibernate" level="DEBUG" />


    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
    </root>

</configuration>

파일: application.properties

app.logPathPrefix=/var/log/myproject

로컬 파일 파일에 출력을 쓸 수 있는 방법은 다음과 같습니다.콘솔 로깅을 디세블로 하고 파일에만 출력을 쓰려면 console-appender.xml 대신 file-appender.xml을 Import하는 템플릿 기능(날짜 포맷)을 이용하기 위해 logback-spring.xml이라고 부릅니다.이를 수행하려면 다음 코드를 logback-spring.xml 파일에 붙여넣어야 합니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
    <include resource="org/springframework/boot/logging/logback/file-appender.xml" />
    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration> 

또한 application.properties에 다음 항목을 추가해야 합니다.

logging.file=myapplication.log

이 로그 파일 myapplication.log는 springboot에 의해 생성됩니다.

응용 프로그램 구조 트리는 다음과 같습니다.

여기에 이미지 설명 입력

더 재미있게 놀고 싶다면 다음과 같이 base.xml을 maven 의존관계에서 찾을 수 있습니다.

여기에 이미지 설명 입력

Springboot 부모 버전을 확인합니다.

2.3.x+의 경우 속성은 logging.file.name=yourapplog.log 입니다.

Maven을 사용하는 경우 종속성을 추가합니다.

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.6</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.5</version>
</dependency>

여기서 특정 디렉토리 'src/main/resources/log4j.properties'에 저장해야 하는 'log4j.properties'라는 파일을 지정해야 합니다.

다음은 파일의 예를 제시하겠습니다.

# Root logger option
log4j.rootLogger=INFO, file, stdout
log4j.logger.org.springframework.ws.client.MessageTracing.sent=TRACE
log4j.logger.org.springframework.ws.client.MessageTracing.received=TRACE

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# log4j.appender.springlog.Threshold=INFO
log4j.appender.springlog.layout=org.apache.log4j.PatternLayout
log4j.appender.springlog.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=D:/example/filename.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

다음 항목을 Import합니다.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

다음과 같이 로거 변수를 선언합니다.

final static Logger logger = Logger.getLogger(TheClassYourIn.class);

수업시간에 이렇게 쓰세요.

logger.info("Well hello world then ");

난 이렇게 하면 돼이 답변이 당신에게 도움이 되기를 바랍니다. 행운을 빌어요!

PS: log4j.appender.file.File='directory'는 로그를 저장할 위치를 지정하는 방법입니다.디렉토리를 지정하지 않고 filename.log로 두면 이 파일은 프로젝트 dir에 자동으로 생성됩니다.

D드라이브와 같은 특정 디렉토리에 로그파일을 배치하고 싶은 경우 스프링 부트프로젝트에서 아래의 변경을 할 수 있습니다.

1. logback-spring.xml 컨피규레이션파일을 생성하여 로그를 작성할 패키지 이름을 지정합니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    
        <logger name="com.example.demo" 
        level="DEBUG" >
           
        </logger>
</configuration>

2. 또한 application.properties 파일에 다음과 같이 추가합니다.

logging.config=classpath:logback-spring.xml
logging.file.name=F:/Springbootlogs/filename.log

주의: 전술한 변경은 버전 2.4.3에 대한 것입니다.

제 경우 실수로 서브모듈 중 하나에 "logback.xml" 파일을 추가했기 때문에 이 문제가 발생하였습니다.삭제하면 문제 없습니다.

답장이 늦어서 죄송합니다.봄의 벌목꾼은 자신의 클래스 패스에서 그 속성을 읽는 것 같다.우선 순위 때문에 제공된 속성을 존중하지 않습니다.

몇 가지 요령:

  1. 에서는 속성 합니다.springApplication.setDefaultProperties(properties);
public static void main(String[] args) {
        SpringApplication springApplication = new SpringApplication(MainClass.class);
        Properties properties = new Properties();
        properties.put("logging.file", logDirectory);
        springApplication.setDefaultProperties(properties);
        springApplication.run(args);
    }
  1. 을 JVM 변수인 JVM으로 전달합니다.-Dlogging.file=/location/output.log.

다른 로깅 속성을 정의하기 위해서는 같은 방법을 따라야 하기 때문에 위의 두 가지 모두 최적이 아닙니다.

솔루션

하고 그 에 모든 한 후 합니다.-Dspring.config.location이것은 나의 다른 문제에서 파생된 것이며, 이렇게 해서 나는 그것을 해결했다.제가 시도했던 다른 해결책과 그들의 과제를 알기 위해 그것을 체크하세요.

Windows operating system에서도 같은 문제가 발생했습니다.로그를 변경했을 뿐입니다.파일 주소:/customer_revisor/flight_reservation_system/system/reservation.log

주의: 사용한Spring-boot 버전은 2.4.1 입니다.

Windows 운영체제에서는 파일 탐색기에서 파일 경로를 복사하면 D:\customer_projects\flight_reservation_system\logs\flight_reservation.log와 같은 파일 경로가 생성됩니다.

위의 파일 경로는 작동하지 않습니다.따라서 파일 경로를 D:/customer_projects/flight_reservation_system/logs/reservation.log와 같이 변경해야 합니다.그러면 지정한 경로에 로그 파일이 생성됩니다.감사합니다.

방금 스프링 부트에서 제공하는 로깅 메커니즘을 사용했습니다.logback.xml' 파일에 다음과 같이 적었습니다.

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml" />
<include resource="org/springframework/boot/logging/logback/file- appender.xml" />
<root level="INFO">
<appender-ref ref="FILE" />
</root>
</configuration>

application.properties와 logback.xml 파일을 모두 같은 패키지 'src/main/resources' 아래에 둡니다.application.properties 파일에 파라미터가 1개 추가되었습니다.

logging.file = xyz.log

나한테는 완벽하게 잘 작동했어.

스프링 부트 중인 경우 application.properties 파일에 다음 속성을 직접 추가하여 로깅 수준을 설정하고 로깅 패턴을 맞춤화하고 로그를 외부 파일에 저장할 수 있습니다.

이들은 최소 << maximum minimum minimum minimum minimum minimum minimum levels levels levels levels 。

소등 << FATAL << ERROR << WARN << INFO << DEBUG << TRACE << ALL >>

# To set logs level as per your need.
logging.level.org.springframework = debug
logging.level.tech.hardik = trace

# To store logs to external file
# Here use strictly forward "/" slash for both Windows, Linux or any other os, otherwise, your logs it won't work.      
logging.file=D:/spring_app_log_file.log

# To customize logging pattern.
logging.pattern.file= "%d{yyyy-MM-dd HH:mm:ss} - %msg%n"

로그를 보다 생생하게 커스터마이즈하려면 이 링크를 클릭하십시오.

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html

또, Windows(경로에 「\」를 사용)가 제공하는 대로 패스를 카피했을 뿐이기 때문에, 같은 문제에 직면하고 있었습니다.

경로에서 : back slash("\")를 forward slash("/")로 변경하는 것만으로 수정됩니다.

주의: 패스에는 엄밀하게 슬래시("/")를 사용해야 합니다.OS는 제약사항이 아닙니다.

ex:- logging.file.name=D:/Logs/server.log

정상적으로 동작하는 명령줄 인수를 사용하여 스프링 부트서비스를 실행하고 있습니다.모든 스프링 부트 콘솔 로그가 파일에 기록됩니다..application.properties: 파파 。 다음 중 하나:2.0.5.RELEASE

창:

java -jar target\microservice-0.0.1.jar --logging.file=C:\\logs\\microservice.log

Linux의 경우

java -jar target\microservice-0.0.1.jar --logging.file=\var\log\microservice.log

이 경우 일반적인 Configuration을 붙여넣고 로깅 패턴(logging.pattern.file)을 엉망으로 했을 가능성이 높습니다.

코멘트로 문제를 해결했습니다(파일은 작성되었지만 콘솔 출력이 있고 루트 로깅 레벨이 DEBUG로 설정되어 있는데도 파일에는 아무것도 써지지 않았습니다).그 이외의 에러는 발생하지 않았습니다.

[edit] 다른 경우(항상 이 문제에 부딪히는 것 같습니다), AppInitializer는 물론 logback.xml이 포함된 웹 애플리케이션(WAR)에서 클래스가 제거된 JAR 파일을 참조하고 있었습니다.패키지 이름이 완전히 달라 Spring auto config로 스캔할 수 없습니다.logback.xml이 클래스 패스에서 검출되어 모든 것을 완전히 망친 것 같습니다.WAR을 언급하는 것이 해킹이라는 것을 알았지만, 나는 그것을 고치고, 다른 것을 부수는 빠른 해결책을 희망하고 있었다.마니의 대답은 관련이 있다.

Springboot 2.4.2의 경우 Below Application.yml 설정은 다음과 같이 동작합니다.

logging:
    file:
        name: logpath

내 문제는 파일이 자동으로 생성되지 않고 프로젝트 루트 폴더에 파일을 생성해도 작성되지 않아 결국 폴더와 파일을 생성해 보았다.logs/logfile.lo및 설정logging.file.name=scripts/logfile.logapplication.parameties 파일도 동작했습니다.

application.properties에 다음 항목이 없는 경우

logging.file = logFileName.log

다음 것을 사용하다

logging.file.name= appLogName.log

스크린샷을 참조해 주세요.여기에 이미지 설명 입력

언급URL : https://stackoverflow.com/questions/38527175/spring-boot-no-log-file-written-logging-file-is-not-respected

반응형