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

线下怎么做推广和宣传杭州seo排名收费

线下怎么做推广和宣传,杭州seo排名收费,如何找外贸公司合作,申请账号注册众所周知#xff0c;nest是自带日志的。但是好像没有log4j香#xff0c;所以咱们来用log4j吧~ 我只演示最简单的用法#xff0c;用具体怎么样用大家可以自己进行封装。就像前端封装自己的请求一样。 一、安装 yarn add log4js stacktrace-js 二、使用 主要就三个文件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.dnsts.com.cn/news/149222.html

相关文章:

  • 亚马逊网站类型山东最新资讯
  • 网站后台设置网站地图谷歌google官方网站
  • 做拼团网站北京免费网站制作
  • 镇江网站建设制作大同市建设工程质量监督站网站
  • 免费视频素材网站都有哪些有了网址可以建网站吗
  • 做竞价的网站做优化有效果吗广东
  • dede 网站目录建个企业网站收费
  • 建网站logo怎么做海外品牌推广
  • 帮别人设计网站的网站加强网站硬件建设方案
  • 织梦cms网站分页打不开北京做网站开发公司哪家好
  • 网站需要兼容哪些浏览器的网站建设
  • 河南外贸网站建设什么网站可以做字体效果好
  • 贵阳酒店网站建设做的网站客户拿去维违法
  • 网站营销目标网站怎么提高收录
  • 响应式布局网站尺寸泉州网上房地产
  • 上海帝程网站建设公司小白怎么做网站
  • 查询公司信息的网站seo公司如何优化
  • 安卓搭建网站制作网站的设计难点
  • 开厂做哪个网站比较好做网站和app哪个难
  • 如何在云服务器上开多几个网站网站信息核验单
  • 建设信用卡网站是什么青海住房城乡建设厅网站
  • 如何自己建设电商网站cms管理手机网站
  • 厦门市网站建设公司网站建设实训该写哪些内容
  • 公司网站建设东莞肇庆网站建设制作公司
  • 阿里巴巴外贸网站首页用js来做网站
  • 用微魔方做的网站一定要加公司怎么与网站进行活动推广
  • 做vr网站html网页设计代码范例
  • 农业网站怎么做百度推广百度关键词工具入口
  • 自己做的个人网站无法备案unity3d转行网站开发
  • 烟台html5网站建设html中文网站模板下载