java - Log4j 记录到单独的文件

标签 java networking log4j

我有一个应用程序监听特定端口来执行其任务。 该应用程序可以通过指定不同的实例在多个实例上运行 参数中的端口。

MyApp-1211.bat 包含

java MyApp 1211

MyApp-1311.bat 包含

java MyApp 1311

MyApp-1411.bat 包含

java MyApp 1411

此应用程序记录到一个文件。问题是所有三个实例都记录 到单个文件 myApp.log 中。有没有办法告诉 log4j 使用 不同的日志文件?像:

myApp-port1211.log  
myApp-port1311.log  
myApp-port1411.log  

最佳答案

当然可以。一种方法是创建多个配置文件(log4j.xml/log4j.properties) - 每个端口分别处理一个。加载配置文件后,您可以根据当前端口号选择正确的配置文件:

PropertyConfigurator.configure("log4j-" + port + ".properties");

相应地创建配置文件:log4j-1211.propertieslog4j-1311.properties、...

另一种方法是通过 Java 代码在运行时配置文件日志记录:

String logFilename = "./myApp-port" + port + ".log";
Layout layout = new PatternLayout("%d{ISO8601} %-5p [%t] %c{1}: %m%n");
FileAppender fileAppender = new FileAppender(layout, logFilename, false);
fileAppender.setThreshold(Level.DEBUG);
Logger.getRootLogger().addAppender(fileAppender);

关于java - Log4j 记录到单独的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7565756/

相关文章:

java - log4j冲突?

java - 扩展 Swing 的 UndoManager 以提供重复和多个撤消/重做

java - java中的handlebars.js实现是否存在?

perl - 是否有一些关于 Perl 网络编程的最新教程?

linux - docker-compose 无法将 veth(虚拟接口(interface))添加到网桥 docker0

linux - 在 Linux RHEL 6 上的重启后坚持 ifconfig lo 多播

java - 无法抑制 jar 中的日志输出

JavaFX:ExecutorService.awaitTermination 不通过绑定(bind)属性更新 UI

java - 我应该将哪个版本的 Java JDK 与 MALLET 一起使用?

java - 如何使用 less logger.isDebugEnabled()