java分析日志文件_如何管理日志文件?【Java面试】

(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注解

9e3cf48c89ec98a96bd7ae002fd14f60.png

(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)结合项目中使用:

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

猜你喜欢:

Java中如何解决多线程的同步问题?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值