2009-08-24 8 views
48

Quelqu'un peut-il me guider pour savoir comment configurer log4j pour se connecter à un fichier spécifique que je spécifie à l'exécution. Le nom et le chemin du fichier journal sont générés lors de l'exécution -time et l'application doit se connecter à ce fichier particulier.configurer log4j pour se connecter au fichier personnalisé à l'exécution

En règle générale, les entrées du fichier d'entrée dans le fichier log4j.properties pointent vers le fichier journal qui sera utilisé par l'application. Cependant, dans ce cas, j'aimerais lire le chemin du fichier journal depuis la ligne de commande. .

Comment puis-je y parvenir?

Répondre

52

Adapté de la documentation 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

Ne fonctionne pas pour log4j 2.7 –

80

Vous pouvez aussi le faire à partir du fichier log4j.properties. En utilisant le fichier exemple ci-dessous, j'ai ajouté la propriété système $ {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 

Le nom du fichier journal peut alors être défini de deux façons différentes:

  1. En ligne de commande, propriété système passée à Java "-Dlogfile.name = {fichier journal}"
  2. Dans le programme Java directement en définissant une propriété système (AVANT de faire des appels à log4j).

    System.setProperty ("fichier_journal", "chaîne de nom de chemin d'accès/fichier journal");

+6

œuvres très bien avec le fichier de configuration xml aussi – avianey

+4

_ "propriété système passée à java' -Dlogfile.name = {fichier journal} '" _ est exactement ce que je cherchais – snooze92

+0

Super - exactement ce que je cherche - mais que se passe-t-il si la propriété système 'logfile.name' n'est PAS définie sur la ligne de commande? Exception d'exécution levée? – t3az0r

0

peut aussi être fait par ces propriétés définissent dans log4j.properties fichier

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

de travail et même a été testé

// 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); 
Questions connexes