【Swift】XCGLoggerの使い方!ログ出力方法とファイルへ保存
この記事からわかること
- SwiftのXCGLoggerの使い方
- ログを出力する方法
- 指定できるログレベル(Level列挙型)の種類
- setupメソッドでオプションを設定する方法
- ファイルに書き込むには?
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
参考文献:公式リファレンス:XCGLogger
XCGLoggerとは?
XCGLoggerはSwiftで使用できる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",
出力するインスタンスの文字列表現を変更する
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。