如何在Java中使用log4j在运行时为日志设置文件夹?

时间:2019-02-08 06:19:18

标签: java log4j

我正在用Java编写一个简单的套接字聊天。对于日志记录,我使用log4j。后端包括Server.class(处理通用逻辑)和ClientListener.class(接受并处理用户的请求),它们都是线程。

问题是:

我需要根据用户 X ServerClientListener中是否发生了要记录的事件,将日志保存到不同的目录中。

我如何看待解决方案:

  • Server始终登录到 serv_base_dir / logs / logs.txt

  • ClientListeners使用用户数据(例如 serv_base_dir / users / X /logs/logs.txt

问题是:

如何在服务器运行期间设置要在其中保存日志的日志文件夹?

PS

我已阅读Log4j config - different logs to different files 文章,但是它不能完全解决我的问题,因为我需要在运行时而不是在编译之前设置文件夹 我很乐意提供任何建议

1 个答案:

答案 0 :(得分:0)

如果您要设置一个名为“特定用户”的目录,直到运行时才知道, 您可以通过在运行时将参数传递给log4j属性文件来解决它。

Pass argument to log4j file

[示例代码]

import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.Logger;

public class MyClass
{
    public static Logger mLogger = Logger.getLogger(MyClass.class.getName());

    public static void main(String[] args)
    {
        System.setProperty("test", "hello");
        PropertyConfigurator.configure("./log4j.properties");

        mLogger.debug("Hello world!");

        // modify variable and re-configure
        System.setProperty("test", "bye");
        PropertyConfigurator.configure("./log4j.properties");

        mLogger.debug("byebye");
    }
}

[log4j.properties]

# Root logger option
log4j.rootLogger=DEBUG, file

# Redirect log messages to a log file, support file rolling.
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./${test}.log
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n