我可以在nodejs中获取console.table的字符串值吗?

kcwpcxri  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(78)

我正在为我的Winston记录器实现一个漂亮的格式,想知道是否可以使用Node.js方法console.table来获取“字符串”?
这个方法是无效的,但是有没有什么方法可以用字符串表示呢?

const tableAsString = console.table([{foo: 'bar'}, {foo: 'bar2'}])
// This does not work, table as string is undefined...
z31licg0

z31licg01#

实际上在NodeJS中有一种简单的方法可以做到这一点
您可以构造自己的Console示例并使用自定义输出流。

import { Console } from 'node:console'
import { Transform } from 'node:stream'

const ts = new Transform({ transform(chunk, enc, cb) { cb(null, chunk) } })
const logger = new Console({ stdout: ts })

function getTable (data) {
  logger.table(data)
  return (ts.read() || '').toString()
}

const str = getTable({foo: 'bar'})
console.log(str.length) // 105
console.log(str)
// ┌─────────┬────────┐
// │ (index) │ Values │
// ├─────────┼────────┤
// │   foo   │ 'bar'  │
// └─────────┴────────┘

我创建了一个名为:Not a log在Proxy的帮助下完成了这一点,使Console示例上的所有方法仅用20行代码就返回一个字符串!用途:

import logger from 'not-a-log'

const string = logger.table([{foo: 'bar'}, {foo: 'bar2'}])
const count = logger.count('made a request')
const foo = logger.log('identity foo')

相关问题