将 Log4j 配置文件放在项目外面
2015-04-27 00:00
204 查看
摘要: log4j文件放在项目外面,动态配置log打印位置
所以需要客户自己制定log路径位置。
}
`
###测试
Servlet会在第一次调用时加载/opt/conf/log4j.properties文件, 并打印log到指定目录
http://localhost:8080/MyLogger/MyLoggerServlet
配置文件为什么要放在项目之外
在项目开发阶段,我们使用的是测试区的数据库,FTP 等等 资源。 在项目上线时,自然要切换到正式区。 如果配置文件写在项目里面,那么发布时就要变更代码,修改链接地址。 所以讲配置文件放在项目之外,就可以解决这个问题了。
为什么要动态配置 log4j.properties 的路径
因为目前我的项目要给多个外包厂用,部署到多个服务器上。 因外包厂服务器安装目录不同,各自的命令规范也无法统一。
所以需要客户自己制定log路径位置。
基本思路
* 在tomcat的context.xml中 新增一个变量,维护log4j的位置. * 在项目启动加载时,根据路径读取log4j的文件,重新定义log4j配置文件.
配置tomcat的context.xml
context.xml 新增一行<Environment name="myLog4jPath" override="false" type="java.lang.String" value="/opt/conf/log4j.properties"/>
创建maven项目
pom.xml注意事项 : log4j要是1.2.17以上版本,否则不支持
<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>
新建servlet
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); }
}
`
web.xml
<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/MyLoggerServlet
相关文章推荐
- 项目加载时,配置文件读取参数并把参数放在缓存中。
- JAVA项目中,配置LOG4j,将日志按照不同级别输出到控制台和文件中
- log4j无日志生成? 我将一个web项目部署在tomcat server.xml配置文件中,当我启动tomcat是无日志输出。
- 解决web项目存在多个log4j.properties配置文件,导致日志级别配置不生效问题
- spring中log4j配置文件不放在classpath的根目录
- spring中log4j配置文件不放在classpath的根目录
- springmvc 项目完整示例05 日志 --log4j整合 配置 log4j属性设置 log4j 配置文件 log4j应用
- 项目优化-不变数据放在配置文件中
- 在项目的classPath 下配置log4j.xml ,为什么没有读取log4j的配置文件它会自己找到
- 理解项目中经常用的log4j.properties文件的配置
- 打jar包时将log4j配置文件放在jar包外的方法
- web 项目中 在spring中使用log4j 定时刷新log4j配置文件
- web 项目log4j配置无法获取文件(java.io.FileNotFoundException: /logs/log.txt (No such file or directory))猜想
- web 项目中 在spring中使用log4j 定时刷新log4j配置文件
- 在Spring的项目中配置Log4j存放日志文件到指定目录下
- java 读取项目外面配置文件的方法
- 在项目中配置LOG4j,可以将LOG输出到文件中和控制台
- java工程生成jar,配置文件放在jar外面,读写配置文件
- 在用maven搭建的springmvc项目中配置使用log4j日志文件
- java工程生成jar,配置文件放在jar外面,读写配置文件