Я пытаюсь получить все журналы консоли в файл.
Я нашел такие сообщения, как это. Я тестировал это: содержимое не отображается с помощью NSLog (он отображается с печатью), но данные не записываются в файл, ни NSLog, ни данные для печати.
Когда приложение закрывается, я закрываю файл.
Я сделал следующее:
var file: UnsafeMutablePointer<FILE>?
func logAll() {
let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let filename = "/\(Date().timeIntervalSinceReferenceDate).log"
let logFilePath = paths[0].appending(filename)
file = freopen(logFilePath.cString(using: .ascii), "a+", stderr)
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
logAll()
/// rest of the code
}
func applicationWillTerminate(_ application: UIApplication) {
if let file = file {
fclose(file)
}
}
Что мне здесь не хватает?
@matt я тестирую старое приложение, оно называется
Ах, так вот почему вы не можете использовать OSLog?
@matt моя цель также получить то, что сторонние библиотеки будут печатать в консоли





Хорошо, у меня есть это.
Есть 3 стандартных файла: stdin, stdout и stderr
Поскольку я просто пробовал с отпечатками, я этого не видел, но обычные отпечатки хранятся в файле stdout. Позже, пытаясь в проекте с большим количеством библиотек, кажется (firebase, например), журналы хранятся в stderr.
Итак, вместо того, чтобы открывать только один файл, мне нужно просто открыть 3 файла, чтобы получить все журналы.
Единственный недостаток в том, что у меня нет способа получить правильный порядок
applicationWillTerminateникогда не будет вызываться, поэтому вы никогда не закроете файл.