0

私のデフォルトのcstrでは、log4jロガーをインスタンス化しており、実行時にログファイルのdirパスを送信します。

私のデフォルトのcstrにはこれがあります:

logger = new LoggerSetup().SetLogger(Logger.getLogger(ServiceController.class), "FileLogger", LogDirPath);

プロパティファイルにパスを設定し、それを

@Value("#{settings['ApplicationLogDirPath']}")
private String LogDirPath;

ただし、@Valueが配線される前にcstrが呼び出されるため、cstrのLogDirPathは常にnullになります。

他に使用する必要のある別の注釈はありますか?より良い方法はありますか?

私が達成しようとしているのは、ログファイルから動的に設定されたlog4jログパスを設定することです。さらに、アプリケーションレベルのログが1つの場所に記録され、長時間実行されるデータベース呼び出し[コントローラーがbizレイヤーを呼び出す]が書き込むように、コントローラーには2つのロガーが必要です。別の場所に。コントローラは、bizレイヤーを呼び出す前にログを記録し、bizレイヤーが返されると、それをログに記録します。したがって、2つの異なるログファイルが記録されます。顧客はこの奇妙なログを必要としているので、それはそれが何であるかです

4

2 に答える 2

1

${log.dir}プロパティ置換手法を使用できます。方法は次のとおりです。

String dynamicLog = // log directory somehow chosen...
Properties p = new Properties( Config.ETC + "/log4j.properties" );
p.put( "log.dir", dynamicLog ); // overwrite "log.dir"
PropertyConfigurator.configure( p );

以下もあなたの質問に対処する必要があります。

于 2013-02-27T15:55:45.630 に答える
0

プロパティファイルを手動でロードして、プロパティをフェッチすることができます

File resource = new File(SO15116168.class.getClassLoader().getResource(".").getFile());
File file = new File(resource.getParent()+"/spring","customprops.properties");
System.out.println(file);
Properties p = new Properties();
p.load(new FileInputStream(file));
String property = p.getProperty("ApplicationLogDirPath");

SO15116168クラスに置き換えます。

于 2013-02-27T16:29:44.713 に答える