私はiOSの開発とiOSのログイン方法を探しています。アプリケーションログをファイルに書き込んで取得する方法
私は迅速3でのログインに関するこれらのドキュメントを見つけました:https://developer.apple.com/documentation/os/logging#1682426
ドキュメントは、ログがディスク上に保存されてaren'tと言います。ログを取得してファイルを処理する典型的な方法は何ですか?
私はiOSの開発とiOSのログイン方法を探しています。アプリケーションログをファイルに書き込んで取得する方法
私は迅速3でのログインに関するこれらのドキュメントを見つけました:https://developer.apple.com/documentation/os/logging#1682426
ドキュメントは、ログがディスク上に保存されてaren'tと言います。ログを取得してファイルを処理する典型的な方法は何ですか?
プロジェクトにこのファイルを置く
//
// 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)
}
のような印刷機能を使用します " Documentsフォルダには、後で調べることができる 'log.txt'ファイルがあります。
二回私のテストアプリケーションを実行中に「グローバル」はsingletoneクラス
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
}
としてログインを定義し、
のようにそれを使用して好きではない場合、コンテンツが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]
のように見えます
print("started:", Date(), to: &Log.log)
ああええ。これはアプローチですが、なぜ私はos.logフレームワークを使用できませんか?私はそれがLogLevelを含むことを意味します。私はLog.logの前に '&'を意味する質問を開いていますか? – Offset
@Offset OSLogは、iOS 10.0以降、MacOS 10.12+、tvOS 10.0+、watchOS 3.0+、Unknown SDK 8.0+でのみ利用可能です。 &inoutとして動作し、変数をin-outパラメータにします。あなたのファイルにOSLog import osを使用するには – user3441734
大丈夫です。 OSLogはデバッグ専用ですか?ファイルに書き込むことはできませんか、ファイルとして使用できますか?私は非常に混乱していると思う。さらに、すべてのバージョンで利用可能なNSLogがあります。まとめてみましょう:私は自分のロガーを書くか(上記のように)、またはサードパーティ製のlibを使いますか? – Offset
スイフト3.0バージョン
は
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)
}
}
}
}
が
var textLog = TextLog()
が
以下のようなアプリケーションの任意の場所に使用するファイルAppDelegate.swiftで下部にあるロガーを初期化し、プロジェクトに新しいSWIFTファイル「TextLog.swift」を作成します。textLog.write("hello")
あなたはCrashReporterのようなファイルとしてログを取得したいと思いますか?その場合、これをアーカイブすることができる2つのポッドがあります。 [PLCrashReporter](https://www.plcrashreporter.org/)は私のプロジェクトの1つです。ログファイルをファイルに出力し、特定のサーバーに送信されるレポートを作成します。 –
ドキュメントのように、os.logを使用してパラメータと実行時の動作を記録します。近い将来、これらのログを収集して他の場所に送信したいと考えています。しかし、私はコードアプローチではなく、libでクリーン迅速に探しています。 – Offset