教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

如何管理日志文件?【Java面試】

更新時間:2020年10月20日16時05分 來源:傳智播客 瀏覽次數(shù):

(1)問題分析:

考官主要是想對你是否有真實的工作經(jīng)驗進行考核,以及對aop的理解。

(2)核心答案講解:

場景:記錄每個人在項目中的動作。

在Java開發(fā)中日志的管理有很多種。我一般會使用過濾器,或者是spring的攔截器進行日志的處理。如果是用過濾器比較簡單,只要對所有的.do提交進行攔截,然后獲取action的提交路徑就可以獲取對每個方法的調(diào)用。然后進行日志記錄。使用過濾器的好處是可以自己選擇性的對某一些方法進行過濾,記錄日志。但是實現(xiàn)起來有點麻煩。

另外一種就是使用Spring的AOP了。這種方式實現(xiàn)起來非常簡單,不用修改原來的代碼,只要配置一下配置文件就可以了??墒沁@種方式會攔截下所有的對action的每個操作。使得效率比較低。不過想做詳細日志這個方法還是非常好的。

比如在品優(yōu)購運營商管理中添加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();
       //得到方法的參數(shù)
       Object[] args = pjp.getArgs();
       //放行方法
       obj = pjp.proceed(args);
       if(!pjp.getSignature().getName().equals("binder")){
         //創(chuàng)建日志對象
         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注解

Java日志管理

(3)問題擴展:

Log4J的使用:

1)日志的輸出級別

Loggers組件在此系統(tǒng)中被分為五個級別:DEBUG、INFO、WARN、ERROR和FATAL。這五個級別是有順序的,DEBUG < INFO < WARN < ERROR < FATAL

2)配置文件說明


#設(shè)置日志的輸出級別、控制臺的數(shù)據(jù)、文件的輸出

#此處級別設(shè)置的是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



\#文件大小到達指定尺寸的時候產(chǎn)生一個新的文件

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

#設(shè)置文件的輸入路徑

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

#每個文件的大小 ,為了測試設(shè)置的值小

log4j.appender.logfile.MaxFileSize=1KB

#最多產(chǎn)生的文件的索引數(shù)

log4j.appender.logfile.MaxBackupIndex=5

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

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


# 應(yīng)用于數(shù)據(jù)庫
 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)結(jié)合項目中使用:

后臺管理中每次修改數(shù)據(jù)的動作都有必要記錄,方便追蹤數(shù)據(jù)的變化。


猜你喜歡:

Java中如何解決多線程的同步問題? 

單例中懶漢和惡漢模式的區(qū)別 

Java JDK下載和安裝教程【超級詳細】 

傳智播客Java高級軟件工程師課程 

黑馬程序員Java培訓(xùn)課程 

0 分享到:
和我們在線交談!