【问题标题】:Log4j logging to separate filesLog4j 记录到单独的文件
【发布时间】:2011-11-25 19:36:03
【问题描述】:

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

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  

【问题讨论】:

    标签: java networking log4j


    【解决方案1】:

    当然可以。一种方法是创建多个配置文件(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);
    

    【讨论】:

    • 在配置文件上可能是一样的,因为我当前使用的是 log4j 属性文件
    【解决方案2】:

    您可以参考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>
    

    现在您只需将参数插入到系统属性中,或者以编程方式将 System.setProperty("MY_PARAM", args[0]) 插入到您的 main() 方法中,或者在运行 java 时:

    java -DMY_PARAM=1234 MyApp 1234

    如果您从 bat 或 shell 脚本运行应用程序,显然可以避免重复:

    java -DMY_PARAM=%1 MyApp %1

    详情请参阅以下参考资料:

    http://wiki.apache.org/logging-log4j/Log4jXmlFormat

    Using system environment variables in log4j xml configuration

    【讨论】:

    • 这如何转换为属性文件而不是 xml 文件?
    【解决方案3】:

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

    -Dlog4j.defaultInitOverride=true
    

    【讨论】:

    • @user960740 Log4j 在一个静态代码块中有一个内置的默认初始化,它可能在你有机会做某事之前就执行了。此环境变量阻止此执行。您可能希望这样做以确保您从所需的配置开始。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多