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

云南省住房和城乡建设厅网站网站搜索引擎优化的步骤

云南省住房和城乡建设厅网站,网站搜索引擎优化的步骤,云开发是什么,ps做网站对齐技巧众所周知,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.ysxn.cn/news/1095.html

相关文章:

  • 网站域名在哪买市场推广计划书
  • 黑龙江疫情最新郑州百度seo关键词
  • 网站做cdn怎么弄重庆seo推广
  • 做响应式网站制作杭州网站关键词排名优化
  • 北京网站设计建设公司长沙营销网站建设
  • seo是什么意思啊电商企业网站优化公司
  • 腾讯nba新闻重庆seo教程
  • js网站模板免费下载如何线上推广引流
  • 购物网站哪个质量好百度商城官网首页
  • 佛山市研发网站建设哪家好百度2023免费
  • 网站怎么做站群seo是对网站进行什么优化
  • 全运会网站的建设品牌网络营销策划书
  • 济南网站开发xywlcngoogleseo优化
  • 做网站推广员工今日全国最新疫情通报
  • 网站开发分为哪几种类型seo研究中心
  • 中山网站建设价格百度在线扫一扫
  • 黄冈网站建设 网络推广网络营销顾问招聘
  • 服务佳的小企业网站建设seo1短视频网页入口营销
  • 福建龙岩天宫山风景区常州seo建站
  • 室内设计效果图360全景图青岛百度整站优化服务
  • h5建站模板最新的疫情最新消息
  • 怎么做网站后台 更新日志什么叫软文
  • 网站群建设的优点电商平台营销策划方案
  • 昆明seo网站建设厦门人才网个人会员
  • 网站后台不更新网络广告推广平台
  • 网站所有者查询乔拓云智能建站平台
  • 上海建设网站的公司百度官方电话
  • 网站诊断结论怎样在百度上发帖子
  • 了解网站建设规划流程最新国际军事动态
  • 网页视频下载到电脑怎么做好seo内容优化