zoukankan      html  css  js  c++  java
  • LogBack sl4j 通过MDC实现日志记录区分用户Session[以Spring mvc为例]

    1.首先实现一个interceptor,在请求开始的时候MDC put一个Session标志,interceptor结束的时候remove掉
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import org.slf4j.MDC;
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
    public class SessionInterceptor extends HandlerInterceptorAdapter {
        /**
         * 会话ID
         */
        private final static String SESSION_KEY = "sessionId";
    
        @Override
        public void afterCompletion(HttpServletRequest arg0,
                HttpServletResponse arg1, Object arg2, Exception arg3)
                throws Exception {
    
            // 删除
            MDC. remove(SESSION_KEY);
        }
    
        @Override
        public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
                Object arg2, ModelAndView arg3) throws Exception {
        }
    
        @Override
        public boolean preHandle(HttpServletRequest request,
                HttpServletResponse response, Object handler) throws Exception {
    
            // 放SessionId
            String token = TokenUtil. java.util.UUID.randomUUID().toString();
            MDC. put(SESSION_KEY, token);
    
            return true;
        }
    }
    2.然后在logback相应的配置中加上 seesionId的配置就可以了
     
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
            <property name="log.base" value="./log/logback" />
    
            <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
                   <encoder>
                          <pattern> %X{sessionId} %date [%thread] %-5level %logger{80} - %msg%n
                          </pattern>
                   </encoder>
            </appender>
    
            <appender name="logfile"
                   class="ch.qos.logback.core.rolling.RollingFileAppender">
                   <File> ${log.base}.log</File >
                   <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                          <FileNamePattern> ${log.base}.%d{yyyy -MM-dd}.log.zip </FileNamePattern>
                   </rollingPolicy>
                   <encoder>
                          <pattern> %X{sessionId} %date [%thread] %-5level %logger{80} - %msg%n
                          </pattern>
                   </encoder>
            </appender>
            <logger name="com.sample" level="TRACE" />
            <root>
                   <level value="INFO" />
                   <appender-ref ref="stdout" />
                   <appender-ref ref="logfile" />
            </root>
    </configuration>
    3.日志打出的时候就会有可以标识区分不同客户端的请求了,用前面不同的token区分
    e6668b68-ee47-4cde-b673-25ed9bb74f1e 2014-04-09 16:31:14,579 [qtp14850080-27] INFO  o.c.a.f.i.AuthInterceptor - GET:/project
    c3b84462-81c6-49f7-923b-d8ba48c53c07 2014-04-09 16:31:31,295 [qtp14850080-27] INFO  o.c.a.f.i.AuthInterceptor - GET:/feedbacks
    b0e0f1fe-f30a-42b2-a103-e70a108561b7 2014-04-09 16:31:32,254 [qtp14850080-22] INFO  o.c.a.f.i.AuthInterceptor - GET:/feedbacks
    a58ed619-c2e0-4b71-9c45-995a78c1b602 2014-04-09 16:31:42,788 [qtp14850080-29] INFO  o.c.a.f.i.AuthInterceptor - GET:/project
    70de174a-5a05-41c6-a8b4-f17fcd33be5c 2014-04-09 16:31:43,537 [qtp14850080-22] INFO  o.c.a.f.i.AuthInterceptor - GET:/project
    f3efb2d4-f361-4c6b-bab6-16c8476c8dd0 2014-04-09 16:31:47,157 [qtp14850080-26] INFO  o.c.a.f.i.AuthInterceptor - POST:/project
    f3efb2d4-f361-4c6b-bab6-16c8476c8dd0 2014-04-09 16:31:47,161 [qtp14850080-26] INFO  o.c.a.f.i.ProjectController - >> create() > GOT PARAMS 'Project [name=url, abstractContent=a, token=null]','(POST /project)@12571381 org.eclipse.jetty.server.Request@bfd2f5'
    参考:http://logback.qos.ch/manual/mdc.html#autoMDC
     
  • 相关阅读:
    Python基础__字符串拼接、格式化输出与复制
    Python基础__Python序列基本类型及其操作(1)
    Selenium 元素等待
    Selenium 键盘鼠标实践
    Selenium 元素定位
    Selenium 启动浏览器
    Selenium Webdriver概述
    linux虚拟机安装和xshell远程连接
    python实现dubbo接口的调用
    Python+Appium自动化测试(6)-元素等待方法与重新封装元素定位方法
  • 原文地址:https://www.cnblogs.com/dumuqiao/p/3654702.html
Copyright © 2011-2022 走看看