Log4j2 环境查找未在 AWS Linux EC2 实例中找到变量
Log4j2 environment lookup does not find variable in AWS Linux EC2 instance
我在 AWS Elastic Beanstalk EC2 实例中有一个 Tomcat WAR 项目 运行。我已配置实例以确保它们具有环境变量 CLUSTER_NAME
。我可以验证该变量在 EC2 实例中是否可用。
[ec2-user@ip-10* ~]$ cat /etc/environment
export CLUSTER_NAME=sandbox
ec2-user@ip-10* ~]$ echo $CLUSTER_NAME
sandbox
此变量在 Log4j2 XML 文件中查找如下:
<properties>
<property name="env-name">${env:CLUSTER_NAME}</property>
</properties>
env-name
属性 在 Coralogix appender 中使用如下:
<Coralogix name="Coralogix" companyId="--" privateKey="--"
applicationName="--" subSystemName="${env-name}">
<PatternLayout>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}{GMT+0}\t%p\t%c\t%m%n</pattern>
</PatternLayout>
</Coralogix>
我发现此查找不起作用,因为 env-name
在 Coralogix 仪表板中显示为 ${env:CLUSTER_NAME}
。如果我对其进行硬编码,该值将起作用。
如何修复此查找?这个有几个相关的问题,不过好像是指log4j1.x。 。我确保这个项目使用log4j2.
解决方案是在 /etc/profile.d/env.sh
中添加 CLUSTER_NAME 变量。通过以下查找,此变量在 log4j2.xml 中可用。
<property name="env-name">
${env:CORALOGIX_CLUSTER_NAME}
</property>
我仍然不清楚将变量添加到 /etc/environment
与 /etc/profile.d/env.sh
之间的区别。
我在 AWS Elastic Beanstalk EC2 实例中有一个 Tomcat WAR 项目 运行。我已配置实例以确保它们具有环境变量 CLUSTER_NAME
。我可以验证该变量在 EC2 实例中是否可用。
[ec2-user@ip-10* ~]$ cat /etc/environment
export CLUSTER_NAME=sandbox
ec2-user@ip-10* ~]$ echo $CLUSTER_NAME
sandbox
此变量在 Log4j2 XML 文件中查找如下:
<properties>
<property name="env-name">${env:CLUSTER_NAME}</property>
</properties>
env-name
属性 在 Coralogix appender 中使用如下:
<Coralogix name="Coralogix" companyId="--" privateKey="--"
applicationName="--" subSystemName="${env-name}">
<PatternLayout>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}{GMT+0}\t%p\t%c\t%m%n</pattern>
</PatternLayout>
</Coralogix>
我发现此查找不起作用,因为 env-name
在 Coralogix 仪表板中显示为 ${env:CLUSTER_NAME}
。如果我对其进行硬编码,该值将起作用。
如何修复此查找?这个有几个相关的问题,不过好像是指log4j1.x。 。我确保这个项目使用log4j2.
解决方案是在 /etc/profile.d/env.sh
中添加 CLUSTER_NAME 变量。通过以下查找,此变量在 log4j2.xml 中可用。
<property name="env-name">
${env:CORALOGIX_CLUSTER_NAME}
</property>
我仍然不清楚将变量添加到 /etc/environment
与 /etc/profile.d/env.sh
之间的区别。