log 4 jログ位置設定
方法一、解決策は自然に絶対経路の代わりに相対経路を用いる
実はlog 4 jのFileAppender自体には、log 4 j.appender.logfile.File=${WORKDIR}/logs/app.logでは「${WORKDIR}/」は変数であり、System Propertyの「WORKDIR」の値に置き換えられます.これにより、log 4 jがプロファイルをロードする前にSystemを使用することができる.setProperty ("WORKDIR", WORKDIR);ルートパスを設定します.この操作は、最初のservletで実行できます.方法2、サーバ環境変数log 4 jのプロファイルを用いるサーバvmの環境変数をサポートすることができ、フォーマットは${catalina.home}log 4 jに類似する.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=${catalina.home}/logs/logs_tomcat.log log4j.appender.R.MaxFileSize=10 KBの${catalina.home}はwindowsシステムの環境変数ではありません.この環境変数はWindowsシステムの環境変数に設定する必要はありません.なぜかというとbat(startup,shutdownはすべてこれを呼び出します)の中に-Dacatalinaがあります.home= "%CATALINA_HOME%".この考えを受け継ぐので、自分でパラメータを設定することもできます.home="D:/abc/log"から対応するサーバjavaが起動するvmパラメータへのメソッド3、servlet初期化init()メソッドでfile属性をロードする相対パスを実現する具体的な実装:servletを作成し、システムがロードするときにpropertiesのファイルをpropertiesファイルに読み込む.そのfileの属性値(私が使用しているのは相対ディレクトリ)を変更し(前にシステムのルートディレクトリを加える)、このpropertiesオブジェクトをpropertyConfigに設定させ、logの設定を初期化する.後の使用では、一般的に私たちの開発プロジェクトの過程でlog 4 jログ出力パスをフォルダに固定する必要はありません.このように、環境を変えると、ログパスを再修正する必要があります.比較的不便です.現在、ログパスを動的に変更する方法を採用して、相対パスでログファイルを保存しています.
方法3の実現:
(1).プロジェクトの開始時に初期化クラスを読み込みます.
実際にlog 4 jのプロファイルlog 4 j.propertiesはデフォルト名のように、JVMで読めるclasspathの中の任意の場所に置くことができ、一般的にWEB-INF/classesディレクトリの下に置くことができます.log 4 jのプロファイルがデフォルト名ではない場合は、「ropertyConfigurator.configure(props);//log 4 j構成情報の読み込み」のようにパラメータを追加して与える必要があります.
(2).Web.xmlでの構成
注意:上のload-on-startupは、Webコンテナの起動時にサーブレットをロードするために0に設定されています.log4j.propertiesファイルは、ルートのpropertiesサブディレクトリに配置するか、他のディレクトリに配置することもできます.すべきだ.propertiesファイルは集中的に保存され、管理が容易になります.
実はlog 4 jのFileAppender自体には、log 4 j.appender.logfile.File=${WORKDIR}/logs/app.logでは「${WORKDIR}/」は変数であり、System Propertyの「WORKDIR」の値に置き換えられます.これにより、log 4 jがプロファイルをロードする前にSystemを使用することができる.setProperty ("WORKDIR", WORKDIR);ルートパスを設定します.この操作は、最初のservletで実行できます.方法2、サーバ環境変数log 4 jのプロファイルを用いるサーバvmの環境変数をサポートすることができ、フォーマットは${catalina.home}log 4 jに類似する.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=${catalina.home}/logs/logs_tomcat.log log4j.appender.R.MaxFileSize=10 KBの${catalina.home}はwindowsシステムの環境変数ではありません.この環境変数はWindowsシステムの環境変数に設定する必要はありません.なぜかというとbat(startup,shutdownはすべてこれを呼び出します)の中に-Dacatalinaがあります.home= "%CATALINA_HOME%".この考えを受け継ぐので、自分でパラメータを設定することもできます.home="D:/abc/log"から対応するサーバjavaが起動するvmパラメータへのメソッド3、servlet初期化init()メソッドでfile属性をロードする相対パスを実現する具体的な実装:servletを作成し、システムがロードするときにpropertiesのファイルをpropertiesファイルに読み込む.そのfileの属性値(私が使用しているのは相対ディレクトリ)を変更し(前にシステムのルートディレクトリを加える)、このpropertiesオブジェクトをpropertyConfigに設定させ、logの設定を初期化する.後の使用では、一般的に私たちの開発プロジェクトの過程でlog 4 jログ出力パスをフォルダに固定する必要はありません.このように、環境を変えると、ログパスを再修正する必要があります.比較的不便です.現在、ログパスを動的に変更する方法を採用して、相対パスでログファイルを保存しています.
方法3の実現:
(1).プロジェクトの開始時に初期化クラスを読み込みます.
public class Log4jInit extends HttpServlet {
static Logger logger = Logger.getLogger(Log4jInit.class);
public Log4jInit() {
}
public void init(ServletConfig config) throws ServletException {
String prefix = config.getServletContext().getRealPath("/");
String file = config.getInitParameter("log4j");
String filePath = prefix + file;
Properties props = new Properties();
try {
FileInputStream istream = new FileInputStream(filePath);
props.load(istream);
istream.close();
//toPrint(props.getProperty("log4j.appender.file.File"));
String logFile = prefix + props.getProperty("log4j.appender.file.File");//
props.setProperty("log4j.appender.file.File",logFile);
PropertyConfigurator.configure(props);// log4j
} catch (IOException e) {
toPrint("Could not read configuration file [" + filePath + "].");
toPrint("Ignoring configuration file [" + filePath + "].");
return;
}
}
public static void toPrint(String content) {
System.out.println(content);
}
}
実際にlog 4 jのプロファイルlog 4 j.propertiesはデフォルト名のように、JVMで読めるclasspathの中の任意の場所に置くことができ、一般的にWEB-INF/classesディレクトリの下に置くことができます.log 4 jのプロファイルがデフォルト名ではない場合は、「ropertyConfigurator.configure(props);//log 4 j構成情報の読み込み」のようにパラメータを追加して与える必要があります.
(2).Web.xmlでの構成
<servlet>
<servlet-name>log4j-init</servlet-name>
<servlet-class>Log4jInit</servlet-class>
<init-param>
<param-name>log4j</param-name>
<param-value>WEB-INF/classes/log4j.properties</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
......
注意:上のload-on-startupは、Webコンテナの起動時にサーブレットをロードするために0に設定されています.log4j.propertiesファイルは、ルートのpropertiesサブディレクトリに配置するか、他のディレクトリに配置することもできます.すべきだ.propertiesファイルは集中的に保存され、管理が容易になります.