Log4j:日志记录工具

一. Log4j的配置:

  • 1.日志记录器(Logger)的行为等级:

    • 分为OFFFATALERRORWARNINFODEBUGALL七个等级,级别从高到低;

    • Log4j也支持自己设置自定义行为并分配等级;

    • Log4j建议只使用四个级别: ERROR、WARN、INFO、DEBUG。通过定义输出级别可以控制一些级别不被输出日志。例如倘若定义了INFO级别, 则应用程序中所有DEBUG级别的日志信息将不被输出;

    • 所以从上面来说我们最好设置的日志级别为INFO ,或者是DEBUG级别。推荐使用DEBUG级别,可以显示所有的日志。

  • 2.相关依赖jar包

    • apache-log4j-extras-1.2.17.jar
    • log4j-1.2.17.jar
  • 3.配置文件的准备

    • (1)配置方式

      • a.通过properties文件配置:造成输出日志多种行为等级混合,不能很好区分;
      • b.通过xml配置,可以控制指定的等级输出到合适的空间中,便于管理
    • (2)配置文件头的编写

      • 首先添加xml头文件信息:

        a. DOCTYPE: log4j:configuration

        b. SYSTEM: 导入本地约束dtd文件路径(需在xml–catalog中进行设置)

        在这里插入图片描述

    • (3) web.xml注册log4j.xml的所在路径

        <context-param>
        	<param-name>log4jConfigLocation</param-name>
        	<param-value>classpath:log4j.xml</param-value>
        	 <!-- 
        	 <param-value>/WEB-INF/log4j.properties</param-value>
        	 -->
        </context-param>
      
  • xml代码:

1.头部代码及相关说明

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "E:\study\Java\javaweb相关资料\log4j\apache-log4j-1.2.17\src\main\resources\org\apache\log4j\xml\log4j.dtd">
<log4j:configuration debug="true"
	xmlns:log4j='http://jakarta.apache.org/log4j/'>
	<!-- ========================== 自定义输出格式说明================================ -->
	<!-- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL -->
	<!-- %r 输出自应用启动到输出该log信息耗费的毫秒数 -->
	<!-- %c 输出所属的类目,通常就是所在类的全名 -->
	<!-- %t 输出产生该日志事件的线程名 -->
	<!-- %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” -->
	<!-- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 
		22:10:28,921 -->
	<!-- %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlo4.main(TestLog4.java:10) -->
	<!-- ========================================================================== -->

	<!-- ========================== 输出方式说明================================ -->
	<!-- Log4j提供的appender有以下几种: -->
	<!-- org.apache.log4j.ConsoleAppender(控制台), -->
	<!-- org.apache.log4j.FileAppender(文件), -->
	<!-- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), -->
	<!-- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), -->
	<!-- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) -->
	<!-- ========================================================================== -->

2.定义debug输出信息

	<appender name="log4jDebug" class="org.apache.log4j.RollingFileAppender">
		<param name="File" value="E:/UserManager/logs/logDebug.log" />
		<!-- 是否可延长 -->
		<param name="Append" value="true" />
		<!-- 文件达到指定尺寸时生成新文件 -->
		<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
			<param name="FileNamePattern" value="E:/UserManager/logs/logDebug_%d{yyyy-MM-dd}.log" />
		</rollingPolicy>
		<!-- 定义输出格式 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c  Method: %l ]%n%p:%m%n" />
		</layout>
		<!-- 过滤器,指定的等级将被写入该日志文件 -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="DEBUG" />
			<param name="LevelMax" value="DEBUG" />
		</filter>
	</appender>

3.定义info输出信息

	<appender name="log4jInfo" class="org.apache.log4j.RollingFileAppender">
		<param name="File" value="E:/UserManager/logs/logInfo.log" />
		<!-- 是否可延长 -->
		<param name="Append" value="true" />
		<!-- 文件达到指定尺寸时生成新文件 -->
		<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
			<param name="FileNamePattern" value="E:/UserManager/logs/logInfo_%d{yyyy-MM-dd}.log" />
		</rollingPolicy>
		<!-- 定义输出格式 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c  Method: %l ]%n%p:%m%n" />
		</layout>
		<!-- 过滤器,指定的等级将被写入该日志文件 -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="INFO" />
			<param name="LevelMax" value="INFO" />
		</filter>
	</appender>

4.定义控制台输出信息

	<!-- 控制台输出 -->
	<appender name="cmd" class="org.apache.log4j.ConsoleAppender">
		<param name="Threshold" value="info" />
		<param name="Target" value="System.out" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d [%t] %-5p %c %x - %m%n" />
		</layout>
		<!-- <filter class="org.apache.log4j.varia.LevelRangeFilter"> <param name="levelMin" 
			value="DEBUG" /> <param name="levelMax" value="DEBUG" /> </filter> <filter 
			class="org.apache.log4j.varia.StringMatchFilter"> <param name="StringToMatch" 
			value="需要过滤的信息片段" /> <param name="AcceptOnMatch" value="false" /> </filter> 
			<filter class="org.apache.log4j.varia.StringMatchFilter"> <param name="StringToMatch" 
			value="需要过滤的信息片段" /> <param name="AcceptOnMatch" value="false" /> </filter> -->
	</appender>

5.定义warn输出信息

	<appender name="log4jWarn" class="org.apache.log4j.RollingFileAppender">
		<!-- 是否可延长 -->
		<param name="Append" value="true" />
		<!-- 文件达到指定尺寸时生成新文件 -->
		<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
			<param name="FileNamePattern" value="E:/UserManager/logs/logWarn_%d{yyyy-MM-dd}.log" />
		</rollingPolicy>
		<!-- 定义输出格式 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionParttern"
				value="%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c  Method: %l ]%n%p:%m%n" />
		</layout>
		<!-- 过滤器,指定的等级将被写入该日志文件 -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="WARN" />
			<param name="LevelMax" value="WARN" />
		</filter>
	</appender>

6.定义error输出信息

	<appender name="log4jError" class="org.apache.log4j.RollingFileAppender">
		<param name="File" value="E:/UserManager/logs/logError.log" />
		<!-- 是否可延长 -->
		<param name="Append" value="true" />
		<!-- 文件达到指定尺寸时生成新文件 -->
		<rollingPolicy class="org.apache.log4j.rolling.TimeBasedRollingPolicy">
			<param name="FileNamePattern" value="E:/UserManager/logs/logError_%d{yyyy-MM-dd}.log" />
		</rollingPolicy>
		<!-- 定义输出格式 -->
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern"
				value="%d{yyyy-MM-dd HH:mm:ss a} [Thread: %t][ Class:%c  Method: %l ]%n%p:%m%n" />
		</layout>
		<!-- 过滤器,指定的等级将被写入该日志文件 -->
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="LevelMin" value="ERROR" />
			<param name="LevelMax" value="ERROR" />
		</filter>
	</appender>

	<!-- 通过发送邮件的方式输出日志文件 -->
	<!-- <appender name="Mail" class="SMTPAppender"> -->
	<!-- 设定输出级别 -->
	<!-- <param name="threshold" value="info" /> -->
	<!-- 缓存文件大小,日志达到512K时发送Email -->
	<!-- <param name="BufferSize" value="512" />单位K -->
	<!-- <param name="From" value="test@163.com" /> -->
	<!-- <param name="SMTPHost" value="smtp.163.com" /> -->
	<!-- <param name="Subject" value="juyee-log4jMessage" /> -->
	<!-- <param name="To" value="test@163.com" /> -->
	<!-- <param name="SMTPUsername" value="test" /> -->
	<!-- <param name="SMTPPassword" value="test" /> -->
	<!-- <layout class="org.apache.log4j.PatternLayout"> -->
	<!-- <param name="ConversionPattern" value="%-d{yyyy-MM-dd HH:mm:ss.SSS 
		a} [%p]-[%c] %m%n" /> -->
	<!-- </layout> -->
	<!-- </appender> -->

7.定义全局输出方式,即指定真正执行的相关appender

	<!-- 全局输出的方式 -->
	<root>
		<priority value="debug" />
		<appender-ref ref="log4jInfo" />
		<appender-ref ref="log4jError" />
		<appender-ref ref="cmd" />
	</root>
</log4j:configuration>

二. Log4j的应用:

  • 在指定的service类下应用示例:

    • serviceImpl类代码

        private Logger log = Logger.getLogger(SysUserServiceImpl.class);
      
        @Override
        public int addSysUser(SysUser sysUser) {
        	log.info("add user named "+sysUser.getUserName()+"and 
        	whose password is "+sysUser.getPassword());
        	return sysUserDao.addSysUser(sysUser);
        }
      
    • 当插入相关数据,后在指定的路径生成log文件,并记录插入信息

      1.插入测试数据name=测试3 password=1

      2.logoInfo.txt中新增的记录

        2019-06-05 23:39:12 下午 [Thread: http-bio-8080-exec-8]
        [ Class:com.usermanager.service.SysUserServiceImpl  Method: 
        com.usermanager.service.SysUserServiceImpl.addSysUser(SysUserServiceImpl.java:24) ]
        INFO:add user named 测试3and whose password is 1
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值