log4j.xml
構成ファイル。ログを保存するためのファイルパスを提供する必要があるRollingFileAppender
。問題は、コードが実行可能なjarとしてUnixマシンにデプロイされることです。したがって、次のようなパラメータを渡すと:
value=logs/messages.log"
hOMEディレクトリ内にlogsという名前のフォルダを作成し、このディレクトリ内のファイルにすべてのメッセージを書き込みます。
環境変数を何らかの値に設定しています。その変数のパスを使用し、そのパスの下にメッセージを書きたいです。どうすれば達成できますか?
私はこれを使ってみました:
value="${MY_HOME}/logs/message.log"
しかし、これは機能しません。誰でもこの問題の解決策を提案できますか?
構成ファイルを解析するとき、式${MY_HOME}
は、システムプロパティ named MY_HOME
、システムではない環境変数。 2つの間に違いがあります。
これをクリーンな方法で実現するには、次のようなものをJVM呼び出し行に追加する必要があります。
-DMY_HOME=$MY_HOME
それはJavaシステムプロパティMY_HOME
環境変数の値を含むMY_HOME
。
環境変数を指定できます。次のように、変数名の前にenv:を追加します。
value="${env:MY_HOME}/logs/message.log"
この構文はlog4j 2.Xでのみ文書化されているため、正しいバージョンを使用していることを確認してください。
<Appenders>
<File name="file" fileName="${env:LOG_PATH}">
<PatternLayout>
<Pattern>%d %p %c{1.} [%t] %m %ex%n</Pattern>
</PatternLayout>
</File>
</Appenders>
http://logging.Apache.org/log4j/2.x/manual/lookups.html#EnvironmentLookup
私はこれを機能させました。
log4j.appender.file.File = $ {LogFilePath}
-DLogFilePath = C:\ work\MyLogFile.log
Java -DLOG_DIR=${LOG_DIR} -jar myjar.jar "param1" "param2"
==> xmlに「value = "$ {LOG_DIR} /log/clientProject/project-error.log」がある場合、cmd行に
Log4jエントリ
#-ログに記録するファイルとログ形式
log4j.appender.file.File = $ {LOG_PATH} /mylogfile.log
Java program
String log4jConfPath = "path/log4j.properties";
File log4jFile = new File(log4jConfPath);
if (log4jFile.exists()) {
System.setProperty("LOG_PATH", "c:/temp/");
PropertyConfigurator.configure(log4jFile.getAbsolutePath());
logger.trace("test123");
}
多分... :
datestamp=yyyy-MM-dd/HH:mm:ss.SSS/zzz
layout=%d{${datestamp}} ms=%-4r [%t] %-5p %l %n%m %n%n
# infoFile
log4j.appender.infoFile=org.Apache.log4j.RollingFileAppender
log4j.appender.infoFile.File=${MY_HOME}/logs/message.log
log4j.appender.infoFile.layout=org.Apache.log4j.PatternLayout
log4j.appender.infoFile.layout.ConversionPattern=${layout}