log4j.properties、log4j.xml

log4j.properties

四个关键:

  • appender:目的地,输出到哪些地方
#以文件形式输出 
log4j.appender.wangteng.File=org.apache.log4j.DailyRollingFileAppender
log4j.appender.wangteng.File.file=E:\\my.log
log4j.appender.wangteng.File.DatePattern=.yyyy-MM-dd

#以控制台形式输出
log4j.appender.wangteng.Console=org.apache.log4j.ConsoleAppender
  • layout:输出样式
# 输出样式 为 用户自定义
log4j.appender.wangteng.File.layout=org.apache.log4j.PatternLayout
#(%C:%M) 包名+类名:方法  
#%m 日志信息  %n 回车
# %5p 日志级别,不够5位的补空格,-5p左对齐,5p右对齐
log4j.appender.wangteng.File.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS %5p (%C:%M) - %m%n} 

log4j.appender.wangteng.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.wangteng.Console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS %5p (%C:%M) - %m%n} 
  • logger:控制单元
#默认 debug级别,输出到文件,输出到控制台
log4j.rootLogger=debug,wangteng.File,wangteng.Console
  • level:级别
    debug < info < warn < error
    假如 log4j.rootLogger=info,…,只打印出info和info之后级别的日志

总结:以什么样的格式,按照日志的优先级,将日志输出到哪
Appender、Layout、Logger的关系:
每个Appender后面必然需要跟随Layout,指定自己的风格样式
每个Logger都可以指定一个级别和引用多个Appender
每个Appender可以被多个Logger引

常见Appender,前3个常用:
org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFIleAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志以流格式发送到任意指定的地方)
org.apache.log4j.ConsoleAppender(把日志用JDBC记录到数据库中)

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

常用PatternLayout:
%m 输出代码中指定的信息
%p 输出优先级,即DEBUG、INFO、WARN、ERROR
%r 输出自应用启动到输出该log耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车符,windows为"\r\n",linux为"\n"
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy-MM-dd HH-mm-ss,SSS}

多个输出源:

#
log4j.logger.com.wangteng=error,wangteng.File,wangteng.Console
log4j.logger.com.wangteng.dao=info,wangteng.File,wangteng.Console
log4j.rootLogger=debug,wangteng.File,wangteng.Console
#级别取包名类名指定最精确的,输出各自都输出

log4j.xml


<log4j:configuration>
	<appender>...<appender>
	<appender>...<appender>
	
	<logger>...logger>
	<logger>...logger>
	<root>...root>
log4j:configuration>


<log4j:configuration>
	<appender name="wangteng.console" class="org.apache.log4j.ConsoleAppender">
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value=“%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p (%C:%M) - %m%n” />
		layout>
		
		<filter class="org.apache.log4j.varia.LevelRangeFilter">
			<param name="levelMin" value="debug" />
			<param name="levelMax" value="debug" />
			<param name="AcceptOnMatch" value="true" />						
		filter>
	<appender>
	<appender name="wangteng.file" class="org.apache.log4j.DailyRollingFileAppender">
		<param name="File" value="E:\\my.log" />
		<param name="Append" value="true" />
		<param name="DatePattern" value="'.'yyyy-MM-dd" />
		<layout class="org.apache.log4j.PatternLayout">
			<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss,SSS %-5p (%C:%M) - %m%n}" />
		layout>
	<appender>
	
	
	
	<logger name="com.wangteng.dao" additivity="false">
		<level value="info" />
		<appender-ref ref="wangteng.console" />
		<appender-ref ref="wangteng.file" />
	logger>
	
	<logger name="com.wangteng" additivity="false">
		<level value="error" />
		<appender-ref ref="wangteng.console" />
		<appender-ref ref="wangteng.file" />
	logger>
	
	<root>
		<level value="debug" />
		<appender-ref ref="wangteng.console" />
		<appender-ref ref="wangteng.file" />
	root>
log4j:configuration>

xml和properties都存在,听xml的
如果appender内设置了filter,那么当日志匹配到的logger使用这个appender时,打印级别会是两者的交集,例如:logger内是ERROR,而appender内是DEBUG,那么这个appender就不会有日志输出





logger.error(e.getMessage(), e.getCause())

你可能感兴趣的:(日志)