2016-06-15 2 views
1

Ich möchte den Pfad zur log4j-Protokolldatei aus einer anderen properties-Datei abrufen. Also, wenn ich diese:Apache log4j 2.3 Protokollpfad von einer anderen Datei abrufen

config.properties:

# Path to logs 
logPath=/home/flow/logs/projectName.log 

Ich möchte diesen Weg erhalten und den Wert von log4j.appender.LOGFILE.File=axis2.log innerhalb log4j.properties zu ändern.

Wie kann ich das erreichen?

EDIT: My log4j.properties Datei:

# Set root category priority to INFO and its only appender to CONSOLE. 
#log4j.rootCategory=INFO, CONSOLE 
log4j.rootCategory=INFO, CONSOLE, LOGFILE 

# Set the enterprise logger priority to FATAL 
log4j.logger.org.apache.axis2.enterprise=FATAL 
log4j.logger.de.hunsicker.jalopy.io=FATAL 
log4j.logger.httpclient.wire.header=FATAL 
log4j.logger.org.apache.commons.httpclient=FATAL 

# CONSOLE is set to be a ConsoleAppender using a PatternLayout. 
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender 
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout 
log4j.appender.CONSOLE.layout.ConversionPattern=[%p] %m%n 

# LOGFILE is set to be a File appender using a HTML Layout. 
log4j.appender.LOGFILE=org.apache.log4j.FileAppender 
log4j.appender.LOGFILE.File=axis2.log 
log4j.appender.LOGFILE.Append=true 
#log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout 
#log4j.appender.LOGFILE.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n 
log4j.appender.LOGFILE.layout=org.apache.log4j.HTMLLayout 
log4j.appender.LOGFILE.layout.Title=NPC Simulator Log 

Update (auf diese Weise nicht funktioniert):

public class Foo 
{ 
    public void test() { 
     System.setProperty("my.log", ConfigHandle.getProperty("logPath"); 
     Logger log = Logger.getLogger(MyClass.class.getName()); 

     log.info("Testing..."); 
    } 
} 

config.properties

# log4j.properties 
logPath=/home/flow/logs 

log4j.properties

... 
log4j.appender.LOGFILE.File=${my.log}/axis2.log 
... 
+0

Fügen Sie den Protokolldateipfad in log4j.properties mit dem Schlüssel * log4j.appender.R.File * – PVR

+0

hinzu Als ich gerade mit log4j angefangen habe, wie würde mir das Hinzufügen dieses Schlüssels helfen? Ich bin mir nicht sicher, wie ich es benutzen soll. (Hinzugefügt meine 'log4j.properties' Datei zum op) –

+0

Wenn Sie versuchen, Dateipfad dynamisch zu ändern, überprüfen Sie bitte dieses: http://stackoverflow.com/q/11846593/3632059 – PVR

Antwort

2

Siehe folgendes Beispiel:

Log4j.properties

# Root logger option 
log4j.rootLogger=DEBUG, stdout, file 

# Redirect log messages to console 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

# Redirect log messages to a log file, support file rolling. 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=${my.log} 
log4j.appender.file.MaxFileSize=5MB 
log4j.appender.file.MaxBackupIndex=10 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n 

config.properties

FILE_PATH=D://logfile.log 

Beispielcode:

import java.io.IOException; 
import java.io.InputStream; 
import java.util.Properties; 

import org.apache.log4j.Logger; 

public class HelloExample { 

static { 
    String filePath=readFile(); 
    System.setProperty("my.log", filePath); } 

final static Logger logger = Logger.getLogger(HelloExample.class); 

    public static void main(String[] args) { 

     HelloExample obj = new HelloExample(); 
     obj.runMe("myRun"); 

    } 

    private void runMe(String parameter){ 

     if(logger.isDebugEnabled()){ 
      logger.debug("This is debug : " + parameter); 
     } 

     if(logger.isInfoEnabled()){ 
      logger.info("This is info : " + parameter); 
     } 

     logger.warn("This is warn : " + parameter); 
     logger.error("This is error : " + parameter); 
     logger.fatal("This is fatal : " + parameter); 

    } 

    public static String readFile() 
    { 
     Properties prop = new Properties(); 
     InputStream input = null; 

     try { 
      //load file from classpath 
      input= HelloExample.class.getClassLoader().getResourceAsStream("config.properties"); 

      // load a properties file 
      prop.load(input); 

      // get the property value and print it out 
      return prop.getProperty("FILE_PATH"); 

     } catch (IOException io) { 
      io.printStackTrace(); 
     } finally { 
      if (input != null) { 
       try { 
        input.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
     return null; 
    } 

} 

So, hier neue Wege aus config.properties lesen und legen Sie sie in static Block, der es während der Laufzeit ersetzt.

+0

Danke, aber ich bekomme diesen Fehler. '13: 28: 26,254 ERROR [STDERR] log4j: Fehler setFile (null, true) Aufruf fehlgeschlagen. 13: 28: 26,254 FEHLER [STDERR] java.io.FileNotFoundException: 'Nicht sicher, warum es null ist, wie ich die Eigenschaft aus meiner Konfigurationsdatei bekomme. Ich drucke es innerhalb des "statischen" Blocks aus, um sicherzugehen, und es druckt den Pfad aus. –

+0

Können Sie bitte Ihren Code zeigen – PVR

+0

Entschuldigung, hier gehen Sie: https://gist.github.com/anonymous/22bc8f3c6eab2e2c170e1266f43c88ed –

Verwandte Themen