`

log4j 日志配置

阅读更多

 

log4j 大概的配置方式可分为 2 种:

 

第一种: log4j.xml 配置

1、 导入架包 log4j-1.2.17.jar

        查看附件

2、 写 log4j.xml 的配置内容(部分示例)

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<!-- <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> -->
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/" threshold="null" debug="null">
    
	<!-- FATAL > ERROR > WARN > INFO > DEBUG -->
	<!-- ============================================== -->
	<!-- appender definitions (输出端定义) -->
	<!-- ============================================== -->
	<appender name="console" class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="[%d{yyyy-MM-dd HH:mm:ss}] %-4r [%t] %-5p %c %x %l %m%n" />
		</layout>
		<!--过滤器设置输出的级别 -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="levelMin" value="debug" />
			<param name="levelMax" value="warn" />
			<param name="AcceptOnMatch" value="true" />
		</filter>
	</appender>
	
	<!-- 输出日志到指定日志文件  -->  
	<appender name="file" class="org.apache.log4j.FileAppender">
        <!-- 设置File参数:日志输出文件名 -->
		<param name="File" value="c:/logs/springmvc_logs/file.log"/>
        <!-- 设置是否在重新启动服务时,在原有日志的基础添加新日志 -->
        <param name="Append" value="true" />
        <!-- 设置文件大小 -->
        <param name="MaxFileSize" value="1MB" />
        <!-- 设置文件备份 -->
        <param name="MaxBackupIndex" value="100" />
        <!-- 设置输出文件项目和格式 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d|[%t]|%-5p|%c| - %m%n"/>
		</layout>
	</appender>
	<!-- 输出日志到指定日志文件 每天一个日志 -->
	<appender name="file_daily" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="c:/logs/springmvc_logs/file_dayly.log" />
		<param name="Append" value="true"/>
		<param name="DatePattern" value="'.'yyyy-MM-dd'.log'" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n"/>
		</layout>
	</appender>
	
	<!-- ============================================== -->
	<!-- root logger (基础logger定义, 没有定义的logger用这个默认的配置) -->
	<!-- ============================================== -->
	<root>
		<level value="${rootlevel}"/>
		<appender-ref ref="console" />
		<appender-ref ref="file_daily" />
	</root>
	
	<!-- ============================================== -->
	<!-- logger definitions (logger定义) additivity 是否遵循缺省的继承机制 root logger,会出现重复日志 -->
	<!-- ============================================== -->
	<logger name="com.lw.controller" additivity="false">
		<level value="INFO" />
		<appender-ref ref="console" />
		<appender-ref ref="file_daily" />
		<appender-ref ref="file" />
	</logger>
	
</log4j:configuration>

 

 

3、 web.xml 导入log4j.xml 配置

 

	<!-- 配置加载log4j.xml文件路径 --> 
	<context-param>
	    <param-name>log4jConfigLocation</param-name>
		<param-value>/WEB-INF/log4j.xml</param-value>
	</context-param>
	<!-- 配置log4j.xml变量 -->
	<context-param>
		<param-name>rootLevel</param-name>
		<param-value>DEBUG</param-value>
	</context-param>
	<context-param>
		<param-name>loggingLevel</param-name>
		<param-value>INFO</param-value>
	</context-param>
	<!-- 配置log4j.xml监听器 -->
	<listener>
		<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
	</listener>

 

 

4、 在需要写日志的类中实例化 log4j的日志类

 

@Controller
public class HelloController {

    protected Logger log = Logger.getLogger(HelloController.class);
//    protected Logger log = Logger.getLogger("com.lw.controller");
    
    @RequestMapping("index")
    public ModelAndView index() {
	log.info("===============进入 Index 方法");
	String str = "Hello World. <br/>This is page index";
	return new ModelAndView("index", "str", str);
    }

 

 

 

第二种: log4j.properties 属性文件配置

1、导入架包(同上)

2、log4j.properties 属性配置

 

log4j.rootLogger=info, ServerDailyRollingFile, stdout

### 每天生产一个日志文件
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.ServerDailyRollingFile.DatePattern='-'yyyy-MM-dd'.log' 
log4j.appender.ServerDailyRollingFile.File=C:/logs/mylog.log 
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout 
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n 
log4j.appender.ServerDailyRollingFile.Append=true

### 输出控制台 appender
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n

 

 

3、web.xml 配置导入 log4j.properties属性文件、 代码中硬编码导入log4j.properties

 

<!--     log4j.properties 日志配置属性文件 -->
    <context-param>  
        <param-name>log4jConfigLocation</param-name>  
       <param-value>/WEB-INF/log4j.properties</param-value>  
    </context-param>

 或者

PropertyConfigurator.configure("log4j.properties"); 

// a). 代码中,PropertyConfigurator.configure("bin/log4j.properties"); 
// b). 代码中,PropertyConfigurator.configure(ClassLoader.getSystemResource("log4j.properties"));


 

4、需要写日志的类中实例化日志类(同上)

 

相关问题及解决方案:

DailyRollingFileAppender(每天产生一个日志文件),  每天生成新文件的时候,  会调用一个 renameTo 的方法, 就是把日志文件改成当前日期对应的文件,  如: mylog.log > renameTo > mylog.log.2015-05-15.log时, 由于 mylog.log 已经打开,在window下是不允许重命名操作的, 所以会报错。 所以改用 复制文件的方式, 自定义copy方法, 代码如下:

原来用的是:


 

修改以后是:


 

    /**
     * Copies src file to dst file. If the dst file does not exist, it is
     * created.4KB cache
     * 日志文件拷贝好以后, 清空原文件的内容, 保证每次记录的只有当天的内容
     * 
     * @param src
     * @param dst
     * @throws IOException
     */
    boolean copy(File src, File dst) throws IOException {
	try {
	    int leave = 1000 * 4; //1024 * 1000; // 文件剩下的字符数 1MB = 1024KB = 1024 * 1000Byte
	    byte[] inOutb;// byte数组接受文件的数据
	    
	    FileInputStream in = new FileInputStream(src);
	    FileOutputStream out = new FileOutputStream(dst);

	    // 剩余的流数据
	    inOutb = new byte[leave];
	    in.read(inOutb, 0, leave);
	    out.write(inOutb);
	    out.flush();

	    in.close();
	    out.close();
	    
	    // 源文件, 清空时需要
	    FileOutputStream out1 = new FileOutputStream(src);
	    // copy好源文件后,  清空原日志文件内容
	    out1.write("".getBytes());
	    out1.close();
	    return true;
	} catch (FileNotFoundException e) {
	    LogLog.error("源文件不存在,或者目标文件无法被识别.");
	    return false;
	} catch (IOException e) {
	    LogLog.error("文件读写错误.");
	    return false;
	}
    }

 

 

附:  log4j 配置参数说明

log4j.rootLogger=日志级别,appender1, appender2, ….

  • 日志级别:ALL<DEBUG<INFO<WARN<ERROR<FATAL<OFF,不区分大小写
  • 注意,需在控制台输入,只需将其中一个appender定义为stdout即可
  • 注意,rootLogger默认是对整个工程生效
  • 注意,如果只想对某些包操作,那么:log4j.logger.com.hutu=info, stdout,表示该日志对package com.hutu生效
  • 注意,这样做可以区分dev/线上,也可以减小性能影响:if(log.isDebugEnabled()){log.debug();}

红唇 log4j.appender.appender1=org.apache.log4j.日志输出到哪儿

  • ConsoleAppender(控制台)
  • FileAppender(文件)
  • DailyRollingFileAppender(每天产生一个日志文件)
  • RollingFileAppender(文件大小到达指定尺寸时产生一个新的文件)
  • WriteAppender(将日志信息以流格式发送到任意指定的地方)
  • JDBCAppender(将日志信息保存到数据库中)

红唇 log4j.appender.appender1.File=文件目录及文件

${user.home}/logs/...

红唇 log4j.appender.appender1.MaxFileSize=最大文件大小

红唇 log4j.appender.appender1.MaxBackupIndex=备份文件个数

  • 其中,appender1是在第一行定义过的;
  • 文件目录及文件,例如,/home/admin/logs/hutudan.log
  • 最大文件大小,例如,100KB
  • 备份文件个数,例如,1

红唇 log4j.appender.ServerDailyRollingFile.DatePattern=日志后缀格式

  • 例如,'-'yyyy-MM-dd'.log'

红唇 log4j.appender.appender1.layout=org.apache.log4j.日志布局格式

  • HTMLLayout(以HTML表格形式布局)
  • SimpleLayout(包含日志信息的级别和信息字符串)
  • TTCCLayout(包含日志产生的时间,执行绪,类别等信息)
  • PatternLayout(可以灵活的指定布局格式,常用

红唇 log4j.appender.appender1.layout.ConversionPattern=日志输出格式

  1. 例如,%d - %m%n或%d{yyyy-MM-dd HH:mm:ss} %p [%c] %m%n
  2. %c 输出日志信息所属的类的全名
  3. %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-M-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
  4. %f 输出日志信息所属的类的类名
  5. %l 输出日志事件的发生位置,即输出日志信息的语句处于它所在的类的第几行
  6. %m 输出代码中指定的信息,如log(message)中的message
  7. %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
  8. %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
  9. %r 输出自应用启动到输出该日志信息所耗费的毫秒数
  10. %t 输出产生该日志事件的线程名
  11. 可参考:http://blog.sina.com.cn/s/blog_4e4dd5570100qowy.html

红唇 log4j.appender.ServerDailyRollingFile.Append=true

  • 例如,不解释,追加往后写便是

红唇 总结一下:

  • Logger类:完成日志记录,设置日志信息级别
  • Appender类:决定日志去向,终端、DB、硬盘
  • Layout类:决定日志输出的样式,例如包含当前线程、行号、时间

 

 

 

  • 大小: 173.2 KB
  • 大小: 14.7 KB
  • 大小: 12.3 KB
分享到:
评论
1 楼 威化考拉 2017-12-19  
不错

相关推荐

    Log4j日志配置说明,Log4j日志配置说明

    ### Log4j日志配置详解 #### 一、概述 Log4j 是一个基于 Java 的开源日志记录框架,由 Apache 软件基金会维护。它允许开发人员根据等级记录日志信息,使得用户能够控制日志信息的记录级别及去向。本文将通过一份...

    tomcat下的log4j日志配置

    ### Tomcat 下的 Log4j 日志配置详解 在日常的 Web 开发中,日志记录对于调试问题、监控系统状态以及后期维护来说至关重要。在使用 Apache Tomcat 作为服务器时,合理配置日志框架(如 Log4j)能够极大地提高开发...

    log4j日志配置以及配置文件详解

    Log4j作为Java领域广泛应用的日志框架,提供了强大的日志记录功能和灵活的配置。本文将深入探讨log4j的配置以及配置文件的详解。** 首先,我们要理解什么是`log4j.properties`文件。这是log4j框架的配置文件,使用...

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

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

    logstash 采集log4j日志配置文件

    logstash采集log4j日志发送到es配置文件,可以把日志根据日志级别区分开,一个级别一条日志是es中的一条数据

    tomcat下struts2的log4j日志配置.doc

    动态配置的好处在于可以在运行时更改日志配置,适应不同的环境需求。 以下是一个简单的Java示例,展示了如何在代码中进行动态配置: ```java import org.apache.log4j.BasicConfigurator; import org.apache.log4j...

    spring日志配置为log4j

    总之,将Spring的日志配置为Log4j,涉及到引入Log4j库、编写`log4j.properties`配置文件、以及在Spring配置文件中声明使用Log4j。理解这些步骤和配置项对于优化日志记录,排查问题以及监控系统运行状态至关重要。

    log4j中配置日志文件相对路径方法(PDF)

    这种方法不仅提高了日志文件管理的灵活性,还能降低因环境变化导致的日志配置错误风险,从而提高系统的稳定性和可维护性。开发者可以根据自己的需求选择最适合的配置方式,确保日志文件能够在不同的环境中正确输出。

    tomcat6.0 配log4j日志的必须文件及配置过程

    tomcat6.0 配log4j日志的必须文件及配置过程 tomcat6-------lib | |--------tomcat-juli-adapters.jar | |--------log4j.jar | |--------log4j.properites | |----bin |--------tomcat-juli.jar 最后把log4...

    Mybatis的log4j日志配置文件

    Mybatis的log4j日志配置文件

    配置Log4j的详细最好的日志工具

    ### 配置Log4j的详细指南:最佳的日志管理工具 #### 一、引言 在软件开发过程中,良好的日志记录对于调试、维护和性能优化等方面具有至关重要的作用。Log4j作为Apache下的一个开源项目,因其高度灵活性、易配置性...

    log4j(二):动态配置日志输出路径

    例如,在Java代码中,可以使用`PropertyConfigurator.reconfigure()`方法重新加载.properties文件,或者直接通过`Logger`类的`setLevel()`和`addAppender()`等方法来改变日志配置。 ```java import org.apache.log4...

    log4j 配置文档(记录日志)

    【log4j配置文档(记录日志)】 Log4j是Apache开源组织提供的一款强大的Java日志记录框架,它的灵活性和可配置性使得它成为Java开发中的首选日志工具。Log4j允许开发者精确控制日志信息的输出,无论是输出到控制台、...

    log4j实用配置扩展

    log4j的主要优势在于其灵活性和可扩展性,允许用户通过配置文件自定义日志记录的方式,无需修改应用程序代码。 #### 二、日志记录的目的 在应用程序中记录日志主要有以下三个目的: 1. **监视代码中变量的变化...

    log4j2配置文件,按照文件大小划分日志,保存日期天数内的日志等

    log4j2配置文件,按照文件大小划分日志,保存日期天数内的日志,指纹日志命名规则,日志输出等级等功能

    log4j按功能保存日志

    在“log4j按功能保存日志”的场景中,我们通常会利用Log4j的配置灵活性,将不同功能的日志分别写入不同的文件,以便于后期分析、排查问题和监控系统状态。 1. **Log4j基本概念** - **Logger**: 日志记录器,是Log4...

    log4j日志报错解决办法

    Log4j 是一款广泛使用的Java日志记录框架,它提供了灵活的日志配置和丰富的日志级别,便于开发者调试和监控应用程序。在Java开发过程中,如果遇到"log4j:WARN Please initialize the log4j system properly"这样的...

    log4j配置和加载方法

    在`.properties`文件中,配置信息通过键值对的形式呈现,如示例中的`log4j.category.org.zblog=ERROR,A1`,这里指定了`org.zblog`这个logger的日志级别为`ERROR`,并关联到名为`A1`的appender。 2. **.xml格式**:...

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

    Log4j和Log4j2是两种广泛使用的Java日志框架,它们提供了灵活的日志配置和高性能的日志处理能力。本文将详细介绍如何在SpringBoot项目中配置Log4j和Log4j2。 ### SpringBoot与Log4j Log4j是Apache的一个开源项目,...

Global site tag (gtag.js) - Google Analytics