programing

스프링 부트에서의 Log4j.properties

newnotes 2023. 3. 21. 22:32
반응형

스프링 부트에서의 Log4j.properties

스프링 부팅 시 사용자 지정 Log4j.properties 파일을 로드하는 방법

application.properties의 내 코드는 여기에 있습니다.

logging.file=E:/Apps_Tek/apps-webservices-log/apps-webservices.log
logging.level.*=INFO
logging.config=log4j.properties

log4j.properties의 내 코드는 여기에 있습니다.

log4j.rootLogger=INFO,ConsoleAppender,FileAppender

log4j.appender.ConsoleAppender=org.apache.log4j.ConsoleAppender
log4j.appender.ConsoleAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.ConsoleAppender.layout.ConversionPattern=%-7p %d [%t] %c [%X{userName}] [%X{accessToken}] - %m%n

log4j.appender.FileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.FileAppender.File=E:/Apps_Tek/apps-webservices-log/apps-webservices.log
log4j.appender.FileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.FileAppender.layout.ConversionPattern=%-7p %d [%t] %c [%X{userName}] [%X{accessToken}] - %m%n

그러나 예상된 출력을 얻을 수 없습니다.즉, 스프링 부트가 log4j.properties 파일을 로드하지 않습니다.스프링 부트에는 자체 기본 로깅이 있습니다.

log4j.properties 파일이 있습니다.src/main/resources

src/main/resources에 있는 경우 application.properties의 logging.config 속성에 logging4j.properties 파일을 매핑하려면 어떻게 해야 합니까?

필요한 변경을 모두 제안해 주십시오.

잘 부탁드립니다.

스프링 부트에서 자체 기본 로깅(로그백) 대신 log4j를 사용하려면 기본 로깅을 제외하고 spring 부트의 log4j 종속성을 포함시켜야 합니다.pom.xml:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j</artifactId>
</dependency>   

그러면 log4j.properties 파일이 검색됩니다.src/main/resources.

또한 log4j.properties 파일 내의 application.properties에 정의된 속성을 사용하는 경우에도

예를 들어, 당신이 원하는 것은log.file.path에 정의되어 있다application.properties에 사용합니다.log4j.properties

그런 다음 내부 필터링을 정의해야 합니다.pom.xml:

<filters>
    <filter>src/main/resources/application.properties</filter>
</filters>
<resources>
    <resource>
        <directory>src/main/resources</directory>
        <includes>
            <include>log4j.properties</include>
        </includes>         
        <filtering>true</filtering>
    </resource>
</resources>

이렇게 하면 다음과 같은 이점이 있습니다.

log4j.appender.file.File=${log.file.path}/${project.artifactId}.log

당신의 안에서log4j.properties파일

기본 로깅을 배제하고 spring boot의 log4j 의존관계를 pom.xml에 포함시키려면 다음 절차를 수행합니다.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>

log4j.properties 파일 내의 application.properties에서 정의된 log4j 속성을 사용하려면 application.properties 파일에서 아래 속성을 추가해야 합니다.

logging.config = src/main/main/log4j2.properties

그런 다음 스프링 부트가 log4j2.properties 파일에서 속성을 읽습니다.

log4j2.properties 파일에 다음 속성을 추가합니다.

name=PropertiesConfig
appenders = console, file

appender.console.type = Console
appender.console.name = ConsoleAppender
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{MM:dd HH:mm:ss.SSS} [%t] [%level] [%logger{36}] - %msg%n

appender.file.type = File
appender.file.name = FileAppender
appender.file.fileName=/home/ubuntu/application.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern= %d{MM:dd HH:mm:ss.SSS} [%t] [%level] [%logger{36}] - %msg%n

loggers=file
logger.file.name=com.project
logger.file.level = debug
logger.file.appenderRefs = file
logger.file.appenderRef.file.ref = FileAppender

rootLogger.level = debug
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = ConsoleAppender

application.properties 파일 내에서 'src/main/src/log4j2.properties'를 지정할 필요가 없는 다른 작업이 있습니까?

메모: 사용하고 있는 스프링부트 버전은 2.1.3 입니다.풀어주다

참고 자료 : https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html

pom.xml 파일이 올바른 log4j 의존관계를 포함하도록 설정되어 있지 않은 것 같습니다.그렇게 하면 자동으로 동작합니다.spring-boot-sample-actuator-log4j의 예를 참조하십시오.이 프로젝트에는 spring-boot-starter-log4j 아티팩트가 포함되어 있습니다.이것에 의해, 현재의 src/main/resources 로케이션으로부터 log4j.properties를 픽업 할 수 있게 되어, 로그는 불필요하게 됩니다.* 등록 정보입니다.또한 스프링 부트 스타터 로그도 제외해야 할 수 있습니다.그래도 해결되지 않을 것 같으면 POM 파일을 제가 볼 수 있는 곳에 올려주세요.이것이 당신에게 도움이 되는지 알려주세요.

누군가 같은 문제에 직면했을 경우 스프링 부트스타터 의존성이 없었기 때문에 스프링 부트스타터 Web 의존성에 추가해야 했습니다.이렇게 되어 있습니다.

<!-- Spring Boot Starter Web -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <!-- Excluding logback dependencies to use l4j2 -->
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

그런 다음 Log4j2 종속성을 추가합니다.

<!-- Add Log4j2 Dependency -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

log4j2.properties 파일은 이제부터 설정 로깅에 사용됩니다.

언급URL : https://stackoverflow.com/questions/29225777/log4j-properties-in-spring-boot

반응형