文章目录
日志组件
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()