Log4j2 导致 PreferIP6 失败
Log4j2 causing PreferIP6 to fail
如果我运行下面的代码
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?
您是否尝试过避免在包含您的 main()
的 class 中声明您的 Log4j 记录器?如果您将静态记录器声明为该主 class 的属性,Log4j 将在您的第一条 main()
指令之前初始化。
但是,我很想知道 Log4j 如何阻止您使用 IPv6。
注意:如果您想在命令行中使用java -jar
启动您的应用程序时设置java.net.preferIPv6Addresses
,您可以使用:[=17] =]
java -Djava.net.preferIPv6Addresses=true -jar myapp.jar
(你这边没用,可能是因为你把 -D
放在了 -jar
之后?)
您是否尝试过在初始化静态 Logger 字段之前将静态初始化程序块添加到设置 属性 的主要 class?
static {
System.setProperty("java.net.preferIPv6Addresses", "true");
}
如果我运行下面的代码
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?
您是否尝试过避免在包含您的 main()
的 class 中声明您的 Log4j 记录器?如果您将静态记录器声明为该主 class 的属性,Log4j 将在您的第一条 main()
指令之前初始化。
但是,我很想知道 Log4j 如何阻止您使用 IPv6。
注意:如果您想在命令行中使用java -jar
启动您的应用程序时设置java.net.preferIPv6Addresses
,您可以使用:[=17] =]
java -Djava.net.preferIPv6Addresses=true -jar myapp.jar
(你这边没用,可能是因为你把 -D
放在了 -jar
之后?)
您是否尝试过在初始化静态 Logger 字段之前将静态初始化程序块添加到设置 属性 的主要 class?
static {
System.setProperty("java.net.preferIPv6Addresses", "true");
}