2016-06-19 5 views
2

valueを文字列にすると、どのようにしてconsole.log(value)のようにフォーマットできますか?console.log日付とオブジェクトのフォーマット

console.logで提供されているデフォルトの書式を壊さずに、私が印刷している各値に追加の詳細を追加する必要があります。簡単な値の場合は簡単ですが、DateObjectのようなタイプの場合は、より複雑です。

console.logと一貫性のある方法はありますか?つまり、valueconsole.log(value)から取得するのと同じ文字列にするにはどうすればよいですか?


私は単純なライブラリmanakinを実装しようとしています。

'use strict'; 

(function() { 

    var error = console.error, warn = console.warn; 

    console.error = function() { 
     var a = arguments; 
     error.apply(this, Object.keys(a).map(function (key) { 
      return "\u001b[31m" + a[key] + "\u001b[0m"; 
     })); 
    }; 

    console.warn = function() { 
     var a = arguments; 
     warn.apply(this, Object.keys(a).map(function (key) { 
      return "\u001b[33m" + a[key] + "\u001b[0m"; 
     })); 
    }; 

})(); 

私が午前問題は種類DateObjectのために出力が異なることである:ここではその完全なソースコードです

// without manakin: 
console.warn({value: 1}); 
//=> { value: 1 } 

// with manakin: 
console.warn({value: 1}); 
//=> [object Object] 

と私はそれが一貫したいです。


は終わりでは

を解決し、私は(それが小さい)manakinソースコードを参照してください、それのNode.jsとすべてのブラウザで、両方ともにすべての作業にする方法を考え出しました。

Node.jsとブラウザの実装が異なる必要がありました。具体的には、Node.jsではutil.inspectを使用します。

+0

出力例を表示できますか? – JordanHendrix

+0

@JordanHendrix私は完全なコードを追加しました;) –

+0

単に置く; 'console.log'が' printf'のようなものなら、OPは 'sprintf'を望んでいます。 – noisypixy

答えて

1

は私があることを警告するには、コードを変更した場合信じる:

console.warn = function() { 
    var a = arguments; 
    warn.apply(this, Object.keys(a).map(function (key) { 
     if (a[key] instanceof Date) { 
     return "\u001b[33m" + a[key].toString() + "\u001b[0m"; 
     } 
     return "\u001b[33m" + JSON.stringify(a[key]) + "\u001b[0m"; 
    })); 
}; 

あなたが探しているものを持っています。私は、コンソールに新しいコードを貼り付けて、あなたが持っているサンプルをログするだけで、あなたのためにうまくいくことを試してみました!

+1

私はこのアプローチも考えましたが、 'JSON.stringify'はそれらをRFC3339形式で返しますが、' console.log'はRFC1123と思われるものを出力します。たぶん 'a [key] instanceof Date'をチェックし、trueの場合は' a [key] .toString() 'を使用してください。 – noisypixy

+0

良い考えのように聞こえる – JordanHendrix

+0

良い直感のように思えました – JordanHendrix

関連する問題