(二)Log4j

本文详细介绍了Log4j框架的两种配置方式:log4j.properties和log4j.xml。包括如何配置日志输出目的地、布局、控制单元及日志级别等关键信息。并对比了两种配置方式的特点。

log4j: log for java 

    一个开源的,轻量级的,用于日志管理的框架

 

日志监控打印,在项目试运行期需要记录用户所有的操作

②添加新的内容,比如时间和线程

③程序调试期间,记录运行的步骤和运行行

④成功上线稳定运行后,不再需要打印了,或需要时打开日志,或只打开info error日志 关闭debug日志等

⑤多个日志的输出源,比如到数据库、eclipse控制台,或者日志文件到linux服务器下,或输入到指定的文件

 

log4j的两种配置方式

一、los4j.properties

①目的地【appender】:是将日志打印到控制台、输入到文件里、还是保存到数据库里......

  myName是自定义的目的地的名字
  log4j.appender.myName=org.apache.log4j.ConsoleAppender (控制台)
  log4j.appender.myName=org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
  log4j.appender.myName=org.apache.log4j.FileAppender    (文件)
  log4j.appender.myName =org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  log4j.appender.myName=org.apache.log4j.WriteAppender(将日志以流的格式发送到任意指定的地方)
  log4j.appender.myName=org.apache.log4j.JDBCAppender(把日志用JDBC记录到数据库中)

②布局【layout】:指输出信息的格式

  log4j.appender.myName.layout=org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
  log4j.appender.myName.layout=org.apache.log4j.HTMLLayout  (以html表格形式布局)
  log4j.appender.myName.layout=org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
  log4j.appender.myName.layout=org.apache.log4j.TTCCLayout  (包含日志产生的时间、线程、类别等信息)

③控制单元【logger】:(rootLogger为老根单元)

假设name1为 atguigu.File 输出到文件   name2为 atguigu.Console 输出到控制台
  log4j.rootLogger=info,name1,name2     #(rootLogger 输出日志的根)
  log4j.logger.com.atguigu.p2p =error,name1,name2

    有多个控制单元 :日志级别取精确,输出为各自:
          级别取其精:com.atguigu.p2p.dao下的类,log4j.logger.com.atguigu.p2p路径较精确 所以取他的日志级别error,
          输出为各自:log4j.rootLogger的name2为输出到控制台 log4j.logger.com.atguigu.p2的name2也输出到控制台 所以输出两次 

 

④级别【level】:debug info warn error

debug < info < warn < error 

    打印自身往后靠:log4j.rootLogger=info,name1,name2 若是info 则打印 info warn error的日

 

 

 

例1:

  log4j.appender.logConsole=org.apache.log4j.ConsoleAppender        #将日志打印在控制台上
  log4j.appender.logConsole.layout=org.apache.log4j.PatternLayout   #以自定义的方式打印在控制台上
  log4j.appender.logConsole.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p (%C:%M)  %m%n   #自定义日志输出格式

  log4j.appender.logFile=org.apache.log4j.DailyRollingFileAppender  #每天产生一个日志文件
  log4j.appender.logFile.File=${catalina.home}/logs/newNetLottery_ldc/all.log  #产生的日志文件的位置,名字为all.log
  log4j.appender.logFile.DatePattern=.yyyy-MM-dd       #每天生成日志文件名的后缀,如all.log.2016.10.10
  log4j.appender.logFile.layout=org.apache.log4j.PatternLayout     #以自定义的方式输入到日志文件里
  log4j.appender.logFile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p (%C:%M) -%m%n  #自定义日志输出格式

  log4j.rootLogger=error,logFile,logConsole       #(rootLogger 输出日志的根)
  log4j.logger.com.atguigu.p2p=debug,logFile,logConsole   #com.atguigu.p2p下的包日志级别为debug
  log4j.logger.com.atguigu.p2p.dao=info,logFile,logConsole  # com.atguigu.p2p.dao 包下的类日志的级别取此处的日志级别              

两个目的地:logFile和logConsole都制定自己的布局和日志的输出格式  

从控制单元logger可以看出老根(所有的类下)除非com.atguigu.p2p包下的类只打印error的日志

com.atguigu.p2p下除了com.atguigu.p2p.dao包下的类里打印的日志为debug即以上级别的日志

com.atguigu.p2p.dao包下的类里打印的日志为info即以上级别的日志

但是三个logger都有目的 logFile和logConsole,com.atguigu.p2p.dao下的类,也属于com.atguigu.p2p包下,也属于老根的包下,所以logFile会打印三回,logConsole也会打印三回,若只想输入一回则只在老根包下加入目的地即可,老根代表所有的包下的类都会打印到其配置的目的地,如果com.atguigu.p2p.dao是我自己开发的包,我同时想把日志打印到我自己的目的地,我可以单独添加一个目的地即可

例2:

log4j.appender.all=org.apache.log4j.DailyRollingFileAppender #一天生成一个日志文件
log4j.appender.DRF.Append=true #日志内容是追加到文件的 默认就是true不用设置 若为false每次打印日志将覆盖
log4j.appender.Threshold=warn  #全局过滤,虽然老根指定了打印info级别的,或者更精确的控制器指定了更小级别的,但是此输出目的,全局过滤warn级别以下的日志,只打印warn以及以上级别的日志
log4j.appender.all.layout=org.apache.log4j.PatternLayout
log4j.appender.all.File=${catalina.home}/logs/newNetLottery_plant/all.log
log4j.appender.all.DatePattern='.'yyyy-MM-dd
log4j.appender.all.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}-[%X{IP}#%X{USER}]-%5p %23c{1}:%5L - %m%n

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}-[%X{IP}#%X{USER}]-%5p %23c{1}:%5L - %m%n

log4j.appender.summary=org.apache.log4j.DailyRollingFileAppender  #自定义我开发的包下的输出目的地
log4j.appender.summary.layout=org.apache.log4j.PatternLayout
log4j.appender.summary.File=${catalina.home}/logs/newNetLottery_plant/summary.log
log4j.appender.summary.DatePattern='.'yyyy-MM-dd
log4j.appender.summary.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss}-[%X{IP}#%X{USER}]-%5p %23c{1}:%5L - %m%n


log4j.rootLogger=INFO, all, stdout  #所有包下的类 若不指定精确的日志级别就打印info以及以上的日志到all文件和控制台上
log4j.logger.com.newNet.lottery=debug, summary  
#com.newNet.lottery包下的类是我开发的,将我开发的类打印的日志不仅在all和stdout两个目的地打印日志也要在summary打印日志
#并且打印日志的级别为debug,打印debug以及以上的日志


#以下都是打印到老根指定的目的地,打印的级别根据下面指定的打印
log4j.logger.com.ibatis=debug  
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug 
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug 
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug 
log4j.logger.org.springframework.web=debug
log4j.logger.org.sitemesh=debug 
log4j.logger.java.sql.Connection=debug 
log4j.logger.java.sql.Statement=debug 
log4j.logger.java.sql.PreparedStatement=debug

 

 二、los4j.xml (可以做到只打印debug而不打印级别高于debug的,并且输出为各自也可以控制,关掉传播机制即可,然而log4j.properties不可以 只能打印自身往后靠,输出为各自)

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<!-- xml比properties日志文件的优势:① 能够更细粒度打印级别(只打印debug) ② 停止控制单元的传播机制避免多个输出源的同时打印 -->

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">

	<appender name="logConsole" class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %5p (%C:%M) - %m%n" />
		</layout>
		
		<!-- ① 级别范围过滤器  properties文件不具备的功能  可以控制到只打印debug levelMin和levelMax都配置成debug即可-->
 		<filter class="org.apache.log4j.varia.LevelRangeFilter"> 
				<param name="levelMin" 	value="debug" />   >=debug
				<param name="levelMax" 	value="debug" />   <=debug
 				<param name="AcceptOnMatch" value="true" />  
		</filter> 
	</appender>

	<appender name="logFile" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" 	value="D:\\atguigu4XML.log" />
		<param name="Append" value="true" />
		<param name="DatePattern" value="'.'yyyy-MM-dd" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{HH:mm:ss,SSS} %5p (%C{1}:%M) - %m%n" />
		</layout>
	</appender>
	
	
    <!-- ② 控制单元 additivity=false 传播机制关闭 com.atguigu.dao下的类打印日志的时候就只有此控制器生效 避免多个输出源多次打印-->
	<logger name="com.atguigu.dao" additivity="false">
		<level value="info" />
		<appender-ref ref="log.console" />
		<appender-ref ref="log.file" />
	</logger>

	<logger name="com.atguigu" additivity="false"> 
		<level value="debug" /> 
 		<appender-ref ref="log.console" />
		<appender-ref ref="log.file" /> 
	</logger> 
	
	<root>
		<level value="error" />
		<appender-ref ref="logConsole" />
		<appender-ref ref="logFile" />
	</root>	 
  

</log4j:configuration>

当log4j.properties和log4j.xml两个文件共存的时候 log4j.properties将不起作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值