当前位置: 首页 > 知识库问答 >
问题:

log4j属性文件在Spring Boot中没有创建日志文件

谷梁嘉运
2023-03-14
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
    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);
        ....
 }

朋友们,请复习一下,让我知道里面的问题。请不要标记它重复,因为我已经尝试了可用的解决方案。可能是我错过了一些:)

共有1个答案

吴才俊
2023-03-14

下面是log4j2与Spring Boot集成的一个工作示例。尝试了Gradle构建,但也可以用于maven构建。

需要考虑的要点(如果您正在使用spring boot):

  1. 从所有配置模块中删除Spring默认日志记录模块
  2. 为spring Boot添加log4j2 starter
  3. 通过向属性logging.config=
  4. 添加值来通知spring有关log4j2配置文件
  5. 确保log4j2配置与文档一致(否则日志记录将无法正常工作)
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'
    }
}

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);
    }
}

Application.Log

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

 类似资料:
  • 我使用log4j进行日志记录,并且使用.log格式的所有日志文件,其结构简单,如; log4j.rootcategory=info,C,R log4j.appender.c=org.apache.log4j.consoleappender log4j.appender.c.layout=org.apache.log4j.patternlayout log4j.appender.r.layout=o

  • 问题内容: 我正在尝试配置log4j以将消息记录到文件中。现在,确实使用我提供的名称创建了该文件,但是日志未写入该文件。我的代码: 我文件的内容: 运行此命令时,将在控制台中获得以下输出: 该文件确实在我的主目录中创建。但是它是空的。 有什么想法我做错了吗?我正在使用log4j 1.2.17版。 问题答案: 输出似乎是Java标准日志记录框架(JUL)发出的默认格式。 因此,有两种可能性(想到):

  • 我试图在springboot中配置log4j2。我已经从pom.xml.中删除(排除)了登录依赖项,我正在名为log4j2.xml的资源文件夹下使用此xml 这是我的控制器类。 我在这里错过了什么吗?我尝试使用application.properties也使用最新版本的Log4j2.But仍然没有created.When我运行应用程序,我看不到任何日志文件在xml中指定的路径上动态创建。

  • 我使用.property文件在特定路径中创建日志文件,但我使用它创建单个文件。以下是我的属性文件代码: 上面的代码是我的xyz.properties文件,我想使用这个配置文件创建多个日志。我的属性配置文件创建多个文件,但不将不同的不同日志放在日志文件中。我使用下面的代码从Java调用它: log放入两个日志文件。 我参考以下链接: log4j2:为多个日志动态创建日志文件 Log4j2的Routi

  • 我正在尝试配置log4j以将消息记录到文件中。现在,文件确实是用我提供的名称创建的,但是日志并没有写入文件中。我的代码: 我的文件: 运行此命令时,我在控制台中得到以下输出: 文件确实在我的主目录中创建。但它是空的。 知道我做错了什么吗?我使用的是log4j版本1.2.17。

  • 问题内容: 我们有几个同时运行的作业,它们必须为log4j使用相同的配置信息。他们都使用相同的附加程序将日志转储到一个文件中。有没有一种方法可以让每个作业动态命名其日志文件,以使它们保持独立? 谢谢 汤姆 问题答案: 您可以为每个作业传递Java系统属性吗?如果是这样,您可以像这样进行参数化: 然后在您的log4j.properties中: 您可以使用主机环境(例如)中的值填充Java系统属性,该