簡體   English   中英

log4j 屬性文件未在 spring 引導中創建日志文件

[英]log4j properties file not creating log file in spring boot

我無法使用 log4j2 spring boot 2.4 生成日志文件,它只能在 eclipse 控制台中打印日志。 我已經嘗試過 web 提供的多種解決方案,例如:排除、將文件重命名為 log4j2、多次更改屬性(有些不使用 log4j.xx,有些不使用它)不知道該怎么辦?

屬性文件:

log4j.rootLogger=DEBUG, stdout, file
log4j.logger.infoLogger=DEBUG, infoLogger
log4j.additivity.infoLogger = false

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-dd-MM HH:mm:ss,SSS} %-10p [%l] : %m%n

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:/logs/application.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=2
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %-10p %l -- %m%n

log4j.appender.infoLogger=org.apache.log4j.RollingFileAppender
log4j.appender.infoLogger.File=C:/logs/applicationInfo.log
log4j.appender.infoLogger.MaxFileSize=10MB
log4j.appender.infoLogger.MaxBackupIndex=2
log4j.appender.infoLogger.layout=org.apache.log4j.PatternLayout
log4j.appender.infoLogger.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %-10p %l -- %m%n

pom.xml:

    I am doing the exclusions from all spring dependencies, as mention in some solutions.

<dependency>
    <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>

演示 Java 文件:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Controller {
    
        protected final  Logger logger = LogManager.getLogger(Controller.class);
        ....
 }

朋友,請檢查並讓我知道其中的問題。 請不要將其標記為重復,因為我已經嘗試了可用的解決方案。 可能我錯過了一些:)

嘗試將文件路徑更改為另一個目錄。 C 驅動器有時會出現一些權限問題。

您正在為 log4j2 使用 spring 引導依賴項。 屬性文件的語法與 log4j 不同。 這就是為什么不會創建日志文件的原因。 您必須遷移您的屬性,請參閱從 log4j 遷移到 log4j2 - 屬性文件配置

以下是 log4j2 與 Spring 引導集成的工作示例。 嘗試使用 Gradle 構建,但也可用於 maven 構建。

需要考慮的幾點(如果您使用的是 spring 引導):

  1. 從所有配置模塊中刪除 Spring 默認日志記錄模塊
  2. 為 spring 啟動添加 log4j2 啟動器
  3. 通過向屬性logging.config=
  4. 確保 log4j2 配置按照文檔正確(否則日志記錄將無法按預期工作)

項目配置:

build.gradle

plugins {
    id 'org.springframework.boot' version '2.5.0'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    id 'idea'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation('org.springframework.boot:spring-boot-starter') {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    }
    implementation('org.springframework.boot:spring-boot-starter-log4j2')

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
    useJUnitPlatform()
}

configurations {
    all {
        exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
    }
}

log4j.properties

rootLogger.level = INFO
property.filename = application.log
appenders = R, console

appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d %5p [%t] (%F:%L) - %m%n

appender.R.type = RollingFile
appender.R.name = File
appender.R.fileName = ${filename}
appender.R.filePattern = ${filename}.%d{yyyy-MM-dd}
appender.R.layout.type = PatternLayout
appender.R.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n
appender.R.policies.type = Policies
appender.R.policies.time.type = TimeBasedTriggeringPolicy
appender.R.policies.time.interval = 1

rootLogger.appenderRefs = R, console

rootLogger.appenderRef.console.ref = STDOUT
rootLogger.appenderRef.R.ref = File

應用程序屬性

logging.config=classpath:log4j2.properties

AppController.java

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
@RestController
public class AppController {

private static final Logger LOG = LogManager.getLogger(AppController.class);
    @RequestMapping(value = "/refresh_configs", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
    public ResponseEntity<?> refreshConfig() {
        LOG.info("refresh_configs");
        return new ResponseEntity<>("OK", HttpStatus.OK);
    }
}

應用程序日志

2021-06-12 22:39:00 HelperApplication [INFO] Starting HelperApplication using Java 11.0.9 on 88e9fe567a24 with PID 66713 (/Users/${USER}/Desktop/Helper/out/production/classes started by ${USER} in /Users/${USER}/Desktop/Helper)
2021-06-12 22:39:00 HelperApplication [INFO] No active profile set, falling back to default profiles: default
2021-06-12 22:39:01 TomcatWebServer [INFO] Tomcat initialized with port(s): 8080 (http)
2021-06-12 22:39:01 Http11NioProtocol [INFO] Initializing ProtocolHandler ["http-nio-8080"]
2021-06-12 22:39:01 StandardService [INFO] Starting service [Tomcat]
2021-06-12 22:39:01 StandardEngine [INFO] Starting Servlet engine: [Apache Tomcat/9.0.46]
2021-06-12 22:39:01 [/] [INFO] Initializing Spring embedded WebApplicationContext
2021-06-12 22:39:01 ServletWebServerApplicationContext [INFO] Root WebApplicationContext: initialization completed in 580 ms
2021-06-12 22:39:01 Http11NioProtocol [INFO] Starting ProtocolHandler ["http-nio-8080"]
2021-06-12 22:39:01 TomcatWebServer [INFO] Tomcat started on port(s): 8080 (http) with context path ''
2021-06-12 22:39:01 HelperApplication [INFO] Started HelperApplication in 1.187 seconds (JVM running for 1.944)
2021-06-12 22:39:01 ApplicationAvailabilityBean [INFO] Application availability state LivenessState changed to CORRECT
2021-06-12 22:39:01 ApplicationAvailabilityBean [INFO] Application availability state ReadinessState changed to ACCEPTING_TRAFFIC
2021-06-12 22:39:17 [/] [INFO] Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-06-12 22:39:17 DispatcherServlet [INFO] Initializing Servlet 'dispatcherServlet'
2021-06-12 22:39:17 DispatcherServlet [INFO] Completed initialization in 0 ms
2021-06-12 22:39:17 AppController [INFO] refresh_configs
2021-06-12 22:49:33 AppController [INFO] refresh_configs
2021-06-12 23:01:52 ApplicationAvailabilityBean [INFO] Application availability state ReadinessState changed from ACCEPTING_TRAFFIC to REFUSING_TRAFFIC

參考:
https://stackoverflow.com/a/39703897/2987755

https://docs.spring.io/spring-boot/docs/2.0.x/reference/html/howto-logging.html#howto-configure-log4j-for-logging

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM