java - 我注意到 log4j2.xml 中某些属性前面的前缀 'sd:'——它们代表什么?

标签 java xml encryption log4j log4j2

我需要使用加密 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/

相关文章:

java.lang.NoClassDefFoundError : javax/ejb/EJBObject 错误

java - 安卓-Arduino蓝牙通讯: app stops reading inputstream

android - 如何让按钮适合屏幕?

java - 如何从 SOAP 响应中获取 xml 元素的值? (安卓)

python - 如何使用加密模块加密变量?

java - 使用 Glide 在 ImageView 中加载图像

java - 访问 x-www-form-urlencoded ServletRequest 的输入流

c# - VS2005.net 2.0 c# : Best way to create xml file

java - CryptoJS AES 加密和 JAVA AES 解密值不匹配

c++ - 将 C++ builder 6 项目转换为 C++ builder 2010