将 log4j2 的配置文件从 .xml 转换为 .yml 时,我遇到了这些属性变量的问题。 我运行良好的 .xml 文件如下所示,有 2 个属性变量“log-path”和“log-name”:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config" packages="com.mypackage">
<Properties>
<Property name="log-path">/var/work/logs/my-service</Property>
<Property name="log-name">my-service</Property>
</Properties>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{DEFAULT} %5p [%20C{1}] [%4L] [trace%X{requestId}] [user%X{userName}] [mid%X{mid}] - %m%n%exception"/>
</Console>
<RollingFile name="File" fileName="${log-path}/${log-name}.log" append="true"
filePattern="${log-path}/${log-name}-%d{yyyy-MM}/${log-name}-%d{yyyy-MM-dd}-%i.log.gz">
<PatternLayout charset="UTF-8" pattern="%d{DEFAULT} %5p [%20C{1}] [%4L] [trace%X{requestId}] [user%X{username}] [mid%X{mid}] - %m%n%exception"/>
<Policies>
<SizeBasedTriggeringPolicy size="200 MB" />
<TimeBasedTriggeringPolicy />
</Policies>
<DefaultRolloverStrategy max="10000" compressionLevel="9"/>
</RollingFile>
//..............................
我的 .yml 文件如下所示:
Configuration:
packages: "com.mypackage"
Properties:
Property:
- name: log-path
value: "/var/work/logs/my-service"
- name: log-name
value: "my-service"
Appenders:
Console:
name: Console
target: SYSTEM_OUT
PatternLayout:
pattern: "%d{DEFAULT} %5p [%20C{1}] [%4L] [trace%X{requestId}] [user%X{userName}] [mid%X{mid}] - %m%n%exception"
RollingFile:
name: File
fileName: ${log-path}/${log-name}.log
append: true
filePattern: ${log-path}/${log-name}.log-%d{yyyy-MM}/${log-name}.log-%d{yyyy-MM-dd}-%i.log.gz
PatternLayout:
charset: "UTF-8"
pattern: "%d{DEFAULT} %5p [%20C{1}] [%4L] [trace%X{requestId}] [user%X{username}] [mid%X{mid}] - %m%n%exception"
// ......................
这里的问题是“log-path”和“log-name”的值没有按照我的预期检索:
"/var/work/logs/my-service/my-service.log"
,而是在我的应用程序目录中生成日志文件,路径为:"${log-path}/${log-name}.log"
.
但是只有当我声明超过 1 个变量时才会出现问题。如果我只是声明一个这样的变量,一切都会再次正常工作:
Configuration:
packages: "com.mypackage"
Properties:
Property:
name: log-path
value: "/var/work/logs/my-service"
Appenders:
Console:
name: Console
target: SYSTEM_OUT
PatternLayout:
pattern: "%d{DEFAULT} %5p [%20C{1}] [%4L] [trace%X{requestId}] [user%X{userName}] [mid%X{mid}] - %m%n%exception"
RollingFile:
name: File
fileName: ${log-path}/my-service.log
append: true
filePattern: ${log-path}/my-service.log-%d{yyyy-MM}/my-service.log-%d{yyyy-MM-dd}-%i.log.gz
PatternLayout:
charset: "UTF-8"
pattern: "%d{DEFAULT} %5p [%20C{1}] [%4L] [trace%X{requestId}] [user%X{username}] [mid%X{mid}] - %m%n%exception"
// ......................
我尝试搜索但找不到任何东西。你们能帮我吗?如何声明多个属性变量?
我能够使用您的配置和少量添加成功运行一个简单的应用程序(向 RollingFileAppender 添加策略和几个记录器,请参阅下面的列表)。
源文件:
Main.java
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Main {
private static final Logger logger = LogManager.getLogger(Main.class);
public static void main(String[] args) {
logger.info("hello");
}
}
log4j2.yaml
Configuration:
packages: "com.igorgoose"
Properties:
Property:
- name: log-path
value: "C:\\Users\\i.shchepov\\Desktop\\projects\\log4j2-yaml-test"
- name: log-name
value: "my-service"
Appenders:
Console:
name: Console
target: SYSTEM_OUT
PatternLayout:
pattern: "%d{DEFAULT} %5p [%20C{1}] [%4L] [trace%X{requestId}] [user%X{userName}] [mid%X{mid}] - %m%n%exception"
RollingFile:
name: File
Policies:
SizeBasedTriggeringPolicy:
size: 1 KB
fileName: ${log-path}/${log-name}.log
append: true
filePattern: ${log-path}/${log-name}.log-%d{yyyy-MM}/${log-name}.log-%d{yyyy-MM-dd}-%i.log.gz
PatternLayout:
charset: "UTF-8"
pattern: "%d{DEFAULT} %5p [%20C{1}] [%4L] [trace%X{requestId}] [user%X{username}] [mid%X{mid}] - %m%n%exception"
Loggers:
Root:
level: debug
AppenderRef:
- ref: Console
Logger:
- name: com.igorgoose
level: debug
AppenderRef:
- ref: File
pom.xml
<dependencies>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.13.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>2.10.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.10.0</version>
</dependency>
</dependencies>
但是,我能够通过不小心弄乱 log4j2 配置中的缩进来重现您的问题,因此
Loggers
属性与 Configuration
处于同一级别。
log4j2.yaml(搞砸了)
Configuration:
packages: "com.igorgoose"
# ------the rest of configuration-----------
Loggers:
Root:
level: debug
AppenderRef:
- ref: Console
Logger:
- name: com.igorgoose
level: debug
AppenderRef:
- ref: File
因此,请确保您的缩进正确,并让我知道问题是否仍然存在。希望这有帮助!