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).プロジェクトの開始時に初期化クラスを読み込みます.
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ファイルは集中的に保存され、管理が容易になります.