4

これは、log4j のテストに使用した私のStudentクラスです。

public class Student{    
    private static final Logger logger = Logger.getLogger(Student.class.getName());   

    public Student() {  
         PropertyConfigurator.configure("log4j.properties");  
    }

    public static void main(String args[]){  
        logger.log(Level.INFO, "My log4j Test");    
    } 
}

これは私のlog4j.propertiesファイルです

log4j.rootLogger=INFO,Appender1,Appender2
log4j.appender.Appender1=org.apache.log4j.ConsoleAppender
log4j.appender.Appender2=org.apache.log4j.RollingFileAppender
log4j.appender.Appender2.File=C:/Log4j/MyLogExample.log

log4j.appender.Appender1.layout=org.apache.log4j.PatternLayout`  
log4j.appender.Appender1.Target=System.out`   
log4j.appender.Appender1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n`  

log4j.appender.Appender2.layout=org.apache.log4j.PatternLayout`  
log4j.appender.Appender2.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n`  

log4j.appender.Appender2.MaxFileSize=50KB`  
log4j.appender.Appender2.MaxBackupIndex=10` 

Eclipse を使用してこのプログラムを実行すると、MyLogExample.logファイルが作成されます。しかし、jar ファイルを作成し、コマンド プロンプトを使用して実行した後、ログ ファイルが作成されません。

コンソールにこのエラーが表示されます。

log4j:ERROR Could not read configuration file [log4j.properties]. 
java.io.FileNotFoundException: log4j.properties (The system cannot find the file specified) 

次のコード例を追加すると、コマンド プロンプトで jar ファイルを実行してもログ ファイルが作成されます。

PropertyConfigurator.configure("C:\\eclipeworkspace\\Log4jTest\\log4j.properties");

正確なパスではなく相対パスを指定するにはどうすればよいですか?

4

3 に答える 3

3

これを使って :

ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
URL url = classLoader.getResource("log4j.properties");
File file = new File(url.toURI());
于 2012-07-20T06:05:51.533 に答える
2

log4j.propertiesクラスパスにあるはずです。コマンド ラインから実行する場合は、クラスパスに追加します。

より良い代替手段は、次を使用してプロパティ ファイルを指定することです。

-Dlog4j.configuration=relative path/log4j.properties

コマンドラインから。この場合PropertyConfigurator.configure("log4j.properties");、コードから行を削除できます。プロパティ ファイルを指定するためにコード内で何もする必要はありません。

于 2012-07-20T17:30:06.067 に答える