5.日志组件

文章目录

日志组件

1.什么是日志

开发日志:开发过程中,sout输出变量查看,开发时供开发人员查看,上线后绝对不记录开发日志。

用户行为日志:用户在使用软件的操作记录(浏览记录,增删改记录),记录访问时间,访问行为,操作结果到日志文件(xxx.log)中,数据分析人员查看该日志文件进行数据挖掘分析。

异常日志:程序在上线运行过程中爆出的Exception异常,当程序爆出异常,统一异常处理正常返回客户数据意外,还需要记录异常数据。

2.日志的级别划分

日志组件对日志进行级别:all->trance->DEBUG->INFO->WARN->ERROR->FATAL-off

DEBUG:开发日志

info:行为日志

warn:警告

ERROR:异常日志

3.log4j与log4j2日志组件

log4j,logback,log4j2都是具体的日志记录的实现。

log4j是早期的一个日志组件,

log4j2是apache结合logback日志组件,对log4j进行了升级。

使用log4j:

1.添加log4j.jar
2.添加log4j.properties
log4j.rootLogger=级别,输出位置1,输出位置2...
log4j.appender.XXXX=对某个输出位置进行详细设置
log4j.logger.包名=日志级别

log4j文件

############ERROR	WARM	INFO	DEBUG#####################
log4j.rootLogger=DEBUG,CONSOLE,logfile,errfile
############### CONSOLE OutPut ###############
#ConsoleAppender	FileAppender	DailyRollingFileAppender	RollingFileAppender	WriterAppender
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
#HTMLLayout		PatternLayout	SimpleLayout	TTCCLayout
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d %p [%c %M] - %m%n
############### Default Log Output #################
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.Append=true
log4j.appender.logfile.Threshold=INFO
log4j.appender.logfile.File=E:/log/info.log
log4j.appender.logfile.MaxFileSize=51200KB
log4j.appender.logfile.MaxBackupIndex=5
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

############### Custom Err Output #################
log4j.appender.errfile=org.apache.log4j.RollingFileAppender
log4j.appender.errfile.Append=true
log4j.appender.errfile.Threshold=ERROR
log4j.appender.errfile.File=${ssm.root}/WEB-INF/log/error.log
log4j.appender.errfile.MaxFileSize=51200KB
log4j.appender.errfile.MaxBackupIndex=5
log4j.appender.errfile.layout=org.apache.log4j.PatternLayout
log4j.appender.errfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%c]-[%p] %m%n

############### Log4j SQL Output #################
log4j.logger.org.springframework=ERROR

使用log4j2

1.添加3个log4j的核心包
log4j-api-2.11.0.jar
log4j-core-2.11.0.jar
log4j-web-2.11.0.jar
2.添加1个disruptor生产者消费者模式的实现包:disruptor-3.4.2.jar
(log4j2的异步日志依赖包)
3.添加log4j2.xml

log4j2文件配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
	<appenders>
		<!-- 控制台输出 -->
		<console name="Console" target="SYSTEM_OUT">
			<PatternLayout
					pattern="%d{HH:mm:ss.SSS} [%t] %-5level %class %L %M -- %msg%n" />
		</console>

		<!-- fileName:输出路径 filePattern:命名规则 -->
		<RollingFile name="RollingFileDebug"
					 fileName="D:/logs/debug.log"
					 filePattern="D:/logs/$${date:yyyy-MM-dd}/debug-%d{yyyy-MM-dd}-%i.log">
			<Filters>
				<ThresholdFilter level="DEBUG" />
				<ThresholdFilter level="INFO" onMatch="DENY"
								 onMismatch="NEUTRAL" />
			</Filters>
			<!-- 输出格式 -->
			<PatternLayout
					pattern="%d{HH:mm:ss.SSS} [%t] %-5level %class{36} %L %M - %msg%n" />
			<Policies>
				<!-- 单个日志文件的大小限制 -->
				<SizeBasedTriggeringPolicy size="100 MB" />
			</Policies>
			<!-- 最多保留20个日志文件 -->
			<DefaultRolloverStrategy max="20" />
		</RollingFile>

		<RollingFile name="RollingFileInfo"
					 fileName="D:/logs/info.log"
					 filePattern="D:/logs/$${date:yyyy-MM-dd}/info-%d{yyyy-MM-dd}-%i.log">
			<Filters>
				<ThresholdFilter level="INFO" />
				<ThresholdFilter level="WARN" onMatch="DENY"
								 onMismatch="NEUTRAL" />
			</Filters>
			<!-- 输出格式 -->
			<PatternLayout
					pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n" />
			<Policies>
				<!-- SizeBasedTriggeringPolicy单个文件的大小限制 -->
				<SizeBasedTriggeringPolicy size="100 MB" />
			</Policies>
			<!-- DefaultRolloverStrategy同一个文件下的最大文件数 -->
			<DefaultRolloverStrategy max="20" />
		</RollingFile>

		<RollingFile name="RollingFileWarn"
					 fileName="D:/logs/warn.log"
					 filePattern="D:/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
			<Filters>
				<ThresholdFilter level="WARN" />
				<ThresholdFilter level="ERROR" onMatch="DENY"
								 onMismatch="NEUTRAL" />
			</Filters>
			<PatternLayout
					pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
			<Policies>
				<!--<TimeBasedTriggeringPolicy modulate="true" interval="1"/> -->
				<SizeBasedTriggeringPolicy size="100 MB" />
			</Policies>
			<!--最多保留20个日志文件 -->
			<DefaultRolloverStrategy max="20" min="0" />
		</RollingFile>

		<RollingFile name="RollingFileError"
					 fileName="D:/logs/error.log"
					 filePattern="D:/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
			<Filters>
				<ThresholdFilter level="ERROR" />
				<ThresholdFilter level="FATAL" onMatch="DENY"
								 onMismatch="NEUTRAL" />
			</Filters>
			<PatternLayout
					pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n" />
			<Policies>
				<!--<TimeBasedTriggeringPolicy modulate="true" interval="1"/> -->
				<SizeBasedTriggeringPolicy size="100 MB" />
			</Policies>
			<!--最多保留20个日志文件 -->
			<DefaultRolloverStrategy max="20" min="0" />
		</RollingFile>
	</appenders>

	<loggers>
		<logger name="org.springframework" level="error" ></logger>
		<logger name="org.apache.ibatis" level="error"></logger>
		<logger name="org.mybatis.spring" level="error"></logger>

		<root level="DEBUG" >
			<appender-ref ref="Console"/>
			<appender-ref ref="RollingFileDebug"/>
			<appender-ref ref="RollingFileInfo"/>
			<appender-ref ref="RollingFileWarn"/>
			<appender-ref ref="RollingFileError"/>
		</root>

       <!-- 异步设置:暂时没开-->

		<!--<AsyncLogger name="org.springframework" level="error" includeLocation="true">-->
		<!--<AppenderRef ref="RollingFileError"></AppenderRef>-->
		<!--</AsyncLogger>-->
		<!--<AsyncLogger name="org.apache.ibatis" level="error" includeLocation="true">-->
		<!--<AppenderRef ref="RollingFileError"></AppenderRef>-->
		<!--</AsyncLogger>-->
		<!--<AsyncLogger name="com.alibaba.druid" level="error"  includeLocation="true">-->
		<!--<AppenderRef ref="RollingFileError"></AppenderRef>-->
		<!--</AsyncLogger>-->

		<!--<AsyncRoot level="DEBUG" includeLocation="true">-->
		<!--<appender-ref ref="Console"/>-->
		<!--<appender-ref ref="RollingFileDebug"/>-->
		<!--<appender-ref ref="RollingFileInfo"/>-->
		<!--<appender-ref ref="RollingFileWarn"/>-->
		<!--<appender-ref ref="RollingFileError"/>-->
		<!--</AsyncRoot>-->

	</loggers>
</configuration>

4.slf4j日志接口

slf4j,common-logging都是抽象的日志接口。项目中不会与具体的日志组件耦合,会依赖于slf4j日志接口,再通过对应日志组件与slf4j的桥接包进行对接。

类中加成员变量:

private Logger l  =LoggerFactory.getLogger(SysuserHandler.class);
l.debug()
l.info()
l.warn()
l.error()
上一篇:SSM框架的几个重要配置文件


下一篇:search(9)- elastic4s logback-appender