NSLog / OSLog периодически появляется в консоли - PullRequest
0 голосов
/ 30 мая 2019

Я заметил, что мои операторы NSLog (и я тоже пробовал это с os_log) не отображаются последовательно в консольном приложении.

Вот код, который запускается при запуске моего приложения.

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

        NSLog("xyz didFinishLaunchingWithOptions")
        FirebaseApp.configure()
        NSLog("xyz FirebaseApp.configure() done")
        let db = FirestoreDelegate.db()
        let now = Date()
        NSLog("xyz about to write")
        db.collection("atest").document(DateUtils.formatTimestampGMT(now)).setData(["ts": now, "note":"delegate startup"]) {
            err in
            if let err = err {
                NSLog ("xyz error ats \(err)")
                return
            }
            NSLog("xyz wrote to ats \(DateUtils.formatTimestampGMT(now))")
        }
        NSLog("xyz after write")
        ... extraneous code removed
}

Когда я запускаю, иногда я вижу "xyz didFinishLaunchingWithOptions" и "write to ats", но ни один из других операторов журнала. Иногда я вижу их всех, но это довольно противоречиво. Они как-то фильтруются или оптимизируются?

Я не отлаживаю через xcode, я просто запускаю приложение на своем телефоне и просматриваю журналы через консольное приложение на моем компьютере.

1 Ответ

1 голос
/ 30 мая 2019

Я не понял, почему регистрация противоречива. Вместо этого я создал собственный регистратор, который пишет в файл.

public class FileWriter {
    static func getTs() -> String {
        let timestampFormat = DateFormatter()
        timestampFormat.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
        return timestampFormat.string(from: Date())
    }

    static func write(_ text: String) {
        do {
            let dir: URL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last! as URL
            let url = dir.appendingPathComponent("log.txt")
            if !FileManager.default.fileExists(atPath: url.path) {
                FileManager.default.createFile(atPath: url.path, contents: nil, attributes: nil)
            }
            let fileHandle = try FileHandle(forWritingTo: url)

            let line = "\(getTs()) \(text)\n"
            let data = line.data(using: String.Encoding.utf8)!
            fileHandle.seekToEndOfFile()
            fileHandle.write(data)

            fileHandle.closeFile()
        } catch let error as NSError {
            print ("error \(error)")
        }
    }
}

Чтобы прочитать файл, я добавил следующие ключи в мой Info.plist "UIFileSharingEnabled" , «LSSupportsOpeningDocumentsInPlace», а затем я могу открыть файл на своем телефоне с помощью приложения «Файлы».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...