MDN may have intermittent access issues April 18 13:00 - April 19 01:00 UTC. See whistlepig.mozilla.org for all notifications.

mozilla
Your Search Results

    Console service

    このドキュメントは 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: kohei.yoshino, teoli
    最終更新者: teoli,