在項目開發階段,咱們使用的是測試區的數據庫,FTP 等等 資源。 在項目上線時,天然要切換到正式區。 若是配置文件寫在項目裏面,那麼發佈時就要變動代碼,修改連接地址。 因此講配置文件放在項目以外,就能夠解決這個問題了。
由於目前個人項目要給多個外包廠用,部署到多個服務器上。 因外包廠服務器安裝目錄不一樣,各自的命令規範也沒法統一。
因此須要客戶本身制定log路徑位置。java
* 在tomcat的context.xml中 新增一個變量,維護log4j的位置. * 在項目啓動加載時,根據路徑讀取log4j的文件,從新定義log4j配置文件.
<Environment name="myLog4jPath" override="false" type="java.lang.String" value="/opt/conf/log4j.properties"/>
web
<dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> </dependencies> <build> <finalName>MyLogger</finalName> </build>
package com; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; public class MyLoggerServlet extends HttpServlet { private static final long serialVersionUID = 1L; private Logger logger = Logger.getLogger(MyLoggerServlet.class); /** * @see HttpServlet#HttpServlet() */ public MyLoggerServlet() { Context initCtx = null; String config = null; InputStream is = null; Context envCtx = null; try { initCtx = new InitialContext(); envCtx = (Context) initCtx.lookup("java:comp/env"); config = (String) envCtx.lookup("myLog4jPath"); is = new FileInputStream(new File(config)); PropertyConfigurator.configure(is); logger.info("========================config file path=============" + config); } catch (Exception ex) { logger.error(ex.toString()); } finally { if (envCtx != null) { try { envCtx.close(); } catch (NamingException e) { e.printStackTrace(); } } if (initCtx != null) { try { initCtx.close(); } catch (NamingException e) { e.printStackTrace(); } } } } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter pw = response.getWriter(); logger.info("hello servlet, hello log4j"); pw.write("okok"); pw.flush(); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); }
}數據庫
`apache
<servlet> <servlet-name>MyLoggerServlet</servlet-name> <display-name>MyLoggerServlet</display-name> <description></description> <servlet-class>com.MyLoggerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyLoggerServlet</servlet-name> <url-pattern>/MyLoggerServlet</url-pattern> </servlet-mapping>
###測試 Servlet會在第一次調用時加載/opt/conf/log4j.properties文件, 並打印log到指定目錄 http://localhost:8080/MyLogger/MyLoggerServletapi