Java Log4j记录到单独的文件
我有一个应用程序,它监听特定端口以执行其任务。 此应用程序可以通过指定不同的 参数中的端口 MyApp-1211.bat包含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
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在静态代码块中有一个内置的默认初始化,可能在您有机会做些什么之前执行该初始化。此环境变量阻止此执行。您可能希望执行此操作,以确保您正从所需的配置开始。