I am facing problems with these property variables when converting config files of log4j2 from .xml to .yml. My well working .xml file looks like this, with 2 property variables "log-path" and "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>
//..............................
My .yml file looks like this:
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"
// ......................
The problem here is that the values โโof "log-path" and "log-name" are not retrieved as I expected: "/var/work/logs/my-service/my-service.log"
, instead the log file is generated right in my application directory with the path: "${log-path}/${log-name}.log"
.
But it only has problems when I declare more than 1 variable. If I just declare a variable like this, everything works fine again:
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"
// ......................
I tried searching but couldn't find anything. Can you guys help me? How do I declare multiple property variables?