<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                一、定義訪問日志內容記錄實體類 >創建accesslog包 ![](https://img.kancloud.cn/49/1e/491ef0858487c55a6dcc613884526984_372x144.png) ~~~ @Data public class AccessLog { //訪問者用戶名 private String username; //請求路徑 private String url; //請求消耗時長 private Integer duration; //http 方法:GET、POST等 private String httpMethod; //http 請求響應狀態碼 private Integer httpStatus; //訪問者ip private String ip; //此條記錄的創建時間 private Date createTime; } ~~~ 二、獲取ip訪問地址的工具類 >放uitls下 ![](https://img.kancloud.cn/e1/d1/e1d18e8f0e9eaf825e2750a753500258_403x162.png) ~~~ public class AdrressIpUtils { /** * 獲取Ip地址 * @param request HttpServletRequest * @return ip */ public static String getIpAdrress(HttpServletRequest request) { String Xip = request.getHeader("X-Real-IP"); String XFor = request.getHeader("X-Forwarded-For"); if(StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)){ //多次反向代理后會有多個ip值,第一個ip才是真實ip int index = XFor.indexOf(","); if(index != -1){ return XFor.substring(0,index); }else{ return XFor; } } XFor = Xip; if(StringUtils.isNotEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)){ return XFor; } if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) { XFor = request.getHeader("Proxy-Client-IP"); } if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) { XFor = request.getHeader("WL-Proxy-Client-IP"); } if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) { XFor = request.getHeader("HTTP_CLIENT_IP"); } if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) { XFor = request.getHeader("HTTP_X_FORWARDED_FOR"); } if (StringUtils.isBlank(XFor) || "unknown".equalsIgnoreCase(XFor)) { XFor = request.getRemoteAddr(); } return XFor; } } ~~~ 三、自定義日志攔截器 ![](https://img.kancloud.cn/1b/dc/1bdc914fea26b15b40ea765ceb27f5e9_460x257.png) ~~~ @Slf4j public class AccessLogInterceptor implements HandlerInterceptor { //請求開始時間標識 private static final String LOGGER_SEND_TIME = "SEND_TIME"; //請求日志實體標識 private static final String LOGGER_ACCESSLOG = "ACCESSLOG_ENTITY"; /** * 進入SpringMVC的Controller之前開始記錄日志實體 */ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception { //創建日志實體 AccessLog accessLog = new AccessLog(); // 設置IP地址 accessLog.setIp(AdrressIpUtils.getIpAdrress(request)); //設置請求方法,GET,POST... accessLog.setHttpMethod(request.getMethod()); //設置請求路徑 accessLog.setUrl(request.getRequestURI()); //設置請求開始時間 request.setAttribute(LOGGER_SEND_TIME,System.currentTimeMillis()); //設置請求實體到request內,方便afterCompletion方法調用 request.setAttribute(LOGGER_ACCESSLOG,accessLog); return true; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object o, Exception e) throws Exception { //獲取本次請求日志實體 AccessLog accessLog = (AccessLog) request.getAttribute(LOGGER_ACCESSLOG); //獲取請求錯誤碼,根據需求存入數據庫,這里不保存 int status = response.getStatus(); accessLog.setHttpStatus(status); //設置訪問者(這里暫時寫死) // 因為不同的應用可能將訪問者信息放在session里面,有的通過request傳遞, // 總之可以獲取到,但獲取的方法不同 accessLog.setUsername("admin"); //當前時間 long currentTime = System.currentTimeMillis(); //請求開始時間 long snedTime = Long.valueOf(request.getAttribute(LOGGER_SEND_TIME).toString()); //設置請求時間差 accessLog.setDuration(Integer.valueOf((currentTime - snedTime)+"")); accessLog.setCreateTime(new Date()); //將sysLog對象持久化保存 log.info(accessLog.toString()); } } ~~~ 四、攔截器注冊 ~~~ @Configuration public class MyWebMvcConfigurer implements WebMvcConfigurer { //設置排除路徑,spring boot 2.*,注意排除掉靜態資源的路徑,不然靜態資源無法訪問 private final String[] excludePath = {"/static"}; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new AccessLogInterceptor()).addPathPatterns("/**").excludePathPatterns(excludePath); } } ~~~ 攔截器已經注冊過了,所以直接依次添加就好 ![](https://img.kancloud.cn/42/56/42560ffeaa0dc7cbd2793570cb106b12_1172x572.png) 五、增加日志輸出 ![](https://img.kancloud.cn/da/97/da97d1fd81ebe13d5d4768f07d41c6ba_1105x735.png) ~~~ <RollingFile name="accessLog" fileName="./logs/boot-launch-accessLog.log" filePattern="./logs/boot-launch-accessLog-%d{yyyy-MM-dd}.log" append="true"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS Z}\t%level\t%class\t%line\t%thread\t%msg%n"/> <Policies> <TimeBasedTriggeringPolicy/> </Policies> <!-- 此行以下為自動清理日志的配置 --> <DefaultRolloverStrategy> <Delete basePath="./logs"> <!-- glob 項為需要自動清理日志的pattern --> <IfFileName glob="*.log"/> <!-- 30d 表示自動清理掉30天以前的日志文件 --> <IfLastModified age="30d"/> </Delete> </DefaultRolloverStrategy> <!-- 此行以上為自動清理日志的配置 --> </RollingFile> ~~~ ~~~ <logger name="com.kimgao.bootlauch.config.accesslog.AccessLogInterceptor" level="info" additivity="false"> <AppenderRef ref="accessLog"/> </logger> ~~~ 啟動服務,隨便測試一個網址會發現控制臺沒有打印用戶信息,log里面有打印用戶信息。 ![](https://img.kancloud.cn/c3/9e/c39eab5fe71e958e961dbce1f69fcd3d_1828x753.png)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看