3

私はこのコードを持っています:

console.log('before');

console.groupCollapsed('main');
console.log('test1')
console.groupEnd();

console.groupCollapsed('main');
console.log('test2')
console.groupEnd();

console.groupCollapsed('main');
console.log('test2')
console.groupEnd();

console.log('after');

ブラウザのログに 3 行追加します。
問題は、ログが 3 つの異なるグループに分割されていることです。
前のログ メッセージと現在のログ メッセージのグループ名が同じ場合 ( )、ログを前のグループに追加できますmainか?

したがって、出力は次のとおりです。

before
> main
    test1
> main
    test2
> main
    test3
after

そして、私はこの出力が欲しい:

before
> main
    test1
    test2
    test3
after

更新: コードは非同期です。したがって、グループ外からグループへのロギングを防ぐために、ロギング後にグループを閉じる必要があります。

4

3 に答える 3

4

カスタムロガークラスはどうですか

function Logger(){
    var logs = [];
    var gname = "default";
    function group(name){
        gname = name
    }
    function log(){
        !!logs[gname] || (logs[gname] = []);
        logs[gname].push(Array.prototype.slice.call(arguments, 0));
    }
    function flush(){
      console.log(logs) // loop for groups or just output array
      logs=[]; // clear values
    }
    return {group:group,flush:flush,log:log}
}

使用法

var l = new Logger()
l.group('main1');
l.log('foo','bar','foobar')
l.log('foo-bar')

l.group('main2');
l.log('foo')
l.log('bar')

l.group('main1');
l.log('foo2bar')
l.log('bar2foo')

l.group('main3');
l.log('foo')
l.log('bar')

l.group('main1');
l.log('foo3')
l.log('bar3')

l.flush()
于 2013-02-09T14:27:47.657 に答える
2

本当に新しいグループを作成したい場合を除き、新しいグループを再度開く必要はありません。したがって、グループを開くと、ログに記録したものはすべて、グループを閉じるまでそのグループに関連付けられます。

あなたの例では、それは

console.log('before');

console.groupCollapsed('main');
console.log('test1');
console.log('test2');
console.log('test2');
console.groupEnd();

console.log('after');

気にする必要はありませんが、ブラウザーがこれらをグループでログに記録するのに少し時間がかかります。追記です。

于 2013-02-09T13:43:26.593 に答える
1

グループを閉じないことによってのみ、それを行うことができます。次のようなものを使用できます。

var curGroup;
console.logInGroup = function(group, log) {
    if (curGroup != group) {
        console.groupEnd();
        console.groupCollapsed(curGroup = group);
    }
    console.log.apply(console, [].slice.call(arguments, 1));
};

console.log('before');
console.logInGroup('main', 'test1');
console.logInGroup('main', 'test2');
console.logInGroup('main', 'test2');
console.groupEnd();
console.log('after');
于 2013-02-09T13:45:06.590 に答える