整合
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

92 lines
4.0 KiB

4 months ago
// | ------------------------------------------------------------
// | @版本: version 0.1
// | @创建人: 【Nie-x7129】
// | @E-mail: x71291@outlook.com
// | @所在项目: fastify-template
// | @文件描述: pino.js -
// | @创建时间: 2023-12-16 18:25
// | @更新时间: 2023-12-16 18:25
// | @修改记录:
// | -*-*-*- (时间--修改人--修改说明) -*-*-*-
// | =
// | ------------------------------------------------------------
import Pino from 'pino'
import pretty from 'pino-pretty'
import fs from 'fs'
import rfs from 'rotating-file-stream'
// 目录用于存放日志文件
const logDirectory = 'logs';
fs.existsSync(logDirectory) || fs.mkdirSync(logDirectory);
const debugStream = rfs.createStream('debug.log', {
interval: '1d', // 滚动时间 60s,1m,1h,1d,1w
path: logDirectory + '/debug',
size: '10M', // 用于指定单个日志文件的最大大小,如果该值超过限制,将自动创建一个新文件。如果未指定此项,则文件不会被分割。 B K M G
rotate: 7, // 保留日志文件的最大数量
// compress: 'gzip',
});
const warnStream = rfs.createStream('warn.log', {
interval: '1d', // 滚动时间 60s,1m,1h,1d,1w
path: logDirectory + '/warn',
size: '10M', // 用于指定单个日志文件的最大大小,如果该值超过限制,将自动创建一个新文件。如果未指定此项,则文件不会被分割。 B K M G
rotate: 7, // 保留日志文件的最大数量
// compress: 'gzip',
});
const streams = [
// {stream: fs.createWriteStream('logs/info.stream.out')},
{level: 'trace', stream: process.stdout },
{level: 'debug', stream: debugStream},
{level: 'warn', stream: warnStream}
]
const logger = new Pino({
// name: 'pino', // 记录器的名称。当设置时,会向记录的每个JSON行添加一个 name 字段。 | Default: undefined | name (String)
level: 'trace', // 最低日志记录等级 默认值Info | Default: 'info' | level (String)
// customLevels: {
// foo: 35
// }, // 自定义日志记录等级 | Default: undefined | customLevels (Object)
useOnlyCustomLevels: false, // 是否只使用自定义日志等级 | Default: false | useOnlyCustomLevels (Boolean)
depthLimit: 5, // 嵌套对象的深度 | Default: 5 | depthLimit (Number)
edgeLimit: 100, // * 看不懂 在使用循环引用记录特定对象/数组时限制属性/元素字符串化的选项。 | Default: 100 | edgeLimit (Number)
// msgPrefix: 'ACE', // 消息前缀 | Default: undefined | msgPrefix (String)
base: {
// A: '大王'
},// 基础消息
formatters: {
level: (label) => {
return {
level: label.toUpperCase().padEnd(5, ' ')
}
}
},
enabled: true, // 启用日志 | Default: true | enabled (Boolean)
crlf: false,// 设置为 true 以使用 \r\n 而不是 \n 记录换行分隔的JSON。 | Default: false | crlf (Boolean)
timestamp: () => `,"time":"${new Date(Date.now()).toISOString()}"`, // 启用或禁用在日志消息中包含时间戳。如果提供了一个函数,它必须同步返回时间的部分JSON字符串表示,例如 ,"time":1493426328206 (这是默认值)。 | Default: true | timestamp (Boolean | Function)
messageKey: 'MSG', // JSON对象中“message”的字符串键。 | Default: 'msg' | messageKey (String)
errorKey: 'ERROR', // JSON对象中“error”的字符串键。 | Default: 'err' | errorKey (String)
nestedKey: null, // 冲突字段的Key。 | Default: null | nestedKey (String)
}, Pino.multistream(streams, {
// levels: {
// silent: Infinity,
// fatal: 60,
// error: 50,
// warn: 50,
// info: 30,
// debug: 20,
// trace: 10
// }, // 将自定义日志级别定义作为对象传递给实例。
// dedupe: true, // 设置为 true ,只向级别更高的流发送日志。默认值: false
}))
//
// logger.info('AAAA')
// logger.trace('C')
// logger.debug('B')
export default logger