開発者向けログを出力するPandion用プラグイン

最近xmppクライアントのPandionで遊んでいる。
ちょとプラグインを作ってみようとおもってまずは、デバッグをやりやすくするためにログを出力するためのプラグインを作ってみた。

<?xml version="1.0" encoding="UTF-8"?>
<!--
  Email:  snaka.gml@gmail.com
  Date:   november 2009
-->
<plugin type="code">
	<name>logger</name>
	<description>Logger</description>
	<version>1.0</version>

	<event for="onLoad">
		<code language="JScript" parameter="context">
			<![CDATA[
        logger = (function(){
          var self = {};

          // private

          var usersDir = external.globals('usersdir');
          var file = external.File(usersDir + "\\pandion.log");
          var time = new Date();

          function timestamp() {
            return  time.getYear() + '/' +
                    time.getMonth() + '/' +
                    time.getDay() + ' ' +
                    time.getHours() + ':' +
                    time.getMinutes() + ':' +
                    time.getSeconds() + '.' +
                    time.getMilliseconds();
          }

          // public

          self.put = function(text) {
            file.WriteLine(timestamp() + ' ' + text);
          };

          self.dump = function(obj) {
            self.put(typeof obj + "::");

            if (typeof obj == 'string') {
              self.put(obj);
              return;
            }

            self.put("{");
            try {
              for (var i in obj) {
                self.put("  " + i + ":" + obj[i] + ",");
              }
            } catch(e) {
              // do nothing
              self.put("error?");
            }
            self.put("}");
          };

          self.close = function() {
            file.Close();
          };

          return self;
        })()

        logger.put("Logger plugin loaded ...");
      ]]>
		</code>
	</event>

	<event for="onDisconnect">
		<code language="JScript" parameter="context">
			<![CDATA[
        // FIXME: Do not work?
        logger.put("disconnected ...");
        logger.close();
      ]]>
		</code>
	</event>

</plugin>

上記を適当に、"logger.pdn"などの名前で保存して、ダブルクリックするとPandionにインストールされると思う。

logger

このプラグインのネームスペース
プラグインで追加される関数等はこのオブジェクトのプロパティとして追加される。

logger.put()関数

文字列をログファイルに出力する。

logger.dump()関数

オブジェクトのプロパティを捜査してログファイルに出力する。

追記:2010.4.26

そもそも組み込みのデバッグ用コンソールと、そこに出力するための関数が用意されてるので、このプラグインを導入する意味はあまりない。

Pandionのデバッグ用コンソールの出し方 - 今日もスミマセン。