如何将属性“sun.net.www.protocol.http.HttpURLConnection.level = ALL”格式化为log4j.xml?

gk7wooem  于 2023-01-20  发布在  .NET
关注(0)|答案(2)|浏览(212)
    • bounty将在6天后过期**。回答此问题可获得+50声望奖励。The Student希望引起更多人关注此问题。

我需要在我的www.example.com中添加以下行:logging.properties the line:

sun.net.www.protocol.http.HttpURLConnection.level = ALL

但是这个文件是使用xml格式的log4j.xml生成的,我不知道如何正确地将这个属性格式化为xml来生成这一行。
使用log4j-1.2.8、JRE和JDK 1.8_181、Wildfly 10.1.0。最终版

kxe2p93d

kxe2p93d1#

乍一看,无论使用properties还是xml配置文件,您都无法使用Log4j配置sun.net.www.protocol.http.HttpURLConnection的日志级别。
正如您在source code of the HttpURLConnection class中所看到的,它的日志记录基于PlatformLogger,而PlatformLogger又使用java.util.logging
PlatformLogger javadoc描述了应该如何配置它:
平台日志记录器为JRE组件提供了一个API来记录消息。这使运行时组件能够消除对日志记录工具的静态依赖性,并推迟java.util.logging初始化,直到启用它。此外,如果日志记录模块不存在,则可以使用PlatformLogger API。
如果未启用日志记录功能,平台日志记录器将根据默认日志记录配置(见下文)输出日志消息。在此实现中,它不记录发出日志消息的堆栈帧信息。
当日志记录工具被启用时(在启动或运行时),将为每个平台日志记录器创建java.util.logging.Logger,并且所有日志消息将被转发到Logger进行处理。
当满足以下条件之一时,日志记录设施被“启用”:
1.设置系统属性“java. util. logging. config. class”或“java.util.logging.config.file”
1.引用了将触发日志记录初始化的java.util.logging.LogManager或java.util.logging.Logger。
默认日志记录配置:全局日志记录级别=信息处理程序= java.util.logging.控制台处理程序java.util.logging.控制台处理程序.级别=信息java.util.logging.控制台处理程序.格式化程序= java.util.logging.简单格式化程序
基本上,您需要配置系统属性java.util.logging.config.file,该属性指向具有所需属性的适当properties文件:

handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.level=INFO
sun.net.www.protocol.http.HttpURLConnection.level=ALL

请考虑查看此related SO question,它提供了不同的示例和有关如何操作的进一步信息。
正如该问题中所建议的,您也可以使用系统属性javax.net.debug

-Djavax.net.debug=all

如果要集成Log4j和java.util.logging,可以尝试使用SLF4J和相应的bridges等库。This related SO question提供了更多信息。

gzszwxb4

gzszwxb42#

备注:由于Log4j 1.2.8是almost 20 years old,8年前已宣布停产,并且带有several outstanding vulnerabilities,因此我认为您不想使用它。

正如您在jccampanero's answer中所看到的,HttpURLConnection类使用PlatformLogger进行日志记录,在Java 7或8中,PlatformLogger将所有日志记录委托给java.util.logging.LogManager
java.util.logging.LogManager有几种替代实现,但WildFly使用它自己的实现JBoss LogManager,这是最容易使用的。要修改日志配置,您只需编辑服务器的配置并添加:

<subsystem xmlns="urn:jboss:domain:logging:3.0">
    ...
    <logger category="sun.net.www.protocol.http.HttpURLConnection">
        <level name="DEBUG"/>
    </logger>
</subsystem>

(cf. documentation)。

相关问题