如何解决winston 未知记录器级别:未定义
我使用 winston
来记录错误,在生产中它记录到文件,在开发中它记录到 console
。我还设置了其他日志传输,即用于将错误发送到 slack 的自定义传输。
下面是我的logger.js
const expressWinston = require('express-winston');
const { createLogger,format,transports } = require('winston');
const SlackAPIAccessDevTransport = require('./winston-slack');
const accessLogger = expressWinston.logger({
transports: [
new SlackAPIAccessDevTransport(),],format: format.combine(
format.colorize(),format.json(),),});
const logToFile = createLogger({
transports: [
new transports.File({
json: true,maxFiles: 5,level: 'error',colorize: false,filename: 'logs/error.log',maxsize: 5242880,// 5MB
}),});
const logToConsole = createLogger({
level: 'info',transports: [
new transports.Console({
format: format.combine(
format.colorize(),format.simple(),}),});
module.exports = {
logToFile,logToConsole,accessLogger,};
记录到文件工作正常,但对于 Console
传输,我得到 level undefined
这是我的错误中间件。
const Logger = require('../utils/logger');
module.exports = async (err,req,res,next) => {
// log any kind of error
console.log(err);
const errorData = {
date: new Date().toISOString(),env: process.env.NODE_ENV,name: err.name,message: err.message,api: req.url,method: req.method,stack: err.stack,body: req.body,client: req.connection.remoteAddress,};
if (process.env.NODE_ENV === 'production') {
Logger.logToFile.log(errorData);
} else {
Logger.logToConsole.log(err);
}
return res.status(500).send('Something went wrong!');
}
解决方法
您需要使用 format.errors。
import { useLayoutEffect,useRef } from 'react';
const isBrowser = typeof window !== `undefined`;
const getScrollPosition = ({ element,useWindow }) => {
if (!isBrowser) return { x: 0,y: 0 };
const target = element ? element.current : document.body,position = target.getBoundingClientRect();
return useWindow
? { x: window.scrollX,y: window.scrollY }
: { x: position.left,y: position.top };
};
export const useScrollPosition = (effect,deps,element,useWindow,wait) => {
const position = useRef(getScrollPosition({ useWindow }));
let throttleTimeout = null;
const callBack = () => {
const currentPosition = getScrollPosition({ element,useWindow });
effect({ previousPosition: position.current,currentPosition: currentPosition });
position.current = currentPosition;
throttleTimeout = null;
};
useLayoutEffect(() => {
const handleScroll = () => {
if (wait && !throttleTimeout) throttleTimeout = setTimeout(callBack,wait);
else callBack();
};
window.addEventListener(`scroll`,handleScroll);
return () => window.removeEventListener(`scroll`,handleScroll);
},deps);
};
格式允许您将 JavaScript 错误的实例直接传递给记录器。它允许您指定是否不包括堆栈跟踪。
此外,最好为 import { useScrollPosition } from '/path/to/useScrollPosition/useScrollPosition';
日志添加自定义格式。
例如
errors
结果:
error
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。