【问题标题】:Log4j2 causing PreferIP6 to failLog4j2 导致 PreferIP6 失败
【发布时间】:2016-08-23 19:01:48
【问题描述】:

如果我运行以下代码

public class NetworkTester {
public static void main( String[] args ) {
    System.setProperty( "java.net.preferIPv6Addresses", "true" );
    System.setProperty( "java.net.preferIPv4Stack", "false" );
    try {
        InetAddress addr = InetAddress.getByName( "www.google.com" );
        System.out.println( addr );
            if ( addr instanceof Inet4Address ) {
                System.out.println( 4 );
            }
            if ( addr instanceof Inet6Address ) {
                System.out.println( 6 );
            }
    } catch ( UnknownHostException e ) {
        e.printStackTrace();
    }
}}

我得到以下输出

www.google.com/2607:f8b0:4009:801:0:0:0:2004
6

但是,如果我添加该行

private static Logger log4j = LogManager.getLogger();

我导入以下内容

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

我明白了

www.google.com/4.59.40.94
4

我正在使用 log4j2 2.6.2 和 jdk1.8.0_51。如果我使用 -Djava.net.preferIPv6Addresses=true 作为 vm 参数,我会得到一个 IPv6 地址。但是我正在开发的应用程序是作为可执行 jar 文件运行的,我无法找到一种方法来让可执行 jar 运行 vm 参数,而无需编写某种 bat 文件或脚本。 如何让我的应用程序更喜欢 ipv6 并运行 log4j?

【问题讨论】:

    标签: java logging java-8 log4j2 system-properties


    【解决方案1】:

    您是否尝试在初始化静态 Logger 字段之前将静态初始化程序块添加到设置属性的主类?

    static {
        System.setProperty("java.net.preferIPv6Addresses", "true");
    }
    

    【讨论】:

    • 好主意,我应该考虑一下!
    • 这成功了! Andy 知道为什么需要在初始化 log4j 之前设置 System 属性?
    • 我的猜测是 log4j 在初始化期间查找本地主机名,除非另有说明,否则这反过来使用 ip v4。
    【解决方案2】:

    您是否尝试避免在包含您的 main() 的类中声明您的 Log4j Logger?如果你声明一个静态 Logger 作为这个主类的属性,Log4j 将在你的第一条main() 指令之前初始化。

    不过,我很想了解 Log4j 如何阻止您使用 IPv6。

    注意:如果您想在命令行中使用java -jar 启动应用程序时设置java.net.preferIPv6Addresses,您可以使用:

    java -Djava.net.preferIPv6Addresses=true -jar myapp.jar
    

    (它对您不起作用,可能是因为您在-jar 之后放置了-D?)

    【讨论】:

    • 感谢您的回复。在命令行 arg 中使用 -D 是可行的,但正如我所说,该应用程序是一个可运行的 JAR 文件,因此除非我创建一个 .bat 文件,否则我不能使用命令行参数。此外,我们希望在建立网络连接之前和之后记录参数和错误。该网络连接必须是 IPv6 连接,并且在我声明 Log4j 记录器的那一刻,应用程序仅使用 IPv4。
    猜你喜欢
    • 1970-01-01
    • 2013-12-10
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2020-03-13
    • 2014-02-03
    相关资源
    最近更新 更多