シンプルな手書きSpringBoot + Logbackリンクトラッキングを使用します

最近、オンライントラブルシューティング時間、発見要求は複雑すぎるログにつながり、1つまたは複数の要求に関連してユーザーをログインする方法はありませんので、我々は、SpringBoot + Logbackは、単純なリンクの追跡を手書き次の詳細、次を使用します。

まず、の原則を実装

春ブーツデフォルトのLogBackロギングシステム、および関連するjarファイルのパッケージを導入しているので、我々はあなたがLogBackの印刷ログを使用することができます任意の構成を必要としません。

MDC(マップされた診断コンテキストマップのデバッグコンテキスト)は、ログ機能とマルチスレッド条件に記録便利にlog4j提供logbackです。

アイデアが要求に関連する要求コンテキスト情報の先頭に実装されている(例えば、顧客ID、顧客のIPアドレス、セッションID、要求パラメータ等)MDC、および構成logback-spring.xml、アセンブリはLogbackう各ログは、ユーザIDを介してすべての操作を実現するためにMDCに格納された情報をプリントアウトします。

第二に、コードが本物であります

春ブーツアイテム春ブートログを作成し、以下の手順に従ってください。

  1. 新しいログインターセプター

インターセプタセッションID、ユーザが要求取得開始、コースにUUIDを生成し、生成されたMDCに格納されたログ。
次のようにSessionInterceptorコードは次のとおりです。

/**
 * 日志拦截器
 * @Author: Java碎碎念
 *
 */
public class SessionInterceptor extends HandlerInterceptorAdapter {
    /**
     * 会话ID
     */
    private final static String SESSION_KEY = "sessionId";


    @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 {

//        String token = UUID.randomUUID().toString().replaceAll("-","");
        //本例测试使用sessionId,也可以使用UUID等
        String token = request.getSession().getId();
        MDC.put(SESSION_KEY, token);
        return true;
    }

    @Override
    public void afterCompletion(HttpServletRequest arg0,
                                HttpServletResponse arg1, Object arg2, Exception arg3)
            throws Exception {
        // 删除
        MDC.remove(SESSION_KEY);
    }
}
  1. 新しい構成クラス

登録された新InterceptorConfigは、単にインターセプタをログに記録します。

次のようにInterceptorConfigコードは次のとおりです。

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {

    @Bean
    public SessionInterceptor getSessionInterceptor() {
        return new SessionInterceptor();
    }

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(getSessionInterceptor()).addPathPatterns("/*");
    }
}
  1. logback-spring.xmlを変更

以下のように設定logback-spring.xml、インターセプタはセッションIDが追加ログインして、ログに出力を取得、設定ファイルを取得しました:

%X{sessionId}

以下、本実施形態では、コンソールとセッションID印刷ファイル、完全な構成です。

<?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> %date [%thread] [%X{sessionId}] %-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> %date [%thread] [%X{sessionId}]  %-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>
  1. コントローラを追加します

新TestLogController、印刷ログ。

コードは以下の通りであります:

@RestController
public class TestLogController {

    Logger log = LoggerFactory.getLogger(getClass());

    /**
     * 测试登录
     */
    @RequestMapping(value = "/testLogin")
    public String testLogin() {
        log.info("用户登录成功!");
        return "ok";
    }

    /**
     * 测试下单
     */
    @RequestMapping(value = "/testNewOrder")
    public String testNewOrder() {
        log.info("用户创建了订单!");
        log.info("请求完成,返回ok!");
        return "ok";
    }

    /**
     * 测试购买
     */
    @RequestMapping(value = "/testPay")
    public String testPay() {
        log.info("用户付款!");
        return "ok";
    }
}

第三に、テスト

お使いのブラウザと継続的なアクセスインターフェイスTESTLOGIN、testNewOrderとtestPayを開き、次のような結果を印刷し、ユーザのログイン、注文、決済業務、コンソールをシミュレートログ、印刷文書は、すでにsessonId情報が含まれていました。

[http-nio-8888-exec-1] [CB8E7DB250A31F2BE6C05B30633B9A95] INFO  com.example.springbootlog.controller.TestLogController - 用户登录成功!
[http-nio-8888-exec-2] [CB8E7DB250A31F2BE6C05B30633B9A95] INFO  com.example.springbootlog.controller.TestLogController - 用户创建了订单!
[http-nio-8888-exec-2] [CB8E7DB250A31F2BE6C05B30633B9A95] INFO  com.example.springbootlog.controller.TestLogController - 请求完成,返回ok!
[http-nio-8888-exec-3] [CB8E7DB250A31F2BE6C05B30633B9A95] INFO  com.example.springbootlog.controller.TestLogController - 用户付款!

このSpringBoot + Logbackは、単純なリンクトラッキングがすべて達成されている手書き、ああを通信するためのメッセージを残してください質問があります!

完全なソース住所:https://github.com/suisui2019/springboot-study

推奨読書

1.SpringBootでYMLエレガントなプロファイルを読むにはどのように?
2.SpringBootでどのように柔軟なデータの暗号化と復号化関数インタフェースの実装?
魔法の@で3.SpringBootは*注釈を有効にしますか?
Integer.parseIntとInteger.valueOfで4.Java、あなたは愚かなことを教えていませんか?
5.SpringCloudシリーズ- Hystrixを統合するには、2つの方法


限られた時間では、Java、Redisを、MongoDBのは、MySQL、カバー、無料のJava関連の情報を受信飼育係、春の雲、ダボ/カフカ、Hadoopを、HBaseの、FLINK 高い同時分布し、ビッグデータと機械学習技術を。
無料の公共を受信する数の下に見ます:

Javaの迷惑なチャタリング公共号

おすすめ

転載: www.cnblogs.com/haha12/p/11770526.html