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

如何在运行时使用java中的log4j为日志设置文件夹?,java,log4j,Java,Log4j,我正在编写一个关于Java的简单套接字聊天。对于日志记录,我使用log4j。后端包括Server.class(处理一般逻辑)和ClientListener.class(接受并处理用户请求),它们都是线程 问题是: 我需要将日志保存到不同的目录中,这取决于要记录的事件是发生在用户X的服务器中还是发生在客户端侦听器中 我如何看待解决方案: Server始终登录到serv\u base\u dir/logs/logs.txt ClientListeners使用用户数据登录文件夹,例如。 serv_b

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

问题是: 我需要将日志保存到不同的目录中,这取决于要记录的事件是发生在用户X
服务器中还是发生在
客户端侦听器中

我如何看待解决方案:
  • Server
    始终登录到serv\u base\u dir/logs/logs.txt

  • ClientListeners
    使用用户数据登录文件夹,例如。 serv_base_dir/users/X/logs/logs.txt

问题是: 如何在服务器运行期间设置日志文件夹以保存日志

PS 我读过这篇文章,但它并不能完全解决我的问题,因为我需要在运行时设置文件夹,而不是在编译之前
如果您想在运行时之前设置名为specific user unknown的目录,我将非常乐意听取任何建议, 您可以通过在运行时将参数传递给log4j属性文件来解决这个问题

[样本代码]

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.属性]

# 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

如果要在运行时之前设置名为specific user unknown的目录, 您可以通过在运行时将参数传递给log4j属性文件来解决这个问题

[样本代码]

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.属性]

# 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

否,这可能会持续更改该值。我添加了示例代码。否,这可以连续更改值。我添加了示例代码。