2009-08-24 14 views
48

Czy ktoś może mi pomóc, jak skonfigurować log4j do logowania do określonego pliku, który określam w czasie wykonywania. Nazwa i ścieżka pliku dziennika są generowane podczas uruchamiania -czas i aplikacja musi zalogować się do tego konkretnego pliku.skonfigurować log4j, aby zalogować się do niestandardowego pliku w czasie wykonywania

Zasadniczo wpisy pliku appender w pliku log4j.properties wskazują na plik dziennika, który będzie używany przez aplikację.Jednak w tym przypadku chciałbym odczytać ścieżkę pliku dziennika z wiersza poleceń i zalogować się do tego konkretnego pliku .

Jak mogę to osiągnąć?

Odpowiedz

52

Adaptacja dokumentacji 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

Nie działa dla log4j 2.7 –

80

Można również zrobić to z pliku log4j.properties. Korzystanie przykładowy plik poniżej dodałem właściwość systemu $ {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 

Nazwa pliku dziennika można następnie ustawić dwa różne sposoby:

  1. jako linia poleceń właściwość systemowa przekazana do java "-Dlogfile.name = {logfile}"
  2. W programie java bezpośrednio przez ustawienie właściwości systemowej (PRZED wykonaniem jakichkolwiek połączeń z log4j).

    System.setProperty ("nazwa pliku dziennika", "ścieżka do nazwy ścieżki/pliku dziennika");

+6

prace wspaniale z plikiem konfiguracyjnym xml również – avianey

+4

_ "właściwość systemu przekazana do java' -Dlogfile.name = {plik_logiczny} '" _ jest dokładnie tym, czego szukałem – snooze92

+0

Great - dokładnie to, czego szukam - ale co się stanie, jeśli właściwość systemowa "logfile.name" NIE jest ustawiona w wierszu polecenia? Zgłoszono wyjątek Runtime? – t3az0r

0

Może być również wykonane przez ogłoszenia określić w log4j.properties złożyć

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

pracę i sam został przetestowany

// 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); 
Powiązane problemy