1

I am writing a simple sockets-chat on Java. For logging i use log4j. The back-end includes Server.class (handles general logic) and ClientListener.class (takes and operates with user's requests), both of them are threads.

The problem is:

I need to save logs into different directories depending on whether an event to be logged has occured in the Server or in a ClientListener of user X.

How I see a solution:

  • Server always logs into serv_base_dir/logs/logs.txt

  • ClientListeners logs into folers with users data e.g. serv_base_dir/users/X/logs/logs.txt

The question is:

How to set a logs folder where they are to be saved in during server is running?

PS

I have read Log4j config - different logs to different files article, but it does not completely solve my problem because I need to set the folder during the runtime, not before compillation I would be greatful to any advice

Mike
  • 31
  • 1
  • 7

1 Answers1

0

If you want to set a directory named specific user unknown until runtime, you can solve it by passing argument to log4j property file during runtime.

Pass argument to log4j file

[Sample code]

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
ChipLimo
  • 71
  • 1
  • 6