Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Log4j记录到单独的文件_Java_Networking_Log4j - Fatal编程技术网

Java Log4j记录到单独的文件

Java Log4j记录到单独的文件,java,networking,log4j,Java,Networking,Log4j,我有一个应用程序,它监听特定端口以执行其任务。 此应用程序可以通过指定不同的 参数中的端口 MyApp-1211.bat包含 java MyApp 1211 java MyApp 1311 java MyApp 1411 MyApp-1311.bat包含 java MyApp 1211 java MyApp 1311 java MyApp 1411 MyApp-1411.bat包含 java MyApp 1211 java MyApp 1311 java MyApp 1411

我有一个应用程序,它监听特定端口以执行其任务。 此应用程序可以通过指定不同的 参数中的端口

MyApp-1211.bat包含

java MyApp 1211
java MyApp 1311
java MyApp 1411
MyApp-1311.bat包含

java MyApp 1211
java MyApp 1311
java MyApp 1411
MyApp-1411.bat包含

java MyApp 1211
java MyApp 1311
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.properties,log4j-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);

您可以参考log4j.xml中的系统属性,如下所示:

<appender name="ROLL" class="org.apache.log4j.rolling.RollingFileAppender">
                <!-- The active file to log to -->
                <param name="file" value="mylog${MY_PARAM}.log" />
</appender>


如果您按照其他答案的建议自己加载属性配置文件,请不要忘记通过添加env来禁用log4j默认初始化。程序命令行的变量定义:

-Dlog4j.defaultInitOverride=true

配置文件上是否可能存在相同的情况?因为我当前使用的是log4j属性文件。如何将其转换为属性文件而不是xml文件?@user960740 log4j在静态代码块中有一个内置的默认初始化,可能在您有机会做些什么之前执行该初始化。此环境变量阻止此执行。您可能希望执行此操作,以确保您正从所需的配置开始。