私はiOSの開発で重要な一歩を踏み出し、iOSでロギングを使用する方法を探しています。
Swift 3: https://developer.Apple.com/documentation/os/logging#1682426 を使用したロギングに関するこれらのドキュメントを見つけました
ドキュメントには、ログがディスクに保存されていないと記載されています。ログを取得してファイルを処理する一般的な方法は何ですか?
このファイルをプロジェクトに配置します
//
// log.Swift
// logtest
//
import Foundation
struct Log: TextOutputStream {
func write(_ string: String) {
let fm = FileManager.default
let log = fm.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("log.txt")
if let handle = try? FileHandle(forWritingTo: log) {
handle.seekToEndOfFile()
handle.write(string.data(using: .utf8)!)
handle.closeFile()
} else {
try? string.data(using: .utf8)?.write(to: log)
}
}
}
var logger = Log()
ログに記録する必要がある場合は、次のような印刷機能を使用します
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
print("started:", Date(), to: &logger)
return true
}
または
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
print(#file, #function, "my own text", 1, [1,2], to: &logger)
}
アプリケーションの「ドキュメント」フォルダに「log.txt」ファイルがあり、後で確認できます。
テストアプリケーションを2回実行すると、コンテンツは次のようになります。
started: 2017-06-14 09:58:58 +0000
/Users/ivo_vacek/Documents/logtest/logtest/ViewController.Swift viewDidLoad() my own text 1 [1, 2]
started: 2017-06-14 09:59:15 +0000
/Users/ivo_vacek/Documents/logtest/logtest/ViewController.Swift viewDidLoad() my own text 1 [1, 2]
'globals'が気に入らない場合は、Logをシングルトーンクラスとして定義します
class Log: TextOutputStream {
func write(_ string: String) {
let fm = FileManager.default
let log = fm.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("log.txt")
if let handle = try? FileHandle(forWritingTo: log) {
handle.seekToEndOfFile()
handle.write(string.data(using: .utf8)!)
handle.closeFile()
} else {
try? string.data(using: .utf8)?.write(to: log)
}
}
static var log: Log = Log()
private init() {} // we are sure, nobody else could create it
}
そしてそれを
print("started:", Date(), to: &Log.log)
Swift 3.0バージョン
プロジェクトに新しいSwiftファイル "TextLog.Swift"を作成します
import Foundation
struct TextLog: TextOutputStream {
/// Appends the given string to the stream.
mutating func write(_ string: String) {
let paths = FileManager.default.urls(for: .documentDirectory, in: .allDomainsMask)
let documentDirectoryPath = paths.first!
let log = documentDirectoryPath.appendingPathComponent("log.txt")
do {
let handle = try FileHandle(forWritingTo: log)
handle.seekToEndOfFile()
handle.write(string.data(using: .utf8)!)
handle.closeFile()
} catch {
print(error.localizedDescription)
do {
try string.data(using: .utf8)?.write(to: log)
} catch {
print(error.localizedDescription)
}
}
}
}
AppDelegate.Swiftファイルの下部にあるロガーを初期化します
var textLog = TextLog()
以下のようにアプリケーションのどこでも使用できます
textLog.write("hello")