Log4打印出用户的错误操作记录

之前系统虽然能够打印操作日志,但是全部集中在一个文件中,一旦出错,很难一眼看到错误在哪

于是考虑依靠log4j打印错误日志

总结起来有几点:

1.由于log4j的打印是按级别划分的,所以在配置文件开头先配置ERROR这个选项

2.为了便于在问题发生的时候能够精准定位,所以将日志文件按天划分,关键代码:log4j.appender.ERROR = org.apache.log4j.DailyRollingFileAppender

3.确定操作者的ip,username和操作方法,关键代码:[%X{ip}][%X{username}][%X{method}]

4.系统内部是使用Spring集成的shiro,所以ip,username和method都依靠shiro的自定义过滤器来获取

在log4j中有两个类,MDC和NDC,存储上下文信息,需要把ip,username,method保存在上下文信息中才可以被log4j获取到

其中,MDC是一个map结构,NDC是一个栈结构,

MDC封装数据MDC.put(key:value);

NDC封装数据NDC.push(message)

在项目中使用的是MDC

 

 

log4j.rootLogger=INFO,Console,File,ERROR
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.Target=System.out  
log4j.appender.Console.layout = org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c]-[%p]  - %m%n  
#file  
log4j.appender.File = org.apache.log4j.DailyRollingFileAppender  
log4j.appender.File.File = ${web.root}/logs/pc.log  
log4j.appender.File.Append = true
log4j.appender.File.Threshold = ALL  
log4j.appender.File.layout = org.apache.log4j.PatternLayout  
log4j.appender.File.layout.ConversionPattern = [%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%X{ip}][%X{username}][%X{method}][%c]%m%n  
#error
log4j.appender.ERROR = org.apache.log4j.DailyRollingFileAppender
log4j.appender.ERROR.File = ${web.root}/logs/error.log
log4j.appender.ERROR.Append = true
log4j.appender.ERROR.Threshold = ERROR
log4j.appender.ERROR.layout = org.apache.log4j.PatternLayout
log4j.appender.ERROR.layout.ConversionPattern = [%p] [%d{yyyy-MM-dd HH\:mm\:ss}][%X{ip}][%X{username}][%X{method}][%c]%m%n

 

posted @ 2017-12-19 17:52  一介書生  阅读(237)  评论(0)    收藏  举报