alioth/before/cha/11-01=fastify-template/logger.js
2025-05-30 09:18:01 +08:00

92 lines
4.0 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// | ------------------------------------------------------------
// | @版本: 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', // 滚动时间 60s1m1h1d1w
path: logDirectory + '/debug',
size: '10M', // 用于指定单个日志文件的最大大小,如果该值超过限制,将自动创建一个新文件。如果未指定此项,则文件不会被分割。 B K M G
rotate: 7, // 保留日志文件的最大数量
// compress: 'gzip',
});
const warnStream = rfs.createStream('warn.log', {
interval: '1d', // 滚动时间 60s1m1h1d1w
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