Console service

by 2 contributors:
このドキュメントは nsIConsoleService. にある情報と一部重複しています。

コンソールサービスインタフェース は、任意のソースからの、実行時のメッセージのロギングをサポートします。メッセージは、エラーコンソール上でユーザのために表示されたり、ディスクへ出力されたりします。

基本ロギング

Mozilla では 3 つの中心となるオブジェクトがハイレベルのメッセージをロギングさせるのに使われます:

3 main objects are used for logging high-level messages in Mozilla:

コンポーネント開発者の視点で

以下の例は単純な文字列をログ出力する方法を示しています。Firefox ではエラーコンソールを使ってログを目に見える形にすることができます。メッセージは情報アイコンとともに表示されるでしょう。

例 1. 単純な文字列のロギング (C++)
nsCOMPtr<nsIConsoleService> aConsoleService =
    do_GetService( "@mozilla.org/consoleservice;1" );

aConsoleService->LogStringMessage(
    NS_LITERAL_STRING( "a logging message" ).get());
例 2. 単純な文字列のロギング (JavaScript)
var aConsoleService = Components.classes["@mozilla.org/consoleservice;1"].
     getService(Components.interfaces.nsIConsoleService);

aConsoleService.logStringMessage("a logging message");

アプリケーション開発者の視点で

ログとなったメッセージを見るためには、Firefox のエラーコンソールを開くか、自前の nsIConsoleListener を実装するかする必要があります。

基本的に、実装すべき唯一のメソッドは observe で、その後、registerListener メソッドで nsConsoleService の中にリスナーを登録します。

logMessage メソッドが呼ばれるたびに、自前で実装した observe メソッドも呼ばれます。 実装者の選択によって、それをユーザインタフェースにもディスク上にも表示でき、ログサーバへも送ることができます。

例 3. 単純なリスナー
var theConsoleListener =
{
    observe:function( aMessage ){
	dump("Log : " + aMessage.message);
    },
    QueryInterface: function (iid) {
	if (!iid.equals(Components.interfaces.nsIConsoleListener) &&
            !iid.equals(Components.interfaces.nsISupports)) {
		throw Components.results.NS_ERROR_NO_INTERFACE;
	    }
        return this;
    }
};

function onLoad()
{
    var aConsoleService = Components.classes["@mozilla.org/consoleservice;1"]
        .getService(Components.interfaces.nsIConsoleService);
    aConsoleService.registerListener(theConsoleListener);
}

nsIConsoleMessage を使ったさらなる楽しみ

nsIConsoleMessage の単純な実装は nsConsoleMessage によって操作されることです。nsConsoleMessage は、logStringMessage メソッドによって使われます。

特定の問題に応じて、より特化したクラスが必要になるかもしれません。nsIConsoleMessage を派生させ、新しい属性やメソッドを追加することもできます。 nsIConsoleListener を使うためには message 属性も実装しなくてはなりません。

特定の問題が起きたときに、QA 部門へメールを送信できるコンソールリスナーを思い描きます。

メッセージのロギング

コンソールサービスは、ユーザや UI/コンポーネント開発者に関係のある、任意のメッセージをロギングするのに使われます。コンソールサービスは、現在のところ、XUL とコンテント JavaScript、XPI JavaScript、JS コンポーネントからのメッセージを受け取ります。その他の候補としては、Prefs、XML パーサと XPConnect があります。エラーリストは、JavaScript UI からフィルタリングすることを意図しているので、ロギングするものとは区別されていません。

メッセージをロギングするためには、(コンソール) サービスの LogStringMesssage を呼び出してください。もし、メッセージに対して単なる文字列以上の情報を関係づけたいのであれば、nsIConsoleMessage への QueryInterface を呼び出すことができる XPCOM オブジェクトを作成し、そして (コンソールサービスの) LogMessage を呼んでください。例えば、現在、JavaScript エラーは、nsIScriptError (nsIConsoleService を継承しているインタフェース) のインスタンスをロギングしています。コンソールリスナーは、その後 QueryInterface を使って、nsIConsoleMessage より情報の多い、自分が知っているメッセージタイプを得ることができます。JavaScript コンポーネントローダー は、メッセージのロギングの例です。

スレッドセーフ

コンソールサービスは、スレッドセーフであることを意図しています。どのスレッドからもメッセージをロギングできなければいけません。サービスに登録されたリスナーは登録時にプロキシ化 【訳注: リスナーが直接呼ばれるのではなく、プロキシを経由して呼ばれることを指すと思われる。[nsISupports_proxies, nsISupports プロキシ】 されます。新しいメッセージがロギングされる時に、それぞれのリスナーは、登録された元のスレッド上で (非同期に) 通知されます。(そのため、それぞれのリスナーはイベントキューを持つスレッドで登録されなければなりません。)

古いメッセージの破棄

無制限のエラーを生成するページによるサービス拒否を防ぐために、コンソールサービスは、LIFO の循環式メッセージバッファを保持しています。そして、メッセージが上限に達すると古いメッセージの破棄を開始します。

エラーコンソール

コンソールサービスのひとつのクライアントは、Firefox のエラーコンソールです。(ツール > エラーコンソールで開きます) エラーコンソールは、その時までにロギングされたメッセージのためにコンソールサービスをポーリングします。そして、新しいメッセージのためにサービスに自分自身をリスナーとして登録します。コンソールサービス自身は JavaScript に依存しません。コンソールサービス上のすべてのものはスクリプティング可能であり、エラーコンソールのウィンドウは純粋な XUL/JavaScript で実装されています。

Martijn Pieters のおかげで、エラーコンソールのためのコマンドラインハンドラがあります。(Firefox の) 起動時にエラーコンソールも同時にスタートさせるには -jsconsole オプションを使ってください。

原文書の情報

  • 著者: Mike McCabe, David Olivari
  • 最終更新日: May 7, 2000
  • 著作権: Portions of this content are © 1998–2007 by individual mozilla.org contributors; content available under a Creative Commons license | 詳細
 

ドキュメントのタグと貢献者

タグ: 
Contributors to this page: teoli, kohei.yoshino
最終更新者: teoli,