log4j 配置文件名称如果不是默认的话,使用 main 方法启动程序的时候是无法打印日志的,这个时候需要手动指定配置文件。
1. 在启动参数中配置
在 Java 应用程序的 main 方法中加载 Log4j2 配置通常不需要显式操作,因为 Log4j2 会自动查找并加载配置文件。然而,如果你的应用程序需要在运行时动态加载或覆盖默认配置,你可以使用以下方法:
使用系统属性:你可以在启动 Java 应用时通过系统属性指定 Log4j2 的配置文件位置。例如,在命令行启动应用时添加以下参数:
java -Dlog4j.configurationFile=path/to/your/log4j2.xml com.example.MainClass
这里 path/to/your/log4j2.xml 是你的 Log4j2 配置文件的路径。
2. 编程方式设置配置
如果你想在 main 方法中动态加载配置,可以使用 Configurator 类:
import org.apache.logging.log4j.core.config.Configurator;
public class Main {public static void main(String[] args) {
// 设置配置文件路径
String configLocation = "path/to/your/log4j2.xml";
// 动态加载配置
Configurator.initialize(null, configLocation);
// 现在你可以使用 Log4j2 进行日志记录
Logger logger = LogManager.getLogger(Main.class);
// ...
}
}
3. 使用 ClassLoader
如果配置文件位于类路径中,Log4j2 会自动查找 log4j2.xml 或 log4j2.json 等文件。你也可以通过 ClassLoader 获取资源输入流并初始化配置:
import java.io.InputStream;
import org.apache.logging.log4j.core.config.ConfigurationSource;
import org.apache.logging.log4j.core.config.Configurator;
import org.apache.logging.log4j.core.config.builder.api.ConfigurationBuilder;
import org.apache.logging.log4j.core.config.builder.impl.BuiltConfiguration;
public class Main {public static void main(String[] args) {
// 获取配置文件的输入流
InputStream inputStream = Main.class.getClassLoader().getResourceAsStream("log4j2.xml");
try {
// 创建配置源
ConfigurationSource source = new ConfigurationSource(inputStream);
// 读取配置并初始化
BuiltConfiguration builtConfig = new ConfigurationBuilder<>().configure(source).build();
Configurator.initialize(builtConfig);
} catch (Exception e) {System.err.println("Error initializing Log4j2: " + e.getMessage());
} finally {
// 关闭输入流
if (inputStream != null) {
try {inputStream.close();
} catch (IOException ioe) {System.err.println("Error closing input stream: " + ioe.getMessage());
}
}
}
// 现在你可以使用 Log4j2 进行日志记录
Logger logger = LogManager.getLogger(Main.class);
// ...
}
}
请确保在使用上述方法时,配置文件路径正确无误,并且配置文件内容符合 Log4j2 的语法要求。