日志文件的管理

(1)问题分析:

考官主要是想对你是否有真实的工作经验进行考核,以及对aop的理解。

(2)核心答案讲解:

场景:记录每个人在项目中的动作。

在Java开发中日志的管理有很多种。我一般会使用过滤器,或者是spring的拦截器进行日志的处理。如果是用过滤器比较简单,只要对所有的.do提交进行拦截,然后获取action的提交路径就可以获取对每个方法的调用。然后进行日志记录。使用过滤器的好处是可以自己选择性的对某一些方法进行过滤,记录日志。但是实现起来有点麻烦。

另外一种就是使用Spring的AOP了。这种方式实现起来非常简单,不用修改原来的代码,只要配置一下配置文件就可以了。可是这种方式会拦截下所有的对action的每个操作。使得效率比较低。不过想做详细日志这个方法还是非常好的。

比如在品优购运营商管理中添加AOP增强类,里面用来记录日志

@Component
 @Aspect
 public class LogAdvice {

   @Autowired
   private HttpServletRequest request;

   @Around("execution(* com.pyg.controller.*.*(..))")
   public Object around(ProceedingJoinPoint pjp){
     Object obj = null;
     try {
       //得到当前访问的处理器类的类型
       Class clazz = pjp.getTarget().getClass();
       //得到访问时间
       Date visitTime = new Date();
       //得到方法的参数
       Object[] args = pjp.getArgs();
       //放行方法
       obj = pjp.proceed(args);
       if(!pjp.getSignature().getName().equals("binder")){
         //创建日志对象
         SysLog log = new SysLog();
         log.setVisitTime(visitTime);
         log.setUsername(request.getRemoteUser());
         log.setUrl(request.getRequestURI());;
         log.setIp(request.getRemoteAddr());
         log.setExecutionTime(new Date().getTime()-visitTime.getTime());;
         log.setMethod("类名为:"+clazz.getName()+",方法名为:"+pjp.getSignature().getName());
         //对象入库
         logService.save(log);
       }
     }catch (Throwable t){
       t.printStackTrace();
     }
     return obj;
   }
 }

注意:在springmvc中开始AOP注解

img

(3)问题扩展:

Log4J的使用:

1)日志的输出级别

Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL

2)配置文件说明

#设置日志的输出级别、控制台的数据、文件的输出

#此处级别设置的是DEBUG,是最小级别

log4j.rootLogger=DEBUG, stdout, logfile, database



#控制台的输出控制

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

#每行日志的格式

log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n



\#文件大小到达指定尺寸的时候产生一个新的文件

log4j.appender.logfile=org.apache.log4j.RollingFileAppender

#设置文件的输入路径

log4j.appender.logfile.File=d:\\log\\myweb.log

#每个文件的大小 ,为了测试设置的值小

log4j.appender.logfile.MaxFileSize=1KB

#最多产生的文件的索引数

log4j.appender.logfile.MaxBackupIndex=5

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n


# 应用于数据库
 log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender
 log4j.appender.database.URL=jdbc:mysql://localhost:3306/test
 log4j.appender.database.driver=com.mysql.jdbc.Driver
 log4j.appender.database.user=root
 log4j.appender.database.password=root
 log4j.appender.database.sql=INSERT INTO TABLE_LOG (Message) VALUES('=[%-5p] %d(%r) --> [%t] %l: %m %x %n')
 log4j.appender.database.layout=org.apache.log4j.PatternLayout
 log4j.appender.database.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n

(4)结合项目中使用:

后台管理中每次修改数据的动作都有必要记录,方便追踪数据的变化

点击此处
隐藏目录