@ book000/node-utils (书名)
自用库 托马奇 (书籍 000)
QQ 安装
如果您正在使用 npm :
npm install @book000/node-utils
或使用纱线:
yarn add @book000/node-utils
* 特性
又见 斜弧/实例/ 目录.
有温顿的Logger
方便的 Entertainment winton 日志包装程序 .
import { Logger } from '@book000/node-utils'
function main() {
const logger = Logger.configure('main')
logger.info('Hello world!')
}
main()
约克 配置框架
用于管理JSONC格式配置文件的框架类.
import { ConfigFramework } from '@book000/node-utils'
interface Config {
foo: string
bar: number
}
class ExampleConfiguration extends ConfigFramework<Config> {
protected validates(): { [key: string]: (config: Config) => boolean } {
return {
'foo is required': (config) => config.foo !== undefined,
'foo is string': (config) => typeof config.foo === 'string',
'foo is 3 or more characters': (config) => config.foo.length >= 3,
'bar is required': (config) => config.bar !== undefined,
'bar is number': (config) => typeof config.bar === 'number',
}
}
}
function main() {
const config = new ExampleConfiguration()
config.load()
if (!config.validate()) {
console.error('Configuration validation failed')
console.error(config.getValidateFailures())
return
}
console.log('foo:', config.get('foo'))
console.log('bar:', config.get('bar'))
}
main()
哨兵( GlitchTip) 错误报告集成
Logger 自动转发 error编号 :warn 日志(和现有 unhandledRejection 编号 : uncaughtException 进程钩)到一个与哨兵兼容的端点(例如,自行托管) 滑块当 SENTRY_DSN 设置了环境变量。 除了升级外,消费方面不需要修改代码 @book000/node-utils 并设置环境变量.
import { Logger } from '@book000/node-utils'
// SENTRY_DSN が設定されていれば、以下の error() 呼び出しは自動的に GlitchTip へ転送される
const logger = Logger.configure('main')
logger.error('Something went wrong', new Error('boom'))
转发出的问题保留了原错误的名称和消息作为标题,以及日志消息('Something went wrong')作为附件 log.message 标签。 问题按级别、出错名称和第一个应用程序堆栈框架(函数和文件名称)的指纹分组,或按没有日志的信件分组 Error。 。 。 .
一个 Error 在某一水平上已经报告的实例不再报告(不论日志类别),因此 logger.error('failed', err) 后被内地困住 unhandledRejection 编号 : uncaughtException 钩子发出一事件. 区分 Error 案件从不重复,同一案件首先记录为 warn 以及后来 error 仍报告两次(每级一次).
Logger.warn 编号 : Logger.error 接受可选的第三个参数 SentryMeta 以控制发送给哨兵的日志:
logger.error('Payment failed', error, {
fingerprint: ['payment-failed', '{{ default }}'], // replaces the automatic fingerprint
tags: { feature: 'checkout' }, // string values only
extra: { orderId: 42 }, // do not put secrets here
})
logger.warn('Expected, noisy condition', undefined, { sentry: false }) // never sent to Sentry
无效的值( 非字符串阵列) fingerprint,非字符串标记值)会被忽略。 这个 log.message 标记无法被覆盖 . SentryMeta 没有写入控制台或日志文件,只有构建的参数 Logger 获得荣誉(a) sentryMeta 属性在错误对象上被忽略。 下面转发日志 warn (单位:千美元)sentry: true)尚未支持.
| 环境变量 | 需求 | 默认 | 说明 |
|---|---|---|---|
SENTRY_DSN | 否(选择输入) | 无 | 当未设定时, SentryTransport 编号 : ErrorReporter 完全没有操作 |
SENTRY_ENVIRONMENT | 没有 | process.env.NODE_ENV ?? 'production' | 哨兵 environment 标签 |
SENTRY_LOG_LEVEL | 没有 | warn | 温斯顿最小日志级别 SentryTransport |
SENTRY_RELEASE | 没有 | 自动检测 <name>@<version> 从消费的应用程序 package.json | 覆盖自动检测 release 标签 |
对于明确、选入的错误报告,请在 Logger (例如附加自定义标记),使用 ErrorReporter数字 :
import { ErrorReporter } from '@book000/node-utils'
ErrorReporter.configure()
ErrorReporter.captureException(new Error('boom'), { userId: '123' })
发送消息到 Discord
您可以使用 Discord Bot 或 Discord Webhook 向 Discord 发送消息 .
import { Discord, DiscordMessageFlag } from '@book000/node-utils'
export async function main() {
const discord = new Discord({
webhookUrl: 'https://discord.com/api/webhooks/...'
})
/*
// ... or using Discord Bot
const discord = new Discord({
token: '...',
channelId: '1234567890',
})
*/
await discord.sendMessage('Hello world!')
await discord.sendMessage({
embeds: [
{
title: 'Hello world!',
description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.',
color: 0x00_ff_00,
},
],
})
// Suppress embeds and notifications using flags
await discord.sendMessage({
content: 'https://example.com',
flags:
DiscordMessageFlag.SuppressEmbeds |
DiscordMessageFlag.SuppressNotifications,
})
}
main()
flags 可与 content, (中文(简体) ), embeds, (中文(简体) ), components 财务报告和审定财务报表 file。 。 。 .
sendMessage() 接受 SuppressEmbeds 财务报告和审定财务报表 SuppressNotifications。 。 。 .
编辑时,仅限 SuppressEmbeds 可设置或取消设置(Discord API限制),但 editMessage() 还接受 SuppressNotifications 这样您就可以按照Discord的要求(如:. SuppressEmbeds | SuppressNotifications 应添加 SuppressEmbeds 发送信件 SuppressNotifications) (中文(简体) ). 其他旗帜投出错误 .
许可证
本项目根据以下规定获得许可证: MIT 许可证。 。 。 .