OWASP ESAPI 忽略按包名称过滤的 log4j 记录器
log4j logger filtering by package name is ignored for OWASP ESAPI
我目前为 log4j 配置了一个 XML 配置文件,该文件有两个附加程序 "file" 和 "email"。这两个都工作正常,但我不想为 ESAPI 内部生成的错误发送电子邮件,所以我将一个新的记录器放入 XML 文件中。完整的记录器列表是:
<logger name="com.companyname" additivity="false">
<level value="INFO" />
<appender-ref ref="file" />
<appender-ref ref="email" />
</logger>
<logger name="org.hibernate" additivity="false">
<level value="ERROR" />
<appender-ref ref="file" />
<appender-ref ref="email" />
</logger>
<logger name="org.springframework" additivity="false">
<level value="ERROR" />
<appender-ref ref="file" />
<appender-ref ref="email" />
</logger>
<logger name="org.owasp" additivity="false">
<level value="ERROR" />
<appender-ref ref="file" />
</logger>
<root>
<level value="ERROR" />
<appender-ref ref="file" />
<appender-ref ref="email" />
</root>
但是,这不起作用。我仍然会收到有关 ESAPI 中生成的错误的电子邮件(具体来说,org.owasp.esapi.reference.Log4JLogger class)。
我也尝试过使用 "org.owasp.esapi"、"org.owasp.esapi.reference"、"org.owasp.esapi.reference.Log4JLogger",甚至 "org",但所有这些都无法以完全相同的方式工作。
我唯一能做的就是从根记录器中删除 "email" appender-ref,我不想这样做,它会停止发送 ESAPI 错误的邮件。有人知道这里发生了什么吗?
我意识到 ESAPI 将您在 esapi.properties 的 属性 Logger.ApplicationName 中加上“:”的名称添加到 class 包中。例如在我的例子中,如果我有一个 class mypackage.MyClass ESAPI 打印:ExampleApplication:mypackage.MyClass - [EVENT SUCCESS Anonymous:null@unknown ....
我需要输入我的 log4j.xml
<logger name="ExampleApplication:mypackage.MyClass" additivity="false">
<level value="INFO" />
<appender-ref ref="file" />
</logger>
我不知道这是否可能是同一个问题,因为你的问题不在所有者中 class,希望这可以帮助你。
事实证明,ESAPI 使用与应用程序其余部分完全不同的方案来生成其类别名称。在疯狂调试 ESAPI 和 Log4J 代码后,我确定 ESAPI 产生的错误属于 "IntrusionException" 类别,因此正确的记录器是:
<logger name="org.owasp" additivity="false">
<level value="ERROR" />
<appender-ref ref="file" />
</logger>
我目前为 log4j 配置了一个 XML 配置文件,该文件有两个附加程序 "file" 和 "email"。这两个都工作正常,但我不想为 ESAPI 内部生成的错误发送电子邮件,所以我将一个新的记录器放入 XML 文件中。完整的记录器列表是:
<logger name="com.companyname" additivity="false">
<level value="INFO" />
<appender-ref ref="file" />
<appender-ref ref="email" />
</logger>
<logger name="org.hibernate" additivity="false">
<level value="ERROR" />
<appender-ref ref="file" />
<appender-ref ref="email" />
</logger>
<logger name="org.springframework" additivity="false">
<level value="ERROR" />
<appender-ref ref="file" />
<appender-ref ref="email" />
</logger>
<logger name="org.owasp" additivity="false">
<level value="ERROR" />
<appender-ref ref="file" />
</logger>
<root>
<level value="ERROR" />
<appender-ref ref="file" />
<appender-ref ref="email" />
</root>
但是,这不起作用。我仍然会收到有关 ESAPI 中生成的错误的电子邮件(具体来说,org.owasp.esapi.reference.Log4JLogger class)。
我也尝试过使用 "org.owasp.esapi"、"org.owasp.esapi.reference"、"org.owasp.esapi.reference.Log4JLogger",甚至 "org",但所有这些都无法以完全相同的方式工作。
我唯一能做的就是从根记录器中删除 "email" appender-ref,我不想这样做,它会停止发送 ESAPI 错误的邮件。有人知道这里发生了什么吗?
我意识到 ESAPI 将您在 esapi.properties 的 属性 Logger.ApplicationName 中加上“:”的名称添加到 class 包中。例如在我的例子中,如果我有一个 class mypackage.MyClass ESAPI 打印:ExampleApplication:mypackage.MyClass - [EVENT SUCCESS Anonymous:null@unknown ....
我需要输入我的 log4j.xml
<logger name="ExampleApplication:mypackage.MyClass" additivity="false">
<level value="INFO" />
<appender-ref ref="file" />
</logger>
我不知道这是否可能是同一个问题,因为你的问题不在所有者中 class,希望这可以帮助你。
事实证明,ESAPI 使用与应用程序其余部分完全不同的方案来生成其类别名称。在疯狂调试 ESAPI 和 Log4J 代码后,我确定 ESAPI 产生的错误属于 "IntrusionException" 类别,因此正确的记录器是:
<logger name="org.owasp" additivity="false">
<level value="ERROR" />
<appender-ref ref="file" />
</logger>