Spring boot Spring引导和log4j:在运行时更改log4j的日志级别和日志文件

Spring boot Spring引导和log4j:在运行时更改log4j的日志级别和日志文件,spring-boot,log4j,Spring Boot,Log4j,我的应用程序使用spring boot和log4j。 为了在运行时更改日志级别,我使用了以下log4j.properties: # Root logger option log4j.rootLogger= ${LOGGER.LEVEL}, stdout, file # Redirect log messages to console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.

我的应用程序使用spring boot和log4j。 为了在运行时更改日志级别,我使用了以下log4j.properties:

    # Root logger option
log4j.rootLogger= ${LOGGER.LEVEL}, stdout, file

# Redirect log messages to console
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-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.stdout.Threshold=ERROR

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${log.file.path}//${project.artifactId}.log
log4j.appender.file.MaxFileSize=5MB
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
log4j.appender.file.Threshold= ${LOGGER.LEVEL}
为了在运行时更改日志记录级别,我使用了一个外部application.properties,其中我更改了LOGGER.level的值。但不幸的是,没有结果


你能告诉我该怎么解决这个问题吗?

我想你不需要额外的属性文件。如果您想在运行时更改日志级别,只需通过编程方式即可

Logger logger = Logger.getLogger(mylogger);
logger.setLevel(Level.INFO);
使用
Level
可以在需要时保存当前日志级别:

Level previousLevel = logger.getLevel();

编辑1:

请尝试以下配置:

log4j.rootLogger=INFO(or what you want), stdout

# Redirect log messages to console
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-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.stdout.Threshold=ERROR(or what you want)

# Redirect log messages to a log file, support file rolling.
log4j.logger.mylogger=${LOGGER.LEVEL},file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=${log.file.path}//${project.artifactId}.log
log4j.appender.file.MaxFileSize=5MB
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
#log4j.appender.file.Threshold= ${LOGGER.LEVEL}

您必须在代码中使用
mylogger

外部app.properties或命令行中的LOGGER.LEVEL用于定义日志文件的日志级别。例如:LOGGER.LEVEL=INFO或LOGGER.LEVEL=ERROR@Angel您的意思是,
logger.level.info
将写入一个日志文件,
logger.level.error
将写入另一个日志文件?不,我的意思是我只更改日志文件的日志消息的级别,而不更改控制台的日志消息的级别。@Angel我编辑了我的答案。也许你必须根据自己的需要重构它。我认为这是一个与你类似的问题: