我需要使用加密 key (AES) 配置 Log4j 2.x 日志记录。我在 log4j2.xml
中有这部分:
<Encryption keyId="${sd:encryptionKeyId}" key="${sd:encryptionKey}">
....
</Encryption>
出于测试目的,我使用在线生成工具生成 AES key 并将其直接放在那里而不是 ${sd:encryptionKey}
。它起作用了,即。我没有得到任何异常。
然后我想把键移到属性上,像这样:
<Property name="sd:encryptionKey">---my key here---</Property>
它没有用。我删除了 sd:
前缀,它再次起作用。
我的问题是:这个前缀代表什么?直接在此文件中将 key 设置为属性是正确的方法吗?
最佳答案
${sd:...
前缀用于 Log4j2 的内置 Structured Data lookup .
来自手册:
The StructuredDataLookup is very similar to the MapLookup in that it will retrieve values from StructuredDataMessages.
Log4j2 提供其他查找,因此您可以从系统属性、环境变量、Log4j2 线程上下文映射等中获取项目。
构建 custom lookup 也很容易从您的应用程序获取数据。
重要提示:查找需要美元和花括号才能工作。
为了您要实现的目标,我会像您在问题中所做的那样定义一个简单的属性,但也许将 key 放在环境变量中以防止其他人通过阅读日志配置发现 key .
定义环境变量是特定于操作系统的,但在 Linux 中,您可以在 ~/profile
中进行定义,在 Windows 中,您可以转到“控制面板”>“系统”>“高级”>“环境变量”。
然后使用 environment variable lookup允许 Log4j2 获取值。
<Property name="encryptionKey">${env:MY_AES_KEY}</Property>
关于java - 我注意到 log4j2.xml 中某些属性前面的前缀 'sd:'——它们代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47634727/