`

log4j【1】(使用xml还是使用properties)

 
阅读更多

从最初学习使用log4j的时候,网上和书本上主要都是使用“log4j.properties”这种属性格式,配置日志。多年以来,一直使用这种格式,总的来说,简单、够用。
 
   而有十多年经验的Boss,不建议使用properties格式配置,而是用xml格式配置。Boss之前在阿里(支付宝、淘宝)、UC等大公司工作过。

   我们有个很明显的不同:  我比较注重,简单、快速。Boss比较注重,规范、严谨。

  我的观点:没有对与错,只有适用与不适用。每个人都是根据自己的经历和追求,做出的技术选择。对于技术使用者来讲,明白不同配置的好处和坏处,才是需要注意的。

  就log4j.xml这种配置来说,功能确实可能更多一些,可以单独把 业务日志和普通的系统日志分离,运维过程中,很容易看到业务错误,从而更快的解决问题。
 ------------------------------------------------------------------------------------------------------------
     另外,Boss觉得需要把log4j的输出目录配置成变量。比如:<param name="File" value="${log4jOutputPath}/front/default.log" />,log4jOutputPath可以是“C:/log4j/”。

     Boss根据之前在阿里的工作经验,开发和运维可能完全是2拨人。开发只管写代码,把代码写好,没有功能和业务问题。运维,负责把代码部署好,域名解析、Nginx、Tomcat、日志配置。运维导致的问题,运维背锅。功能问题,开发背锅。职责分明,流水化作业。
    我对这种流水化的作业是非常认同的,这样的企业生产效率才高,才能为国家和社会创造更多的价值。

   而象武汉一起好等很多在技术方面,偏向中小型规模的企业来说,开发和运维很可能就是“同一拨人”。这个时候,系统配置要怎么做,就是个值得探讨的问题了。
 ------------------------------------------------------------------------------------------------------------
   Boss最初建议,修改Tomcat的启动脚本,在里面增加变量配置,比如“-Dlog4jOutputPath=c:/log4j”。

    我一听,就不太赞成这种做法了。对于开发与运维都是一拨人,经常需要和其它开发人员交流的情况,修改Tomcat自身的配置比较麻烦。
为什么这么说呢?

   Tomcat是系统级的程序,而我们的代码是应用级的程序。开发者,对自己的应用程序,一般是掌控度非常高的,但是对于Tomcat等不是自己写的系统程序,把控度比较低。Tomcat的随便一行启动代码,不小心改错了,就启动不了了。
   修改Tomcat还有坏处,本地开发、线上部署、交接给其它客户,还得让客户去修改Tomcat这个和咱们的程序无关的配置,是不科学的。

   我的建议是,把这些配置,放在外围,写入个文件,比如startupTomcat.sh,在启动的时候指定参数。每个人都可以很灵活地修改log4j等配置参数。
   初步商议,我们采用这种做法。
 
   总结下:

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <appender name="DEFAULT-APPENDER" class="org.apache.log4j.DailyRollingFileAppender">      
  2.         <param name="File" value="${log4jOutputPath}/front/default.log" /><!-- 设置日志输出文件名 -->    
  3. </appender>  



启动的时候,增加VM参数,-Dlog4jOutputPath=c:/log4j----------------------------------------------------------------------------------------------------------
第2种做法,适合开发和运维都是同一人的情况,把log4j的变量,放在Web.xml里,部署的时候,需要手动修改这个变量。

log4j配置

可在web.xml中配置log4j.xml的位置,参数名称为:log4jXmlPath。

也可以,配置log4j的日志输出位置的目录,参数名称为:log4jOutputPath。

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. <servlet>  
  2.      <servlet-name>Log4jInit</servlet-name>  
  3.      <servlet-class>cn.fansunion.common.web.Log4jInit</servlet-class>   
  4.      <init-param> <param-name>log4jXmlPath</param-name> <param-value>C:/log4j.xml</param-value> </init-param>   
  5.       <init-param> <param-name>log4jOutputPath</param-name> <param-value>C:/log4j/xiaolei2</param-value> </init-param>   
  6.     <load-on-startup>0</load-on-startup>   
  7. </servlet>   




    注意:这2个参数都必须输入绝对地址,如果log4jXmlPath没有值,或者对应的文件不存在,将把classpath下的log4j.xml作为默认配置文件。如果再找不到,将报错,log4j配置失败。

如果log4jOutputPath没有值,或者对应的文件不存在,将把classpath下的log4j文件夹作为默认的输出目录。

Author:
fansunion@qq.com 2015年1月8日


Java代码 Log4jInit.java

[html] view plain copy
 
 在CODE上查看代码片派生到我的代码片
  1. public class Log4jInit extends HttpServlet {  
  2.   
  3.     private static final long serialVersionUID = 1L;  
  4.   
  5.     public void init(ServletConfig config) throws ServletException {  
  6.   
  7.         // 从web.xml中找到log4j的输出目录  
  8.         String log4jOutputPath = config.getInitParameter("log4jOutputPath");  
  9.         // 默认的日志输出位置  
  10.         if (StringUtils.isBlank(log4jOutputPath)) {  
  11.             log4jOutputPath = Log4jInit.class.getClassLoader().getResource("")  
  12.                     .getFile()  
  13.                     + "/log4j";  
  14.         }  
  15.         File log4jOutputPathFile = new File(log4jOutputPath);  
  16.         // 如果输出文件不存在,手动创建  
  17.         boolean log4xmlFileExists = log4jOutputPathFile.exists();  
  18.         if (!log4xmlFileExists) {  
  19.             System.out.println(log4jOutputPathFile.mkdirs());  
  20.         }  
  21.         // log4j.xml文件中的变量是在这里设置的  
  22.         System.setProperty("log4jOutputPath", log4jOutputPath);  
  23.   
  24.         // 从web.xml中找到log4j.xml的输出目录  
  25.         String log4jXmlPath = config.getInitParameter("log4jXmlPath");  
  26.         boolean exist = false;  
  27.         // 如果在web.xml手动配置,log4jXmlPath应该使用绝对地址,否则,就使用默认的位置和文件名就行  
  28.         if (StringUtils.isNotBlank(log4jXmlPath)) {  
  29.             File file = new File(log4jXmlPath);  
  30.             exist = file.exists();  
  31.         }  
  32.         // log4jXmlPath默认位于classpath下log4j.xml  
  33.         if (!exist) {  
  34.             URL resource = Log4jInit.class.getClassLoader().getResource(  
  35.                     "log4j.xml");  
  36.             if (resource != null) {  
  37.                 log4jXmlPath = resource.getFile();  
  38.             }  
  39.         }  
  40.         DOMConfigurator.configure(log4jXmlPath);  
  41.     }  
  42. }  
分享到:
评论

相关推荐

    log4j2 xml 和 properties配置

    log4j2 xml 和 properties 配置

    log4j与web.xml的配置

    2. **Log4j配置文件(log4j.properties或log4j.xml)** - 在Java项目中,通常会有一个log4j配置文件,用于定义日志记录的级别、输出方式和格式。 - 示例配置: ``` log4j.rootLogger=DEBUG, FILE log4j....

    log4j的详细配置,log4j.xml和log4j.properties,日志输出到文件,邮件,数据库,控制台等

    Log4j提供了多种配置方式,其中最常用的有两种:XML格式的`log4j.xml`和properties格式的`log4j.properties`。接下来,我们将深入探讨如何通过这两种配置文件来设置日志输出的目标、级别以及格式。 1. **XML配置** ...

    使用xml或properties配置的log4j

    标题“使用xml或properties配置的log4j”指的是本文将探讨如何通过XML和properties文件这两种不同的格式来配置Log4j,这是一个广泛使用的Java日志记录框架。Log4j允许开发者控制应用程序的日志输出,包括级别、格式...

    SSM整合中的Log4j日志的配置详情

    Log4j 是一个功能强大且广泛使用的日志记录工具,特别是在 SSM(Spring、Spring MVC、Mybatis)整合项目中,合理地配置 Log4j 对项目的日志记录和输出至关重要。本文将详细介绍 SSM 整合中的 Log4j 配置详情,帮助...

    log4j2-所需jar包+配置详解(详细)

     log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式,2.x版本配置文件后缀名只能为".xml",".json"或者".jsn".  系统选择配置文件的优先级(从先到后)如下:  (1).classpath下的名为log4j2-test.json...

    老生常谈Log4j和Log4j2的区别(推荐)

    然后使用Logger.getLogger()方法获取日志记录器,而Log4j2需要import org.apache.logging.log4j.Level、org.apache.logging.log4j.LogManager和org.apache.logging.log4j.Logger,使用LogManager.getLogger()方法...

    log4j需要的jar以及properties文件

    Log4j是Apache组织开发的一款强大的日志处理框架,广泛应用于Java编程中。...虽然Log4j 1.x已经较为陈旧,但现在仍有许多项目在使用。不过,为了获取最新的安全更新和功能,建议更新到Log4j 2.x版本。

    log4j乱码问题解决办法

    1. **打开log4j.properties文件**: - 首先需要找到项目的`log4j.properties`文件。这个文件通常位于项目的配置文件夹中。 2. **指定字符编码**: - 在`log4j.properties`文件中,可以通过指定`appender`的编码...

    log4j简单使用

    5. **配置文件**: `log4j.properties`或`log4j.xml`是Log4j的配置文件,通过配置这些文件,我们可以定制日志行为。例如,我们可以指定哪个Logger的级别,选择哪个Appender,以及定义日志格式。 6. **Filter**: ...

    SpringBoot框架配置log4j和log4j2的配置代码

    2. **配置文件**:创建`log4j.properties`或`log4j.xml`文件,定义日志级别和输出目的地。例如: ```properties # log4j.properties 示例 log4j.rootLogger=DEBUG, stdout, file log4j.appender.stdout=org.apache....

    项目配置文件( spring-mvc.xml spring-mybatis.xml web.xml log4j.properties)

    这里提到的四个关键配置文件——`spring-mvc.xml`、`spring-mybatis.xml`、`web.xml`以及`log4j.properties`,对于一个基于Java的Web应用来说至关重要,特别是使用Spring MVC和MyBatis框架的时候。接下来,我们将...

    log4j使用教程(详解)

    配置Log4j主要通过log4j.properties或log4j.xml文件进行,定义Logger的级别、Appender的目标和Layout的格式。例如: ```properties log4j.rootLogger=DEBUG, FILE log4j.appender.FILE=org.apache.log4j....

    log4j+slf4j实现 log4j测试代码,log4j+slf4j实现 log4j测试代码

    2. **配置Log4j**:在项目的类路径下创建`log4j.properties`或`log4j.xml`配置文件,指定日志级别、输出目的地等。例如: ```properties # log4j.properties log4j.rootLogger=DEBUG, stdout log4j.appender....

    log4j.xml

    在Java开发中,日志记录是不可或缺的一部分,而Log4j作为一款广泛使用的日志框架,它的配置文件log4j.xml扮演着至关重要的角色。本文将深入探讨log4j.xml配置文件的结构、用途及其中的关键元素,帮助开发者更好地...

    log4j示例项目

    在Log4j项目中,通常会有一个`log4j.properties`或`log4j.xml`配置文件,用于定义日志行为。例如: ```properties # log4j.properties 示例 log4j.rootLogger=DEBUG, stdout, FILE log4j.appender.stdout=org....

    log4j日志报错解决办法

    1. `log4j.properties`文件没有被正确地打包进最终的JAR或WAR文件。 2. 配置文件路径不正确,需要检查是否在正确的类路径下。 3. 应用程序可能加载了其他地方的Log4j配置,例如系统级的Log4j配置。 总的来说,处理...

    java log4j统一打印在user.dir目录下(windows、linux通用、不用考虑不同操作系统分隔符不一致的情况)

    这可以通过在部署环境中覆盖`log4j.properties`或`log4j.xml`文件来实现,或者使用环境变量或命令行参数动态设置。 总的来说,通过合理配置Log4j,可以轻松地实现跨平台的日志管理,使得在Windows和Linux系统中日志...

    log4j.properties文件放置在其它目录下

    将 log4j.properties 文件放置在其它目录下需要我们手动指定 log4j 配置文件的路径,并使用 servlet 或 listener 来初始化 Log4J 日志引擎。这样我们可以灵活地控制 log4j 的配置文件的路径,并且确保 Log4J 日志...

    Log4J.xml的模板

    标题中的“Log4J.xml”指的是Apache Log4j框架的配置文件。Log4j是Java平台上广泛使用的日志记录工具,它允许程序员以灵活和可配置的方式控制应用程序的日志输出。XML格式的配置文件提供了更高级别的结构和可读性,...

Global site tag (gtag.js) - Google Analytics