iOSやmacOSでのログ出力はASL API

Software Design 2016年9月号の特集のログ出力を読んでいて、iOSやmacOSでsyslogでどうなっていたかなぁと思ったので、確認しました。
iOSやmacOSでもsyslog()関数を使ったログ出力が出来ます。アップルの推奨している方法は、syslog()を使うのではなく、ASL (Apple System Logger) APIを使う方法です。「Daemons and Services Programming Guide」の「Logging Errors and Warnings」の所に概要が載っています。ASL APIの詳細はmanページを参照と書かれていました。
書かれている中で目を引いたのは、ASLはスレッドセーフであることです。libdispatchのおかげで簡単にスレッドを作って、サブスレッドで処理を行わせることが出来るようになり、サブスレッドで動作していることを忘れがちです。気軽にログ出力を行ったら、それが原因で落ちてしまったなんてことになったら、目が当てられないです。
NSLog関数はsyslogにも出力します。Swiftネイティブで同様の関数があったか検索してみると、そのものずばりは無いようですね。素直にASL APIをSwiftから使えば良いようです。しかし、ログ出力をしたいところで、直接ASL APIを使っていると、後々、変更するときに面倒になるのと、出力先や出力フォーマットを変更したいなども考えると、ラッパー関数を作って、それを使うのが良いのでは無いでしょうか。

Swiftから使ってみる

とりあえず、Swiftから使って見ます。Swiftから使うにはブリッジヘッダファイルを作って、ブリッジヘッダファイルで「asl.h」をインクルードします。
C++やObjective-Cからは「asl_log_message」関数で手軽に出力できますが、Swiftからだと直接は呼べないようです。そのため、他の関数を使って実装します。次の例は、「log」という関数を実装しています。
import Foundation
func log(format: String, _ items: CVarArgType...) {
let logClient = asl_open(nil, "com.rk-k.MacLog", UInt32(ASL_OPT_STDERR))
asl_vlog(logClient, nil, ASL_LEVEL_WARNING, format, getVaList(items))
asl_close(logClient)
}
log("Debug Log Test")

ログレベルは「ASL_LEVEL_NOTICE」以上のレベル(数値としては以下ですが)を指定すると、コンソールにも表示されます。

投稿者プロフィール

林 晃
林 晃macOS/iOSアプリ/SDK/ミドルウェア開発が専門の開発者
アールケー開発代表。macOS/iOSアプリ/SDK/ミドルウェア開発が専門の開発者。ObjC/Swift/C++使い。豊富な開発実務経験を基に、教育コンテンツ開発、技術書執筆、技術指導、技術セミナー講師、企業内研修講師、行政・自治体職員研修講師も行います。

基礎から学ぶMetal


「基礎から学ぶMetal」を執筆しました。本書はMetalを使ってGPUプログラミングを行うための最初のステップを解説するMetalの解説書です。

私が初めてGPUプログラミングを行ったとき、どこから手をつけて、学んでいけば良いのか分からず呆然としました。もし、あのとき、これを教えてくれればという部分を解説しました。本書で解説している部分はMetalの基礎となる部分で、Metalを使うときに必ず触れることになる部分です。

詳細

基礎から学ぶSwiftUI


「基礎から学ぶ SwiftUI」というタイトルの本を執筆しました。

SwiftUIの入門書です。

SwiftUIのコンセプトは「ユーザーインターフェイスを作るための最短パスを提供する」「一度学べば(Appleのプラットフォームの)どこにでも適用できる」です。

SwiftUIの概要から始まって、一つ一つのテクノロジートピックに注目しながらSwiftUIとは何か?どんなことができるのか?どのようなコードを書けば良いのかなどを丸々一冊使って解説しています。

詳細

関連記事

  1. Parallelsのキーボードショートカット設定の変更に気が付いた

  2. XcodeやAppCodeで16進数や2進数で値を確認する方法

  3. GPGの秘密鍵や公開鍵のバックアップ方法

  4. SwiftでのバッファアクセスはwithUnsafeBytesを使う

  5. Markdownの編集環境をセットアップする

  6. Confluenceから良い感じのPDFを作れる様にしてみた

最近の著書

  1. 基礎から学ぶ SwiftUI

人気記事

最近の記事