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. AsciiDocのマークアップ早見表

  2. [2020年3年5日更新] Macアプリのアイコンの設定方法 R…

  3. Xcode 10対応 : 古いヘッダーマップはサポートされなくなる

  4. WordPressで記事が古いときにメッセージを表示する

  5. [2021/03/26更新] リリース済みのアプリのApple Not…

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

最近の著書

  1. 基礎から学ぶ SwiftUI

人気記事

最近の記事