17

log4j を使用する Eclipse Java プロジェクトがあります。ファイル パスでアクセスするように log4j 構成ファイルを設定できません。プロジェクトをjarファイルにエクスポートして実行する必要があります。

これが私がしようとしている方法です:

public class Wita {
  static Logger logger;
  public static void main(String[] args) {
    System.setProperty("log4j.configuration", new File("").getCanonicalPath()+File.separatorChar+"resources"+File.separatorChar+"log4j.xml" );
    // System.out.println( System.getProperty("log4j.configuration") );
    logger = Logger.getLogger(Wita.class.getName());
  }
}

システム アウトは、適切な C:\Users\roncsak\eclipse_workspace\WITA\resources\log4j.xmlを出力します。WITAは、プロジェクトのベース フォルダーです。ただし、 -Dlog4j.debug引数を指定してプロジェクトを実行すると、次の結果も返されます。

log4j: コンテキスト クラスローダー sun.misc.Launcher$AppClassLoader@18e3e60 を使用して [C:\Users\roncsak\eclipse_workspace\WITA\resources\log4j.xml] を検索しようとしています。
log4j: sun.misc.Launcher$AppClassLoader@18e3e60 クラスローダーを使用して [C:\Users\roncsak\eclipse_workspace\WITA\resources\log4j.xml] を検索しようとしています。
log4j: ClassLoader.getSystemResource() を使用して [C:\Users\roncsak\eclipse_workspace\WITA\resources\log4j.xml] を検索しようとしています。
log4j: リソースが見つかりませんでした: [C:\Users\roncsak\eclipse_workspace\WITA\resources\log4j.xml]。

別のjarファイルを作成せずに、時間の経過とともにlog4j.xmlを変更したいと思います。どうやってやるの?

4

3 に答える 3

23

http://logging.apache.org/log4j/1.2/manual.htmlの「デフォルトの初期化手順」から:

  • リソース文字列変数を log4j.configuration システム プロパティの値に設定します。デフォルトの初期化ファイルを指定するには、log4j.configuration システム プロパティを使用することをお勧めします。システム プロパティ log4j.configuration が定義されていない場合は、文字列変数 resource をデフォルト値の「log4j.properties」に設定します。
  • リソース変数を URL に変換してみてください。
  • たとえば MalformedURLException が原因でリソース変数を URL に変換できない場合は、URL を返す org.apache.log4j.helpers.Loader.getResource(resource, Logger.class) を呼び出して、クラスパスからリソースを検索します。 . 文字列「log4j.properties」は不正な形式の URL であることに注意してください。検索された場所のリストについては、Loader.getResource(java.lang.String) を参照してください。

そのため、URL として扱うことができるようにするには、プロパティ値の前に追加file:する必要があります。log4j.configuration

https://stackoverflow.com/a/7927278/603516を参照してください。

さらに良いコード:

    System.setProperty("log4j.configuration", new File("resources", "log4j.xml").toURL());
于 2012-09-25T09:09:28.880 に答える
6

VM引数を設定できます:-Dlog4j.configuration='path_to_log4j.xml'

またはプログラムで:

String logFilePath = new File(<path_to_log4j.xml>);
if (logFilePath == null || "".equalsIgnoreCase(logFilePath)) {
    URL file = this.getClass().getResource(DEFAULT_CONF);
    DOMConfigurator.configure(file);
} else {
    DOMConfigurator.configure(<default_config_file>);   
}
于 2012-09-25T09:04:45.053 に答える
1

上記のすべての回答では満足できなかったので、将来これが必要になる可能性のある人のためにここに投稿します。

  1. プロパティの場所を指定する必要があります。プログラムまたはコマンドオプションのいずれかで問題ありません。

プログラム的に:

private static void setupLog4J(){
    try {
        System.setProperty("log4j.configuration", new File(".", File.separatorChar+"log4j.properties").toURL().toString());
    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
  1. 独自の log4j.properties ファイルを作成します。

#  Logging level
# 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=c:/project/resources/t-output/log4j-application.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

お役に立てれば。

于 2016-03-30T12:51:10.933 に答える