1

複数のライブラリを使用する Apps スクリプトのプロジェクトがあります。このプロジェクトでは、より複雑なロガー (ログ レベル、色分け) が必要だったので、Google ドキュメントに出力するものを作成しました。すべてのライブラリにロガーを個別にインポートするときに、出力をすぐにGoogleドキュメントに出力すると、すべてがうまくいきます。ただし、多くのログを記録すると、ログを記録しない場合よりもはるかに時間がかかることに気付きました。そのため、メイン スクリプトが終了したときに、最後にすべての出力を一度に書き込む方法を探しています。

これには、次のいずれかが必要です。

  • ロギング ライブラリを一度 (メイン ファイルで) 定義し、接続されたライブラリで何らかの方法でこれにアクセスできること。ただし、ライブラリ内からメイン プロジェクトの閉鎖を取得する方法が見つからないようです。
  • ある種のシングルトン ロガー オブジェクト。ライブラリでこれが可能かどうかはわかりませんが、どちらの方法でも理解できません。
  • 私のニーズに合わせて組み込みのロガーを拡張していますが、よくわかりません...

私のプロジェクトは次のようになります。

主なプロジェクト

  • ライブラリー 1
  • ライブラリ 2
  • 図書館 3
  • 図書館 4

これが現在のロガーの使用方法です。

var logger = new BetterLogger(/* logging level */);
logger.warn('this is a warning');

ありがとう!

4

1 に答える 1

2

ログに記録された各メッセージ (速度低下の原因) でファイルに書き込む代わりに、ログ メッセージをロガー ライブラリのScriptDBインスタンスに書き込み.write()、メッセージを一度に出力するメソッドをロガーに追加できます。ロガー コンストラクターはmessageGroup、書き込みたい行の一意の識別子として機能するパラメーターを受け取ることができます。これにより、ログ出力に別のファイルを使用することもできます。

メッセージをファイルに書き込むための適切な出力に構築するとき (各行を個別に書き込まないでください。バッチ操作はあなたの友人です)、ScriptDB からメッセージを削除することをお勧めします。ただし、古いログを引き戻すのにも適している場合があります。

メッセージ オブジェクトは次のようになります。

{
  message: "My message",
  color: "red",
  messageGroup: "groupName",
  level: 25,
  timeStamp: new Date().getTime(), //ScriptDB won't take date objects natively
  loggingFile: "Document Key"
}

クエリは次のようになります。

var db = ScriptDb.getMyDb();
var results = db.query({messageGroup: "groupName"}).sortBy("timeStamp",db.NUMERIC);
于 2013-06-24T13:45:35.077 に答える