2015-01-26 2 views
2

У меня есть программа, которая когда-то была запущена, она будет выполнять поток (несколько классов) несколько раз - каждый в другом потоке. Поток один и тот же - только разные параметры, отправленные ему каждый раз при его вызове.Log4j - файл журнала для каждого потока

Каждый поток будет выполняться по собственной теме.

Я хочу, чтобы иметь возможность определять файл-приложение (по существу, файл журнала) для каждого потока - поэтому, как только поток начинается, он программно создает свой собственный файл журнала и записывает на него.

Искал, но не смог найти простое решение для этого Поможете?

Ta

ответ

2

Вы можете сделать это программно. например .:

class Task implements Runnable { 

    private final String path; 
    private final String name; 

    public Task(String path, String name) { 
     this.path = path; 
     this.name = name; 
    } 

    public void run() { 
     // Create file appender 
     FileAppender appender = new FileAppender(); 
     appender.setFile(path); 
     appender.setLayout(new PatternLayout("%d [%t] %-5p %c - %m%n")); 
     appender.activateOptions(); 

     // Get logger and add appender 
     Logger logger = Logger.getLogger(name); 
     logger.setAdditivity(false); 
     logger.addAppender(appender); 

     // Task 
     logger.info("Hello World!"); 

     // Remove appender 
     logger.removeAppender(appender); 
    } 

} 

public static void main(String[] args) { 
    new Thread(new Task("logs/A.log", "com.company.A")).start(); 
    new Thread(new Task("logs/B.log", "com.company.B")).start(); 
} 
+0

Вы прибил его. Цените это paul – oven

+0

Добро пожаловать. –

0
  1. Определить обработчики для каждого файла журнала в файле log4j, например, таким образом:

  2. Теперь добавьте что-то подобное в том же файле XML:

    <logger category="a.b.c.d"> 
         <level name="INFO"/> 
         <handlers> 
          <handler name="a.b.c.d_FILE"/> 
         </handlers> 
    
+0

Хотел создать что progrematically как я не знаю количество потоков заранее - см ответ Павла – oven

0

Вы можете реализовать его самостоятельно:

RandomAccessFile logfile; 

public void initLogger(String logPath) { 
    File fl = new File(logPath); 
    long fileLength = fl.length(); 
    logfile = new RandomAccessFile(fl, "rw"); 
    logfile.seek(fileLength); 
} 

public void log(String text) throws IOException { 
    logfile.writeChars(text); 
    logfile.writeChar('\n'); 
} 
+0

я хотел, что в log4j ... – oven

Смежные вопросы