在Spring的项目中配置Log4j存放日志文件到指定目录下

在Spring中使用LOG4J为日志输出的插件已有一段日子了,但有时候发现日志文件虽然是已经在根据自己的理想存放了,但还会有些莫名其妙的项目日志文件出现tomcat内(因为项目的日志文件都以项目命名嘛,所以比较容易区分这些log)。这些令我纠结的日志文件,让我在改善一下LOG4J的配置。才发现,之前用的配置方式真是弱爆了。

1.先说自己比较理想的存放日志路径。

我比较喜欢把日志文件放在项目的WEB-INF下,然后当然有个文件夹叫logs。logs相信很多人都会存在在这样的目录下,但放在WEB-INF目录下相信还是有些人不理解。其实当然是为了资源保护了。

2.旧的方式

编写Servlet在项目部署的时候重置log4j配置文件中的日志文件存放路径。

web.xml配置如下:

Xml代码  

  1. <servlet>
  2. <servlet-name>log4j-init</servlet-name>
  3. <servlet-class>com.foo.log.Log4jInit</servlet-class>
  4. <init-param>
  5. <param-name>log4j_properties_path</param-name>
  6. <param-value>WEB-INF/classes/log4j.properties</param-value>
  7. </init-param>
  8. <load-on-startup>1</load-on-startup>
  9. </servlet>

Log4Init的代码就不贴了,网上也比较多。主要作用就是修改原有的log4j.appender的File配置修改为现在项目部署的绝对路径,方法多样,功能都一样!

问题产生了:

这种方式在Spring环境中还是会生成一些多余日志文件。因为在项目部署时,spring初始化比配置的Servlet启动的还早,所以原有的默认日志存放路径就先生效了(虽然没什么内容,也不对项目有什么影响)。

3.有没有更好的配置方式呢?

使用Spring提供的日志配置方法

web.xml添加如下代码:

Xml代码  

  1. <context-param>
  2. <param-name>webAppRootKey</param-name>
  3. <param-value>project</param-value>
  4. </context-param>
  5. <context-param>
  6. <param-name>log4jConfigLocation</param-name>
  7. <param-value>WEB-INF/classes/log4j.properties</param-value>
  8. </context-param>
  9. <listener>
  10. <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  11. </listener>

webAppRootKey: 配置项目的别名,上面配置别名为project。若你部署的项目不在tomcat中的话这个可以忽略,因为tomcat没为每个应用配置不同的webappRoot属性,所以如果出现两个或以上相同的应用属性名的话就会报错了。

然后修改log4j.properties的配置,把日志文件输出的路径配置修改为:

log4j.appender.A1.File=${project}WEB-INF/logs/Project.log

A1是我的appender命名。 ${project}是使用上述web.xml中的应用别名从而获取应用的绝对路径。

注:若不需要配置应用别名的话,即没配置webAppRootKey。可以直接这么写:

log4j.appender.A1.File=${webapp.root}WEB-INF/logs/Project.log

webapp.root为默认属性。若有配置webAppRootKey的话就被覆盖。

题外:

1.还有一种方式是使用环境变量,例如${catalina.home}。不过这样同样也会产生多余的log的,道理跟用Servlet一样。

当然,如果你不像我这么纠结这些多余的log的话。活得也比较轻松。。。

2.而在不同的操作系统中的路径分割符是不同的,linux是 "/" ,而windows是 "\",但目前的写法在两个环境中同样用tomcat测试是没问题的。虽然在windows的时候,初始化的日志看到的路径有点别扭。不过仿佛记得在一些应用服务器中会产生不兼容....

3.推荐默认情况下配置文件log4j.appender.A1.File=poject.log,而项目发布前,用ANT等脚本把路径修改为log4j.appender.A1.File=${project}WEB-INF/logs/Project.log 这样做的好处是,在用junit测试时,生成的日志文件就在项目的根路径中,容易处理或忽略。

时间: 2024-10-28 16:37:41

在Spring的项目中配置Log4j存放日志文件到指定目录下的相关文章

从assets中拷贝from文件到指定目录下

/** * * 从assets中拷贝from文件到to目录下 * **/ public void copyFile(Context context, String sourPath, String toPath) { OutputStream output = null; InputStream input = null; try { int read = 0; input = context.getResources().getAssets().open(sourPath); output =

Java - 自动配置log4j的日志文件路径

目录 1 日志路径带来的痛点 2 log4j.properties文件的配置 3 彻底解决痛点 3.1 单独的Java程序包 (非Java Web项目) 3.2 Web项目 4 附录 - 获取当前项目.类路径的几种方式 1 日志路径带来的痛点 Java 项目中少不了要和log4j等日志框架打交道, 开发环境和生产环境下日志文件的输出路径总是不一致, 设置为绝对路径的方式缺少了灵活性, 每次变更项目路径都要修改文件, 目前想到的最佳实现方式是: 根据项目位置自动加载并配置文件路径. 本文借鉴 To

spring boot2.0+ 中配置log4j日志

1.maven引入包,排除默认日志 1 <dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter</artifactId> 4 <exclusions> 5 <exclusion> 6 <groupId>org.springframework.boot</groupId>

在web项目中配置log4j

在web.xml中添加如下代码 1 <context-param> 2 <param-name>contextConfigLocation</param-name> 3 <param-value>classpath*:*.xml</param-value> 4 </context-param> 5 6 <listener> 7 <listener-class>org.springframework.web.ut

在Spring Boot项目中使用Redis集群

Redis安装 Mac 系统安装Redis brew方式安装 在命令汗执行命令 brew install redis 安装完成之后的提示信息 ==> Downloading https://homebrew.bintray.com/bottles/redis-5.0.2.mojave.bottle.tar.gz ######################################################################## 100.0% ==> Pouring

在java项目中使用log4j的实例

测试log4j的项目结构 Log4j.properties的路径为    src/config/log4j Log4j.properties文件的内容 下面定义日志输出级别是 INFO,并且配置了2个输出目的地,一个是A3,一个是console log4j.rootLogger = INFO,A3,CONSOLE //日志最低的输出级别 log4j.appender.A3.Threshold=INFO log4j.appender.A3.encoding=UTF-8 //每天产生一个文件Dail

控制反转和spring在项目中可以带来的好处

Spring实例化Bean的三种方式分别是: 1,xml配置使用bean的类构造器 <bean id="personService" class="cn.service.impl.PersonServiceBean"></bean> 2,xml配置+factory类,使用静态工厂方法实例化 <bean id="personService2" class="cn.service.impl.PersonServ

简单的Spring Boot 项目初级配置

一.前言 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置. 本系列以快速入门为主,可当作工具小手册阅读 二.环境搭建 创建一个 maven 工程,目录结构如下图: 2.1 添加依赖 创建 maven 工程,在 pom.xml 文件中添加如下依赖: <!-- 定义公共资源版本 --> <parent> <groupId&g

Spring Boot 项目中使用JSP

1    第2-2课:Spring Boot 项目中使用JSP JSP(Java Server Pages,Java 服务器页面)是一个简化的 Servlet 设计,它是由 Sun Microsystems 公司倡导.许多公司参与一起建立的一种动态网页技术标准.JSP 技术类似 ASP 技术,它是在传统的网页 HTML(标准通用标记语言的子集)文件(.html)中插入 Java 程序段(Scriptlet)和 JSP 标记(tag),从而形成 JSP 文件,后缀名为(*.jsp).用 JSP 开