2009-08-24 1 views
48

Может ли кто-нибудь указать мне, как я могу настроить log4j для входа в определенный файл, который я указываю во время выполнения. Имя и путь к файлу журнала генерируются при запуске -time, и приложение должно войти в этот файл.настроить log4j для входа в пользовательский файл во время выполнения

Обычно записи файлов в файле log4j.properties указывают на файл журнала, который будет использоваться приложением. Однако в этом случае я хотел бы прочитать путь к файлу журнала из командной строки и войти в этот конкретный файл ,

Как я могу это достичь?

ответ

52

адаптировано из документации log4j:

import org.apache.log4j.Level; 
import org.apache.log4j.Logger; 
import org.apache.log4j.SimpleLayout; 
import org.apache.log4j.FileAppender; 

public class SimpandFile { 
    static Logger logger = Logger.getLogger(SimpandFile.class); 
    public static void main(String args[]) { 

     // setting up a FileAppender dynamically... 
     SimpleLayout layout = new SimpleLayout();  
     FileAppender appender = new FileAppender(layout,"your filename",false);  
     logger.addAppender(appender); 

     logger.setLevel((Level) Level.DEBUG); 

     logger.debug("Here is some DEBUG"); 
     logger.info("Here is some INFO"); 
     logger.warn("Here is some WARN"); 
     logger.error("Here is some ERROR"); 
     logger.fatal("Here is some FATAL"); 
    } 
} 
+1

Не работаю log4j 2.7 –

80

Вы также можете сделать это из файла log4j.properties. Использование файла примера ниже я добавил свойство системы $ {} logfile.name:

# logfile is set to be a RollingFileAppender 
log4j.appender.logfile=org.apache.log4j.RollingFileAppender 
log4j.appender.logfile.File=${logfile.name} 
log4j.appender.logfile.MaxFileSize=10MB 
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern=[%-5p]%d{[email protected]\:mm\:ss,SSS}\:%c - %m%n 

Имя файла журнала может быть установлен двумя способами:

  1. Как в командной строке, системное свойство, переданное в java "-Dlogfile.name = {logfile}"
  2. В программе java напрямую, установив системное свойство (ПЕРЕД вызовом log4j).

    System.setProperty ("logfile.name", "некоторая строка имени пути/файла журнала");

+6

работы отлично с xml конфигурационным файлом тоже – avianey

+4

_ "системное свойство передано java' -Dlogfile.name = {logfile} '" _ именно то, что я искал – snooze92

+0

Отлично - именно то, что я ищу - но что произойдет, если системное свойство «logfile.name» НЕ установлено в командной строке? Исключение времени выполнения? – t3az0r

0

Может быть также сделан этими свойствами определяет в файл log4j.properties

log4j.appender.logfile=org.apache.log4j.RollingFileAppender 
log4j.appender.logfile.maxFileSize=5000KB 
log4j.appender.logfile.maxBackupIndex=5 
log4j.appender.logfile.File=/WebSphere/AppServer/profiles/Custom01/error.log 
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout 
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p [%t] %C %M %c{1}:%L - %m%n 
0

Working и тот же было протестирован

// setting up a FileAppender dynamically... 
SimpleLayout layout = new SimpleLayout(); 
RollingFileAppender appender = new RollingFileAppender(layout,"file-name_with_location",true); 
        appender.setMaxFileSize("20MB"); 
        logger.addAppender(appender);