当前位置: 首页 > news >正文

seo基础培训机构seo是什么的简称

seo基础培训机构,seo是什么的简称,高端企业网站建站程序,番禺网站排名优化公司众所周知,nest是自带日志的。但是好像没有log4j香,所以咱们来用log4j吧~ 我只演示最简单的用法,用具体怎么样用大家可以自己进行封装。就像前端封装自己的请求一样。 一、安装 yarn add log4js stacktrace-js 二、使用 主要就三个文件&a…

众所周知,nest是自带日志的。但是好像没有log4j香,所以咱们来用log4j吧~

我只演示最简单的用法,用具体怎么样用大家可以自己进行封装。就像前端封装自己的请求一样。

一、安装

yarn add log4js stacktrace-js

二、使用

主要就三个文件:配置log4j文件、中间件文件、main.ts

配置log4j文件:src/utils/log4j.ts

import * as Path from 'path';
import * as Log4js from 'log4js';
import * as Util from 'util';
import * as Moment from 'moment'; // 处理时间的工具
import * as StackTrace from 'stacktrace-js';
import Chalk from 'chalk';
import config from '../config/log4js';// 日志级别
export enum LoggerLevel {ALL = 'ALL',MARK = 'MARK',TRACE = 'TRACE',DEBUG = 'DEBUG',INFO = 'INFO',WARN = 'WARN',ERROR = 'ERROR',FATAL = 'FATAL',OFF = 'OFF',
}// 内容跟踪类
export class ContextTrace {constructor(public readonly context: string,public readonly path?: string,public readonly lineNumber?: number,public readonly columnNumber?: number,) {}
}Log4js.addLayout('Awesome-nest', (logConfig: any) => {return (logEvent: Log4js.LoggingEvent): string => {let moduleName = '';let position = '';// 日志组装const messageList: string[] = [];logEvent.data.forEach((value: any) => {if (value instanceof ContextTrace) {moduleName = value.context;// 显示触发日志的坐标(行,列)if (value.lineNumber && value.columnNumber) {position = `${value.lineNumber}, ${value.columnNumber}`;}return;}if (typeof value !== 'string') {value = Util.inspect(value, false, 3, true);}messageList.push(value);});// 日志组成部分const messageOutput: string = messageList.join(' ');const positionOutput: string = position ? ` [${position}]` : '';const typeOutput = `[${logConfig.type}] ${logEvent.pid.toString()}   - `;const dateOutput = `${Moment(logEvent.startTime).format('YYYY-MM-DD HH:mm:ss',)}`;const moduleOutput: string = moduleName? `[${moduleName}] `: '[LoggerService] ';let levelOutput = `[${logEvent.level}] ${messageOutput}`;// 根据日志级别,用不同颜色区分switch (logEvent.level.toString()) {case LoggerLevel.DEBUG:levelOutput = Chalk.green(levelOutput);break;case LoggerLevel.INFO:levelOutput = Chalk.cyan(levelOutput);break;case LoggerLevel.WARN:levelOutput = Chalk.yellow(levelOutput);break;case LoggerLevel.ERROR:levelOutput = Chalk.red(levelOutput);break;case LoggerLevel.FATAL:levelOutput = Chalk.hex('#DD4C35')(levelOutput);break;default:levelOutput = Chalk.grey(levelOutput);break;}return `${Chalk.green(typeOutput)}${dateOutput}  ${Chalk.yellow(moduleOutput,)}${levelOutput}${positionOutput}`;};
});// 注入配置
Log4js.configure(config);// 实例化
const logger = Log4js.getLogger();
logger.level = LoggerLevel.TRACE;export class Logger {static trace(...args) {logger.trace(Logger.getStackTrace(), ...args);}static debug(...args) {logger.debug(Logger.getStackTrace(), ...args);}static log(...args) {logger.info(Logger.getStackTrace(), ...args);}static info(...args) {logger.info(Logger.getStackTrace(), ...args);}static warn(...args) {logger.warn(Logger.getStackTrace(), ...args);}static warning(...args) {logger.warn(Logger.getStackTrace(), ...args);}static error(...args) {logger.error(Logger.getStackTrace(), ...args);}static fatal(...args) {logger.fatal(Logger.getStackTrace(), ...args);}static access(...args) {const loggerCustom = Log4js.getLogger('http');loggerCustom.info(Logger.getStackTrace(), ...args);}// 日志追踪,可以追溯到哪个文件、第几行第几列static getStackTrace(deep = 2): string {const stackList: StackTrace.StackFrame[] = StackTrace.getSync();const stackInfo: StackTrace.StackFrame = stackList[deep];const lineNumber: number = stackInfo.lineNumber;const columnNumber: number = stackInfo.columnNumber;const fileName: string = stackInfo.fileName;const basename: string = Path.basename(fileName);return `${basename}(line: ${lineNumber}, column: ${columnNumber}): \n`;}
}

中间件文件:src/middleware/logger.middleware.ts

import { Request, Response } from 'express';
import { Logger } from '../utils/log4js';// 函数式中间件
export function logger(req: Request, res: Response, next: () => any) {const code = res.statusCode; // 响应状态码next();// 组装日志信息const logFormat = ` >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>请求参数Request original url: ${req.originalUrl}Method: ${req.method}IP: ${req.ip}Status code: ${code}Parmas: ${JSON.stringify(req.params)}Query: ${JSON.stringify(req.query)}Body: ${JSON.stringify(req.body,)} \n  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>`;// 根据状态码,进行日志类型区分if (code >= 500) {Logger.error(logFormat);} else if (code >= 400) {Logger.warn(logFormat);} else {Logger.access(logFormat);Logger.log(logFormat);}
}

main.ts

import { logger } from './middleware/logger.middleware';async function bootstrap() {const app = await NestFactory.create(AppModule, { logger: console });app.use(logger);
}
bootstrap();

然后就可以记录日志辣~稍微详细一点的可以参考这位老哥的:https://blog.csdn.net/fwzzzzz/article/details/116160816

http://www.ds6.com.cn/news/87162.html

相关文章:

  • 一个帮你赚钱的网站是谁做的广告深圳百度开户
  • 南昌网站建设服务器媒体推广
  • 宁波做网站有哪些公司公司百度搜索引擎网址格式
  • 怎么看出是模板网站360搜索引擎
  • 建设评标专家在哪个网站阜平网站seo
  • 眉山建设局网站百度云盘资源
  • 日本人文艺术欣赏ppt优化法治化营商环境
  • 西安网页设计制作介绍关键词seo排名优化如何
  • 做网站架构图百度关键词购买
  • 两学一做网站视频淘宝店铺转让价格表
  • 洛阳网站推广方式百度网站电话是多少
  • 佛山企业网站建设公司企业广告宣传
  • 教您如何申请企业邮箱win7优化大师好不好
  • 网站设计制作报告百度网站网址是多少
  • 织梦网站空间如何清理客服系统网页源码2022免费
  • win不用iis做网站站点搜索
  • 网站+做内容分发资格湖南疫情最新消息今天
  • wordpress随机注册seo诊断报告
  • 做网站所需知识百度推广运营工作是什么
  • wordpress后台运行速度慢新网seo关键词优化教程
  • 网站翻页模板优化公司排名
  • Ul设计网站推广普通话心得体会
  • 做投资的网站好百度seo排名
  • 济南建网站公司价格微网站
  • 怎么找人做网站啊营销网站方案设计
  • 昆明餐饮网站建设seo基础篇
  • 精美ppt模板下载免费seo推广的网站和平台有哪些
  • 网站建设咨询公司哪里可以建网站
  • 喀什做网站关键词排名哪里查
  • 建个企业网站对公司宣传有用吗seo是什么职业岗位