[Feature Enhancement]: Complete Logging Implementation

オープン
#18 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

関連するプルリクエストがすでにマージされています。

  • #9 @MasterJ93 による — マージ済み

評価

難易度
4/5
見積もり時間
3〜5日
初心者へのやさしさ
25/100
issue の種類
機能追加
明瞭さ
おおむね明確
活発さ
停滞
技術スタック
swift

調査の方向性

Read the package areas for ATProtoKit, ATProtoTools, and ATProtoAdmin, then inspect the applyWrites() example in the issue as a guide to the requested logging points. Add logging across all three classes, including session and request failures and outcomes; completion means all three checklist items are covered. A linked pull request was merged, so check its changes and the current code before taking this on.

索引モデルが issue の本文から書いたものです。

説明

enhancement good first issue
Summary

No response

Pain points

The current implementation of ATProtoKit lacks a centralized logging mechanism, leading to several challenges, namely that debugging is much more difficult to deal with.

To solve this, SwiftLog will be integrated into the package. Furthermore, two logging backend implementations will be used: one that maps to Apple's unified Logger framework (for Apple platforms) and one that maps to the standard SwiftLog logger.

To be more specific, log events for the methods should be added as appropriate. As an example, take a look at applyWrites():

public func applyWrites(_ repositoryDID: String,
                        shouldValidate: Bool? = true,
                        writes: [ApplyWritesUnion],
                        swapCommit: String?) async throws {

    guard session != nil,
          let accessToken = session?.accessToken else {
        throw ATRequestPrepareError.missingActiveSession
    }

    guard let sessionURL = session?.pdsURL,
          let requestURL = URL(string: "\(sessionURL)/xrpc/com.atproto.repo.applyWrites") else {
        throw ATRequestPrepareError.invalidRequestURL
    }

    let requestBody = RepoApplyWrites(
        repositoryDID: repositoryDID,
        shouldValidate: shouldValidate,
        writes: writes,
        swapCommit: swapCommit
    )

    do {
        let request = APIClientService.createRequest(forRequest: requestURL,
                                                     andMethod: .post,
                                                     acceptValue: nil,
                                                     contentTypeValue: "application/json",
                                                     authorizationValue: "Bearer \(accessToken)")

        try await APIClientService.sendRequest(request,
                                               withEncodingBody: requestBody)
    } catch {
        throw error
    }
}

Various places within the method can have log events, including:

  • Within the first guard statement's else block, stating that session or accessToken doesn't have a value.
  • After the guard statement which would show the value of accessToken (albeit, obfuscated).
  • Within the second guard statement's else block, stating that there's an invalid request URL, followed by a String(describing:) of the request URL.
  • After the guard statement, which would show the value of requestURL.
  • After requestBody, which would show the values of requestBody.
  • After request, which would show the value of request.
  • After the try await code, which would say that the request has been successful.
  • Within the catch block, which gives an error log, followed by displaying the error itself.

This issue will focus on implementing log events to the ATProtoKit, ATProtoTools, and ATProtoAdmin classes. Future updates will deal with the remaining parts of the Swift package.

Considered Alternatives

No response

Is this a breaking change?

Yes

Additional Context
  • Implement log events on all parts of the ATProtoKit class.
  • Implement log events on all parts of the ATProtoAdmin class.
  • Implement log events on all parts of the ATProtoTools class.
主要言語
Swift
スター
226
フォーク
40
平均マージ
5時間 8分
マージ済み PR(30日)
3

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

MasterJ93/ATProtoKit のほかの issue

MasterJ93/ATProtoKit の issue をすべて見る

似ている issue

Swift の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。