setzen diese Datei zu Ihrem Projekt
//
// 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()
und wenn Sie etwas müssen angemeldet sein, verwenden Sie nur Druckfunktion wie
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
print("started:", Date(), to: &logger)
return true
}
oder
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)
}
in Ihrer Anwendung " Im Ordner "Dokumente" finden Sie die Datei "log.txt", die Sie später untersuchen können.
während meine Testanwendung zweimal ausgeführt wird, sieht der Inhalt wie
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]
wenn Sie nicht 'Globals' wie definieren Log als Singletone Klasse
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
}
und verwenden Sie es wie
print("started:", Date(), to: &Log.log)
ich denke, Sie möchten die Protokolle als Datei wie ein CrashReporter bekommen, habe ich recht? In diesem Fall gibt es ein paar Pods, die das archivieren können. [PLRashReporter] (https://www.plcrashreporter.org/) verwende ich in einem meiner Projekte. Es druckt die Logdateien in eine Datei und erstellt einen Bericht, der an einen bestimmten Server gesendet wird. –
Ich möchte Parameter und Laufzeitverhalten mit os.log wie in den Dokumenten protokollieren. In naher Zukunft möchte ich diese Protokolle sammeln und sie woanders hinschicken. Aber ich bin auf der Suche nach einem sauberen, schnellen Code-Ansatz und nicht nach einer Lib. – Offset