APILogについて
Web APIの通信ログを表示します。
通信ログを表示するには、NOA Debuggerを組み込んだアプリケーション内でログの出力を行う必要があります。
通信ログを出力する方法は、ページ後半の 通信ログの出力 を参照してください。
画面のUI構成と操作方法
1.通信ログ
出力した通信ログの一覧を表示します。
- 任意の通信ログを押下することでハイライト表示を行い、画面右側に選択された通信の詳細を表示します。
※縦画面の場合は下部に表示します。 - 任意の通信ログを長押しすることで、クリップボードに通信ログの内容をコピーします。
- 選択した通信ログを再度押下することで、詳細を非表示にします。
- 任意の通信ログの右側にある[×]ボタンを長押しすることで、対象のログを削除します。
要素名 | 表示情報 |
---|---|
a.ログタイプ | ログのタイプを表します。各色の意味については後述の情報を参照してください。 |
b.出力時間 | ログを出力した時間を表示します。 |
c.APIパス | APIパスとクエリを表示します。 |
d.受信バイト数 | 受信バイト数を表示します。 |
e.通信にかかった時間 | 通信にかかった時間 (ミリ秒) を表示します。 |
f.削除ボタン | [×]ボタンを長押しすることで対象のログを削除します。 |
2.通信ステータス
通信の数・合計受信バイト数・合計時間を表示します。
※通信ログがある場合にのみ表示します。
要素名 | 表示情報 |
---|---|
a.通信の数 | API通信を実行した回数を表示します。 |
b.合計受信バイト数 | 合計の受信バイト数を表示します。 |
c.合計時間 | 合計の通信にかかった時間 (ミリ秒) を表示します。 |
3.通信詳細
選択した通信ログの詳細を表示します。通信の詳細は以下の内容を含みます。
要素名 | 表示情報 |
---|---|
a.Request | API詳細・リクエストヘッダ・リクエストボディを表示します。 |
b.Response | レスポンスヘッダ・レスポンスボディを表示します。 |
Content-Type
が application/json
の場合は、リクエストボディ・レスポンスボディを整形して表示します。
JSONを正しく解析できなかった場合は、入力されたテキストをそのまま表示します。
4.通信ログ収集ボタン
[●REC] ボタンを押下することで通信ログ収集のオン・オフを切り替えることができます。アプリ起動時は通信ログの収集を行います。
[●REC]ボタンが赤色の状態は収集中、白色は停止中を意味します。
5.一括削除ボタン
[]ボタンを押下することで保持しているログを全て削除します。
6.ダウンロードボタン
[]ボタンを押下することでログ情報をダウンロードするダイアログを表示します。
ログ情報がない場合は、[]ボタンを押下できません。
ダウンロードダイアログについてはデータのダウンロードについてを参照してください。
7.成功スイッチ
200番台のステータスコードで終了した通信の数を表示します。[●]ボタンを押下しメッセージの表示・非表示を切り替えることができます。
8.エラースイッチ
200番台以外のステータスコードで終了した通信の数を表示します。[●]ボタンを押下しエラーの表示・非表示を切り替えることができます。
9.検索フィールド
入力したテキストでログをフィルタリングします。
一致するテキストを含むログを表示します。
※通信詳細の情報は検索の対象外です。
10.検索破棄ボタン
[×]ボタンを押下することで、検索フィールドに入力したテキストを破棄します。
11.ショートカットボタン
[↓]ボタンを押下することで、ログの一覧を一番下までスクロールします。
※最新のログを表示している場合は、ショートカットボタンを表示しません。
12.コピーボタン
[]ボタンを押下することで、クリップボードに通信ログの内容をコピーします。
※ログ長押しと同じ挙動です。
ログタイプ一覧
出力色 | ログタイプ |
---|---|
200番台のステータスコードで終了した通信を表します。 | |
200番台以外のステータスコードで終了した通信を表します。 |
通信ログの出力
NOA Debuggerを組み込んだアプリケーション内で NoaDebugger.ApiLogger.Log()
を呼ぶことで、NOA Debugger上で通信ログを表示します。
UnityEngine.Networking.UnityWebRequest
を用いてPOST通信を行う場合のサンプルコードを以下に示します。
※ NOA Debuggerが提供する機能を利用する場合は、必ずNOA_DEBUGGER
のシンボル定義を利用してください。
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text;
#if NOA_DEBUGGER
using NoaDebugger;
#endif
using UnityEngine;
using UnityEngine.Networking;
public class ApiLogSample : MonoBehaviour
{
void Start()
{
const string endpoint = "https://example.com/api/foo";
const string requestBodyJson = "{ \"field1\":\"1\", \"field2\":\"2\" }";
StartCoroutine(ApiLogSample.PostJson(endpoint, requestBodyJson));
}
static IEnumerator PostJson(string endpoint, string requestBodyJson)
{
// POSTリクエストを作成します。
using var request = new UnityWebRequest(endpoint, "POST");
var requestHeaders = new Dictionary<string, string>
{
{ "Content-Type", "application/json" }
};
byte[] rawData = Encoding.UTF8.GetBytes(requestBodyJson);
request.uploadHandler = new UploadHandlerRaw(rawData);
request.downloadHandler = new DownloadHandlerBuffer();
foreach (KeyValuePair<string, string> header in requestHeaders)
{
request.SetRequestHeader(header.Key, header.Value);
}
// 通信を行い、かかった時間を計測します。
var stopwatch = new Stopwatch();
stopwatch.Start();
yield return request.SendWebRequest();
stopwatch.Stop();
#if NOA_DEBUGGER
// NOA Debuggerにログを出力します。UnityWebRequestインスタンスが破棄される前に実行してください。
var apiLog = new ApiLog
{
Url = request.uri,
Method = request.method,
StatusCode = (int)request.responseCode,
ContentSize = (long)request.downloadedBytes,
ResponseTimeMilliSeconds = stopwatch.ElapsedMilliseconds,
RequestHeaders = requestHeaders,
RequestBody = requestBodyJson,
ResponseHeaders = request.GetResponseHeaders(),
ResponseBody = request.downloadHandler.text
};
ApiLogger.Log(apiLog);
#endif
}
}
NoaDebugger.ApiLog
は以下のプロパティを持ちます。
プロパティ名 | 型 | 説明 | 設定がない場合の動作 |
---|---|---|---|
Url | System.Uri | リクエスト先URLです。 | ApiLogger.Log() にて ArgumentException が発生します。 |
Method | string | リクエストメソッドです。 | ApiLogger.Log() にて ArgumentException が発生します。 |
StatusCode | int | ステータスコードです。 | 0 としてログに反映します。 |
ContentSize | long | レスポンスのデータサイズです。 | 0 としてログに反映します。 |
ResponseTimeMilliSeconds | long | レスポンスにかかった時間をミリ秒で指定します。 | 0 としてログに反映します。 |
RequestHeaders | System.Collections.Generic.Dictionary<string,string> | リクエストヘッダです。 | 通信詳細で表示しません。 |
RequestBody | string | リクエストボディです。 | 通信詳細で表示しません。 |
ResponseHeaders | System.Collections.Generic.Dictionary<string,string> | レスポンスヘッダです。 | 通信詳細で表示しません。 |
ResponseBody | string | レスポンスボディです。 | 通信詳細で表示しません。 |
提供APIについて
APILogが提供するAPIについてはAPI一覧を参照してください。