web-dev-qa-db-fra.com

configurer log4j pour se connecter à un fichier personnalisé au moment de l'exécution

Quelqu'un peut-il m'indiquer comment configurer log4j pour qu'il se connecte à un fichier spécifique que je spécifie au moment de l'exécution. Le nom et le chemin du fichier journal sont générés au moment de l'exécution et l'application doit se connecter à ce fichier particulier.

Généralement, les entrées de fichier appender 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 à partir de la ligne de commande et le journaliser dans ce fichier particulier.

Comment puis-je atteindre cet objectif ?

58
Fell

Adapté de la documentation de 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");
   }
}
57
Vinay Sajip

Vous pouvez également le faire à partir du fichier log4j.properties. En utilisant l'exemple de fichier 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{yyyyMMdd@HH\:mm\:ss,SSS}\:%c - %m%n

Le nom du fichier journal peut ensuite être défini de deux manières différentes:

  1. En tant que ligne de commande, propriété système transmise à Java "-Dlogfile.name = {logfile}"
  2. Dans le programme Java directement en définissant une propriété système (AVANT d'appeler log4j).

    System.setProperty ("logfile.name", "nom de chemin/nom du fichier journal chaîne");

92
jmq

Fonctionnement 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);

Peut aussi être fait par cette propriété définir dans le fichier 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
Sumit