2016-06-15 7 views
1

別のpropertiesファイルからlog4jログファイルへのパスを取得したいとします。Apache log4j 2.3他のファイルからログファイルパスを取得する

config.properties:私はこれ持っているのであれば、

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

を私はそのパスを取得し、log4j.properties内部log4j.appender.LOGFILE.File=axis2.logの値を変更したいです。

どうすればこの問題を解決できますか?

EDIT:私のlog4j.propertiesファイル:

# 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 

アップデート(この方法がうまくいきませんでした):

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

キー* log4j.appender.R.File * log4j.propertiesにログファイルのパスを追加する* – PVR

+0

log4jの使用を開始したばかりなので、そのキーを追加するとどのように役立ちますか?私はそれを使う方法がわからない。 (私の 'log4j.properties'ファイルをopに追加しました) –

+0

ファイルパスを動的に変更しようとしているなら、これをチェックしてください:http://stackoverflow.com/q/11846593/3632059 – PVR

答えて

2

この例を参照して下さい:

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 

サンプルコード:だからここ

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; 
    } 

} 

config.propertiesから新しいパスを読んで、実行時に置き換えられます staticブロックに配置します。

+0

ありがとう、しかし、私はこのエラーが発生します。 '13:28:26,254 ERROR [STDERR] log4j:エラーsetFile(null、true)呼び出しに失敗しました。 13:28:26,254 ERROR [STDERR] java.io.FileNotFoundException: '私の設定ファイルからプロパティを取得すると、なぜnullであるのかわかりません。 'static'ブロックの中に出力して、パスを出力します。 –

+0

あなたのコードを表示してください。 – PVR

+0

申し訳ありません、ここに行きます:https://gist.github.com/anonymous/22bc8f3c6eab2e2c170e1266f43c88ed –

関連する問題