【Swift】XCGLoggerの使い方!ログ出力方法とファイルへ保存

【Swift】XCGLoggerの使い方!ログ出力方法とファイルへ保存

この記事からわかること

  • SwiftXCGLogger使い方
  • ログ出力する方法
  • 指定できるログレベル(Level列挙型)の種類
  • setupメソッドオプションを設定する方法
  • ファイル書き込むには?

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

参考文献:公式リファレンス:XCGLogger

XCGLoggerとは?

XCGLoggerSwiftで使用できるiOSまたは macOS向けのログ出力ライブラリです。XCGLoggerを使用することで細かいログレベル(デバッグ、情報、警告、エラーなど)を指定してメッセージを出力し、指定したファイルやコンソールにログを記録することができます。

XCGLoggerの特徴はカスタマイズ性が高く、printなどよりも詳細な情報を簡単に得ることができます。

同じようなログ出力ライブラリにOSLogがあります。

CocoaPodsで導入

XCGLoggerはライブラリなので導入しないと使用することができません。CocoaPodsやCarthageなどの依存関係管理ツールを使用してプロジェクトに導入できます。

CocoaPodsを使用してインストールするきはPodFileに以下を記述します。

pod 'XCGLogger'

あとはpod installを実行して導入作業は完了です。

使い方

使用するまえにはimportを忘れないうようにしておきます。

import XCGLogger

XCGLoggerはコード全体で使用したい場合が多いのでUIKitならAppDelegate.swiftで、Swift UIならプロジェクト名App.swift内でXCGLoggerインスタンスのグローバル定数を宣言します。 インスタンスはシングルトンになっているdefaultプロパティから取得します。

let log = XCGLogger.default

またこの段階でXCGLoggerのオプションを設定しておきます。オプションの細かい説明は後述します。

log.setup(level: .verbose, 
    showThreadName: true, 
    showLevel: true, 
    showFileNames: true, 
    showLineNumbers: true, 
    writeToFile: "path/to/file", 
    fileLevel: .debug)

Swift UIで定義する

Swift UIで定義するには計算プロパティとして「プロジェクトApp.swift」ファイルに記述します。


var log :XCGLogger {
    let log = XCGLogger.default
    log.setup(level: .debug,
              showThreadName: true,
              showLevel: true,
              showFileNames: true,
              showLineNumbers: true,
              writeToFile: "path/to/file",
              fileLevel: .debug)
    return log
}

@main
struct TestXCGLoggerApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

ログを出力する方法と結果

これでXCGLoggerが使用できるようになり、以下のようなコードでログを記録できます。

log.verbose("詳細メッセージ")
log.debug("デバッグメッセージ")
log.info("情報メッセージ")
log.notice("通知メッセージ")
log.warning("警告メッセージ")
log.error("エラーメッセージ")
log.severe("重大エラーメッセージ")
log.alert("警告エラーメッセージ:ログの出力先を設定してメールで通知することができます")
log.emergency("緊急エラーメッセージ:ログの出力先を設定してテキストで通知することができます") 

出力結果では以下のように日付や時間(タイムスタンプ)、エラーレベル、スレッド、ファイル名:行数、メソッド名などが自動で付与されて出力されます。

2023-08-27 20:45:52.129 [Error] > Attempt to open log file for writing failed: The file “file” doesn’t exist.
2023-08-27 22:04:42.454 [Verbose] [main] [ContentView.swift:17] putLog() > 詳細メッセージ
2023-08-27 20:45:52.131 [Info] > TestXCGLogger Version: 1.0 Build: 1 PID: 59815
2023-08-27 20:45:52.131 [Info] > XCGLogger Version: 7.0.1 - Level: Debug
2023-08-27 20:45:52.132 [Debug] [main] [ContentView.swift:18] putLog() > デバッグメッセージ
2023-08-27 20:45:52.133 [Info] [main] [ContentView.swift:19] putLog() > 情報メッセージ
2023-08-27 20:45:52.133 [Notice] [main] [ContentView.swift:20] putLog() > 通知メッセージ
2023-08-27 20:45:52.133 [Warning] [main] [ContentView.swift:21] putLog() > 警告メッセージ
2023-08-27 20:45:52.133 [Error] [main] [ContentView.swift:22] putLog() > エラーメッセージ
2023-08-27 20:45:52.133 [Severe] [main] [ContentView.swift:23] putLog() > 重大エラーメッセージ
2023-08-27 20:45:52.133 [Alert] [main] [ContentView.swift:24] putLog() > 警告エラーメッセージ:ログの出力先を設定してメールで通知することができます
2023-08-27 20:45:52.133 [Emergency] [main] [ContentView.swift:25] putLog() > 緊急エラーメッセージ:ログの出力先を設定してテキストで通知することができます
------------

オプションの設定方法:setupメソッド

XCGLoggerでのオプションを設定するsetupメソッドの引数を詳細にみていきます。

open func setup(level: Level = .debug, 
  showLogIdentifier: Bool = false, 
  showFunctionName: Bool = true, 
  showThreadName: Bool = false, 
  showLevel: Bool = true, 
  showFileNames: Bool = true, 
  showLineNumbers: Bool = true, 
  showDate: Bool = true,
  writeToFile: Any? = nil, 
  fileLevel: Level? = nil) 

level: LogLevel型

ログの出力レベルを列挙型Levelで指定します。指定できるのは以下のとおりです。

public enum Level: Int, CaseIterable, Comparable, CustomStringConvertible {
    case verbose
    case debug
    case info
    case notice
    case warning
    case error
    case severe
    case alert
    case emergency
    case none
}

ここで指定したログレベル以上のログのみがコンソールに出力されるようになります。例えばデフォルト(.debug)が指定されている場合はverboseは出力されなくなり、debugより上のレベルのみ出力されます。

showThreadName: Bool

スレッド名をログに含めるかどうかを指定します。trueなら含める。

showLevel: Bool

ログのレベルをログに含めるかどうかを指定します。trueなら含める。

showFileNames: Bool

ログを出力したファイル名をログに含めるかどうかを指定します。trueなら含める。

showLineNumbers: Bool

ログを出力した行番号をログに含めるかどうかを指定します。trueなら含める。

writeToFile: String?

ログをファイルに書き込む場合のファイルパスを指定します。指定すると、コンソールへの出力だけでなく指定したファイルにも書き込まれるようになります。

ファイルパスは相対パスや絶対パスで指定することができますが、相対パスだと実行環境によって変化する可能性があるので絶対パスを指定した方がわかりやすいかもしれません。またログファイルの自動生成生成機能はないためあらかじめファイルを作成しておく必要があります。

fileLevel: LogLevel型

ファイルに書き込むログのレベルを指定します。

ファイルに書き込んでみる

実際にファイルに書き込んでみたいと思います。今回はわかりやすくTestFirebase.xcworkspaceと同階層(プロジェクトのルートディレクトリ)へ設置してみたいと思います。writeToFileに指定するパスをプロジェクトのルートパス/ログファイル名にしてみます。

writeToFile: "/Users/ユーザー名/Desktop/プロジェクト名/app.log",
【Swift】XCGLoggerの使い方!ログ出力方法とファイルへ保存

出力するインスタンスの文字列表現を変更する

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index