高度な検索
Developer Connection
Member Login ログイン | ご入会 ADC連絡先

Technical Q&A QA1182
Why does logging keep my Printer Module from working?


Q: ログによってプリンタモジュールが機能しなくなるのはなぜでしょうか?Mac OS X 10.0 と 10.1 では、正常に動作していました。

A: Mac OS X の以前のバージョンとは異なり、Mac OS X 10.2(Jaguar)では、印刷システム(CUPS)は stdout を利用してモジュール間の情報の経路指定を行います。プリンタモジュール(PM)または I/O モジュール(IOM)の中に、printf などを経由して stdout へログを出力しようとするコードがあると、それらは印刷システムの妨げとなります。ログファイルへ書き出す必要がある場合は、fprintf を使って特定のファイルに書き出すか、または stderr にログ情報を送信してください。例については、リスト 1 を参照してください。


//    /private/var/log/cups/error_log に書き出す
fprintf( stderr, "This message will appear in the CUPS error log." );

//    ログファイルに書き出す
fprintf( file, "This message will appear in your own log file" );

リスト 1. ログ出力例

Jaguar では、PM と IOMは、現在ログイン中のユーザとしてではなくデーモンとして実行するため、fprintf 経由でファイルにログを出力する場合は、目的のディレクトリに適切なパーミッションを設定する必要があることを知っておいてください。

さらに、デバッキングの手助けとして、CUPS の構成ファイルである /etc/cups/cupsd.conf を編集して LogLevel を変更することにより、CUPS の error_log ファイルのログレベルを調節できます。リスト 2 に、編集する必要のある cupsd.conf ファイル中の関連セクションを示します。

#
# LogLevel: ErrorLog ファイルにログ出力されるメッセージ数を制御し
# 以下のいずれかにできる:
#
#     debug2    すべてのログをとる
#     debug     ほとんどすべてのログをとる
#     info      すべての要求と状態の変化についてのログをとる
#     warn      エラーと警告のログをとる
#     error     エラーのみログをとる
#     none      ログをとらない
#

LogLevel info

リスト 2. cups.conf ファイルの error_log ログレベルの制御


[2002 年 11 月 6 日]