尝试将log4j的文件日志输出到web工程制定目录,遇到了很多问题,最终搞定,下面是记录。
其原理在于log4j的配置文件支持服务器的vm的环境变量,如${oss.log4j.path},在log4j加载配置文件之前,先用System.setProperty("", "")设置好日志文件路径,这一操作通过一个初始的servlet来实现

1. log4j.properties文件

log4j.rootCategory=debug,stdout,ROLLFILE,R

log4j.appender.stdout=org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.layout=org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) -%m%n

log4j.appender.R=org.apache.log4j.RollingFileAppenderlog4j.appender.R.layout=org.apache.log4j.PatternLayoutlog4j.appender.R.layout.ConversionPattern=%p %t %c -%m%n

log4j.appender.R.File=${oss.log4j.path}logs/log.loglog4j.appender.R.MaxFileSize=100KBlog4j.appender.R.MaxBackupIndex=1

log4j.appender.ROLLFILE = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.ROLLFILE.File = ${oss.log4j.path}logs/log.htmllog4j.appender.ROLLFILE.Append = truelog4j.appender.ROLLFILE.Threshold = DEBUGlog4j.appender.ROLLFILE.layout = org.apache.log4j.HTMLLayout 

2. servlet。配置web服务器的vm环境变量

package com.jesse.onlineshop.servlet;

import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;

import org.apache.log4j.Logger;

/** * 将配置信息读入系统变量 * @author Administrator * */public class SystemServlet extends HttpServlet {

    private static final Logger logger = Logger.getLogger(SystemServlet.class);

    private static final long serialVersionUID = -833322220864312415L;

 @Override    public void init() throws ServletException {        String rootPath = this.getServletContext().getRealPath("/");  

        logger.info(rootPath);

        String log4jPath = this.getServletConfig().getInitParameter("oss.log4j.path");          //若没有指定oss.log4j.path初始参数,则使用WEB的工程目录          log4jPath = (log4jPath==null||"".equals(log4jPath))?rootPath:log4jPath;          System.setProperty("oss.log4j.path", log4jPath);          super.init();     }

}

3. web.xml. 不需要配置servlet-mapping,load-on-startup设置为0,会在web容器启动时候就装入该servlet

   <servlet>       <servlet-name>systemServlet</servlet-name>        <servlet-class>com.jesse.onlineshop.servlet.SystemServlet</servlet-class>     <init-param>            <param-name>oss.log4j.path</param-name>           <param-value></param-value>       </init-param>       <load-on-startup>0</load-on-startup>  </servlet>

4. 结果
[img]http://dl.iteye.com/upload/picture/pic/127897/55f9a757-f22f-32fe-a61d-aaa0f261173a.png[/img]

5. 疑惑
在log4j.properties配置文件中,日志文件路径需要配置成${oss.log4j.path}logs/log.html
在配制成${oss.log4j.path}/logs/log.html时不能输出,但是通过输出System.getProperty("oss.log4j.path")时输出的路径并不包含"/"。所以不理解为什么最终会在这里加上一个"/"的。

log4j日志输出到web项目指定文件夹相关推荐

  1. 关于idea中新建web项目 webapp文件夹没有小蓝点 ,启动服务,访问不到解决方案

    关于idea中新建web项目 webapp文件夹没有小蓝点 ,启动服务,访问不到解决方案 参考文章: (1)关于idea中新建web项目 webapp文件夹没有小蓝点 ,启动服务,访问不到解决方案 ( ...

  2. web项目各个文件夹的作用

    拿到服务器权限后,在做本地信息收集时,web应用是一个不可忽视的内容,尤其是web配置文件内容,能为我们横向移动.扩大战果提供重要情报.所以本文介绍web目录下各个文件夹的作用,为我们翻文件提供指导. ...

  3. Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题

    转载自   Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题 使用Mybatis的时候,有些时候能输出(主要是指sql,参数,结果)日志.有些时候就不能. 无法输出日志的时候,无论 ...

  4. log4j日志输出性能优化-缓存、异步

    1.log4j已成为大型系统必不可少的一部分,log4j可以很方便的帮助我们在程序的任何位置输出所要打印的信息,便于我们对系统在调试阶段和正式运行阶段对问题分析和定位.由于日志级别的不同,对系统的性能 ...

  5. 错误:无法打开web项目”****“,文件路径“****”与url“**”不符。这两者要映射到相同的服务器位置。...

    问题出现的环境: 现在解决方案中有3个项目(2个类库,1个web),因为原来搭建项目的服务器要做别的用,所以要做个项目"迁移". 在现在的服务器上安装完开发环境,拷贝过来项目文件, ...

  6. web项目图片/文件保存方式

    web项目图片/文件保存方式 其实文件和图片都是二进制流文件 以下统称图片 1直接把图片存到数据库字段中 2图片存项目/public/img目录,文件名存数据库字段 3规范的使用阿里云oss/腾讯云c ...

  7. SpringBoot 项目将文件图片资源上传到本地静态资源文件夹下(指定文件夹下)

    1.SpringBoot 项目将文件图片资源上传到本地静态资源文件夹下(指定文件夹下) 最终效果: 前端浏览本地文件,点击上传至本地resources/static/images/imgWall下 2 ...

  8. 手机ftp服务器进入制定文件夹,ftp服务器 指定文件夹

    ftp服务器 指定文件夹 内容精选 换一换 本节介绍使用Data Studio时要遵循的安装和配置步骤,以及配置服务器以调试PL/SQL函数的步骤.本章包含如下几节内容:安装Data Studio配置 ...

  9. xml遍历文件夹vector_怎么统计指定文件夹下含有.xml格式的文件数目

    如何统计指定文件夹下含有.xml格式的文件数目?如题 ------解决思路----------------------Directory.GetFiles(@"路径", " ...

最新文章

  1. VS2015 win64下配置Opencv3.4.7
  2. 想开网店?向你推荐最好的开源电子商务平台
  3. mysql in 原理_深入理解MySql子查询IN的执行和优化
  4. c++switch实现猜拳_C语言实现人机猜拳游戏,非常适合C++小白练习的项目!
  5. php实现 字符串加密(分类分布分工,化不可能为可能)
  6. 高效实用Kafka-Kafka消息处理(底层原理)
  7. ionic 环境安装
  8. oracle报错查询动态视图,oracle基表和动态性能视图
  9. 什么叫做蓝牙技术(转贴)
  10. csv数据去重 python_数据去重_Python数据分析实战应用_数据挖掘与分析视频-51CTO学院...
  11. Camera成像中的Demosaic
  12. 不同框架接口自动化的优劣
  13. HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP
  14. Axure RP小部件使用教程
  15. python的自省机制
  16. Android(小米miui)如何判断当前应用是否允许NFC权限
  17. 设置大小合适的Win7休眠文件Hiberfil.SYS
  18. 如何改善睡眠状态?建议你尝试这些方法和好物
  19. Eva 初学算法笔记 —— 1.直接插入排序
  20. 调整字体间距属性和文字换行属性

热门文章

  1. 基本数据结构——线性结构(列表/无序表)
  2. 浙江省计算机二级题库excel,2014年浙江省计算机二级题库Excel03.xls
  3. 3D标签云的简单实现
  4. 多元线性回归分析示例
  5. 动态路由RID ospf
  6. android 对短信的操作(伪造信息)
  7. JavaScript函数的使用以及下拉框、文本框、radio值的获取,结合一个淘宝竞价案例。。。
  8. 【SSL】记录一次PEM转P12证书
  9. 51 单片机实战教程(14 外围芯片驱动程序之LTC1658芯片驱动)
  10. 有关华为的七大猜想:或在国内屈居老二