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