牛バックエンドの顧客ネットワークプロジェクトの戦闘(VII):プロジェクトのデバッグ手法

プロジェクトのデバッグ手法

  • レスポンスのステータスコードを意味
  • サーバーのブレークポイントのデバッグのスキル
  • クライアントのブレークポイントのデバッグのスキル
  • ログレベルを設定し、別の端末に出力するログ

応答ステータスコード

または前述の文書は、HTTP応答ステータスコードは、特定の示したHTTPリクエストが正常に完了しています。レスポンスは、5つのカテゴリーに分かれています。情報応答を(100- 199)、正常な応答(200- 299)、リダイレクト(300- 399)、クライアントエラー(400- 499とサーバのエラー(500- 599)。

ファイル

いくつかの一般的な:

  • 200 OK
    • リクエストが成功しました。意味は、HTTPメソッドの成功に依存します。
    • GET:リソースを抽出し、メッセージ本文に送信されてきました。
    • HEAD:メッセージ本体内に配置エンティティヘッダ。
    • POST:メッセージ本体の動作結果送信リソースの記述。
    • TRACE:メッセージ本文には、受信したサーバ要求メッセージが含まれています
  • 302 FOUND
    • 今、別のURIからの要求に一時的なリソース要求応答。このリダイレクトを一時的にした後であるため、クライアントは、元の要求のアドレスに送信され続けなければなりません。唯一のCache-Controlで指定されたか、この応答で期限切れした場合には、キャッシュ可能です。
  • 404お探しのページが見つかりませんでした
    • 要求が失敗し、要求がサーバー上に見つからないリソースを好きだろう。このような状況のエンドユーザーに伝えることができない情報は、一時的または恒久的です。サーバはケースを知っている場合、ステータスコード410があるため、いくつかの内部的な問題の古い資源配分メカニズムを通知するために使用する必要があり、それが恒久的に利用できなく持っており、何のアドレスがジャンプすることはできません。このステータスコード404は、広くサーバが要求を終了または使用可能な任意の他の適切な応答で拒否された理由を明らかにしたくない場合に使用されています。
  • 500内部サーバーエラー
    • 遭遇したサーバーは、状況に対処する方法がわかりません。

ブレークポイントサーバー

開発中に、時にはあなたは私たちがブレークポイントを使用することができ、問題をトラブルシューティングする必要があります。ブレークポイントのデバッグは、プログラムの実行がブレークポイントを設定し、一時停止、および関連するデータを表示する、コードブレークポイントの行に置くことです。IDEAには、例えば、ワンクリックの次の行にブレークポイントである、あなたはブレークポイントを設定することができます。

、その後、プログラムをデバッグモードで実行されます示すように、より多くの書かれたにHomeControllerの例よりも、私は位置にブレークポイントを設定し、ショートカットキーは+ F9またはボタンのような小さな虫が右上隅をクリックしてくださいシフト。

次に、このようなページオブジェクトなどのオブジェクトの現在の数を、ブラウザを開いて、家に行く我々はブレークポイントを設定し、プログラムの実行をできるように、プログラムがブレーク中でこの行を立ち往生見ることができ、下に示し、我々は開いているビューにページオブジェクトの値を指すことができます。この行を表示するには、ショートカットキーを使用するか、ボタンをクリックするか、コードの内部のラインを走るラインを入力することができ、何ら問題は見つかりませんでした。これらのボタンは、実際に自分の方法に使用されています。機能左下隅を含め、あなたはブレークポイントを管理することができます。

クライアントのブレークポイント

クライアントとサーバーの休憩ほとんど、自宅検査に入るために、ブラウザを開いて、ソースでのjsファイルを見つけ、ブレークポイントの更新後にブレークポイントを設定する行番号をクリックしては、同じ実行ダウンで立ち往生し、コードを入力します。

ジャーナル

ブレークポイントデバッグする前に、それはログを表示することが最善である、ログブックには、Baiduのを理解することはできません。springbootは、デフォルトではlogbackで、複数のロギングツールをサポートしています

公式サイトをlogback

我々はあなたが簡単に開発することができ、開発中およびオンライン異なるレベルを使用することができ、5つのログレベルを見ることができますがあり、

  • トレーストレース
  • デバッグ
  • 情報通常
  • 警告を警告
  • エラーエラー

その後、私たちの最初のテストクラスの経験、およびレベルを記録し、ストレージ・パスをログapplication.propertiesにそれを設定

package com.neu.langsam.community;


import org.junit.Test;
import org.slf4j.Logger;

import org.junit.runner.RunWith;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
@ContextConfiguration(classes = CommunityApplication.class)
public class LoggerTests {
	
    //新建一个logger类
    private static final Logger logger= LoggerFactory.getLogger(LoggerTests.class);

    @Test
    public void testLogger(){
        System.out.println(logger.getName());

        logger.debug("debug log");
        logger.info("info log");
        logger.warn("warn log");
        logger.error("error log");


    }
}

# logger
logging.level.com.neu.langsam.community=debug
logging.file.name=d:/workspace/community.log

実際の開発では、このアプローチを使用して、ログのさまざまなレベルを分離する必要が十分ではありません、あなたが設定ファイルを記述する必要がある、複合体は、直接既製コピーし、それを変更。リソース上のlogback-spring.xml、主な変更点は、最後のパスとローカルプロジェクト名、およびパッケージ名の始まりです。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <contextName>community</contextName>
    <property name="LOG_PATH" value="D:/workspace"/>
    <property name="APPDIR" value="community"/>

    <!-- error file -->
    <appender name="FILE_ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${APPDIR}/log_error.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${APPDIR}/error/log-error-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <append>true</append>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>error</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- warn file -->
    <appender name="FILE_WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${APPDIR}/log_warn.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${APPDIR}/warn/log-warn-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <append>true</append>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>warn</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- info file -->
    <appender name="FILE_INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/${APPDIR}/log_info.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/${APPDIR}/info/log-info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <append>true</append>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>info</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- console -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
            <charset>utf-8</charset>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>debug</level>
        </filter>
    </appender>

    <logger name="com.neu.langsam.community" level="debug"/>

    <root level="info">
        <appender-ref ref="FILE_ERROR"/>
        <appender-ref ref="FILE_WARN"/>
        <appender-ref ref="FILE_INFO"/>
        <appender-ref ref="STDOUT"/>
    </root>

</configuration>

Iその後、プロジェクトディレクトリに出力します。

公開された12元の記事 ウォンの賞賛0 ビュー102

おすすめ

転載: blog.csdn.net/weixin_42700635/article/details/104805400