广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue打印错误日志问题
  • 606
分享到

Vue打印错误日志问题

Vue打印错误日志Vue打印日志Vue错误日志打印 2022-11-13 18:11:21 606人浏览 八月长安
摘要

目录vue3全局方法和静态配置文件的最佳实践Vue3全局方法最佳方案1.添加一个工具类,例如utils.ts2.这么用Vue3引入静态配置文件最佳方案Vue3全局方法方案二1.先吧全

Vue3全局方法和静态配置文件的最佳实践

Vue3中打印错误日志的最佳实践: 推荐引入全局自定义方法clog,任何地方打印任何类型

在Vue3.0中全局的方法一般有下面两个

  • 方式一 使用 app.config.globalProperties
  • 方式二 通过依赖和注入(provide 和 inject)来完成

但是这两种方法使用起来都非常的不方便

推荐如下方案

Vue3全局方法最佳方案

1.添加一个工具类,例如utils.ts

import moment from "moment";
// 判断对象,数组字符串是否为空,例如:  undefined , null , '' , '   ' , {}  , [] 全部判断为空
export function isNull(obj: any): boolean {
	if (obj === null || obj === undefined) {
		return true
	}
	if (typeof obj === 'object') {
		let JSON = JSON.stringify(obj)
		if (json === '{}') {
			return true
		}
		if (json === '[]') {
			return true
		}
		return false
	}
	let str = String(obj)
	if (str === 'undefined' || str === 'null' || str === '' || !str || !/[^\s]/.test(str)) {
		return true
	}
	return false
}
// 控制台日志,支持传一个参数(对象/字符串), 也支持传两个参数(标志,日志消息<可以是对象,可以是字符串>)
export function clog(flag, value: any = 'xxxxxxxxxxxxxxxxxxx=Default-value_override+xxxxxxxxxxxxxxxxx'): string {
	try {
		let tmp = ""
		// 如果value为默认值,则没有传递第二个参数,只处理第一个参数
		if (value === `xxxxxxxxxxxxxxxxxxx=Default-value_override+xxxxxxxxxxxxxxxxx`) {
			tmp = JSON.stringify(flag);
			console.log(tmp)
		} else if (isNull(value)) {
			tmp = JSON.stringify(flag);
			console.log(tmp + ":")
		} else if (isNull(flag)) {
			tmp = JSON.stringify(value);
			console.log(":" + tmp)
		} else {
			tmp = JSON.stringify(value);
			console.log(flag + ":" + tmp)
		}
		return tmp
	} catch (err) {
		console.log("log", err)
		return " 空对象或者空字符串 "
	}
}
// 日期格式化
export function dateFORMatter(str, isDate = false) {
	if (isNull(str)) return undefined
	if (isDate === true) {
		return moment(str).format(
			'YYYY-MM-DD'
		)
	} else {
		return moment(str).format(
			'YYYY-MM-DD HH:mm:ss'
		)
	}
}
//把日期字符串转换为纯数字,例如20191231235959
export function dateFormatterNumber(str, hasTime = true, hasSecond = true): string {
	let d = new Date(str);
	if (isNull(str)) {
		let d = new Date();
	}
	let year = d.getFullYear();
	let month = (d.getMonth() + 1) < 10 ? '0' + (d.getMonth() + 1) : (d.getMonth() + 1);
	let day = d.getDate() < 10 ? '0' + d.getDate() : d.getDate();
	if (hasTime) {
		let hour = d.getHours() < 10 ? '0' + d.getHours() : d.getHours();
		let minute = d.getMinutes() < 10 ? '0' + d.getMinutes() : d.getMinutes();
		let second = d.getSeconds() < 10 ? '0' + d.getSeconds() : d.getSeconds();
		console.log(year, month, day, year + "" + month + "" + day + "" + hour + "" + minute + "" + (hasSecond === true ? second : ""))
		return year + "" + month + "" + day + "" + hour + "" + minute + "" + (hasSecond === true ? second : "");
	} else {
		return year + "" + month + "" + day;
	}
}
//表单校验
export async function validate(ref: any) {
  if (ref == null) {
    return true
  }
  let isValidate = true
  await ref.validate((valid, fields) => {
    if (valid) {
    } else {
      isValidate = false
      console.log('validate false!', fields)
    }
  })
  return isValidate
}
// 节流
export function throttle(this: any, fn: Function, interval = 500) {
	let last = 0;
	return (...args) => {
		let now = +new Date();
		// 还没到时间
		if (now - last < interval) return;
		last = now;
		fn.apply(this, args);
	};
}
export function html2Escape(sHtml: string) {
	const dict = { '<': '&lt;', '>': '&gt;', '&': '&amp;', '"': '&quot;' };
	return sHtml.replace(/[<>&"]/g, (c: string) => {
		return dict[c];
	});
}
//防抖动
let timestamp, timeout
export function debounce(func, wait, immediate) {
	let args, context, result
	const later = () => {
		// 距离上一次触发的时间间隔
		const last = (timestamp === undefined ? 0 : +new Date() - timestamp)
		// 上次被包装函数被调用时间间隔last小于设定时间间隔wait
		if (last < wait && last > 0) {
			//是否等待时间间隔达到后调用防抖 加上条件判断防止时间间隔内连续触发多个定时任务
			if (timeout == null) timeout = setTimeout(later, wait - last)
		} else {
			timeout = null
			// 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
			if (!immediate) {
				timestamp = +new Date()
				result = func.apply(context, args)
				if (!timeout) context = args = null
			}
		}
	}
	return later()
}

export function deepClone(source: any, noClone: string[] = []): any {
	if (!source && typeof source !== 'object') {
		throw new Error('error arguments deepClone')
	}
	const targetObj: any = source.constructor === Array ? [] : {}
	Object.keys(source).forEach((keys: string) => {
		if (source[keys] && typeof source[keys] === 'object' && noClone.indexOf(keys) === -1) {
			targetObj[keys] = deepClone(source[keys], noClone)
		} else {
			targetObj[keys] = source[keys]
		}
	})
	return targetObj
}

2.这么用

import { clog, isNull } from '@/utils'
clog(jsonObj)

Vue3引入静态配置文件最佳方案

1. 在public目录下面添加一个配置文件config.js

2. 在html.index文件中引入此文件

3. 在vue文件中直接访问就行

config.js

const config = {
  BaseapiUrl: 'Http://localhost:44311/',
  Version: '2.0.20220506',
}

html.index

<!DOCTYPE html>
<html lang="zh-cn">
  <head>
    <title>Vue3Vite</title>
    <script type="text/javascript" src="tools.js"></script>
    <script type="text/javascript" src="config.js"></script>
  </head>
  <body>
    <div id="app"></div>
    <script type="module" src="/src/main.js"></script>
  </body>
</html>

使用举例

import axiOS from 'axios'
// 创建axios对象,设置baseURL
const service = axios.create({
  baseURL: config.BaseApiUrl + '/', // 直接访问config对象即可
  timeout: 30000,
})
export default service

Vue3全局方法方案二

1.先吧全局方法写到tools.js文件中

tools.js

//动态创建vue对象
const mountPrintData = function (printData, vhtmlDivId = 'print') {
  clog('mountPrintData')
  clog(printData)
  const App = {
    data() {
      return {
        data: printData,
      }
    },
  }
  const app = Vue.createApp(App)
  app.mount('#' + vhtmlDivId)
}
// 控制台日志,支持传一个参数(对象/字符串), 也支持传两个参数(标志,日志消息<可以是对象,可以是字符串>)
const clog = function (flag, value = 'xxxxxxxxxxxxxxxxxxx=Default-value_override+xxxxxxxxxxxxxxxxx') {
  try {
    let tmp = ''
    // 如果value为默认值,则没有传递第二个参数,只处理第一个参数
    if (value === `xxxxxxxxxxxxxxxxxxx=Default-value_override+xxxxxxxxxxxxxxxxx`) {
      tmp = JSON.stringify(flag)
      console.log(tmp)
    } else if (isNull(value)) {
      tmp = JSON.stringify(flag)
      console.log(tmp + ':')
    } else if (isNull(flag)) {
      tmp = JSON.stringify(value)
      console.log(':' + tmp)
    } else {
      tmp = JSON.stringify(value)
      console.log(flag + ':' + tmp)
    }
    return tmp
  } catch (err) {
    console.log('log', err)
    return ' 空对象或者空字符串 '
  }
}
// 判断对象,数组,字符串是否为空,例如:  'undefined' , 'null' , '' , '   ' , {}  , [] 全部判断为空
const isNull = function (obj) {
  if (typeof obj === 'object') {
    let json = JSON.stringify(obj)
    if (json === '{}') {
      return true
    }
    if (json === '[]') {
      return true
    }
    return false
  }
  let str = String(obj)
  if (str === 'undefined' || str === 'null' || str === '' || !str || !/[^\s]/.test(str)) {
    return true
  }
  return false
}

2.在Index.html中引入

按如下引入后tools.js中的方法就可以在任何位置直接使用了

<script type="text/javascript" src="tools.js"></script>

3.在ts,js代码中直接使用

<template>
 ...
</template>
<script lang="ts">
export default {
  setup() {
    clog(`test`)  //直接使用
  }
}
</script>

Vue2中打印日志的最佳实践

在vue的单页面应用中建议在public目录添加如下的tools.js全局js静态方法

在index.html中这样引用:

<script type="text/javascript" src="tools.js"></script>

如此,在任何地方打印控制台日志就可以这么写: clog(xxx) xxx可以是字符串,也可以是对象。

PS: 打印json对象简单的方法: console.log(JSON.stringify(jsonObj))

tools.js

//判断对象,数组,字符串等是否为空
function isNull(obj){
	let str = String(obj)
	if (str === 'undefined' || str === 'null' || str === '' || !str || !/[^\s]/.test(str)) {
		return true
	}
	if (typeof obj === 'object') {
		let json = JSON.stringify(obj)
		if (json === '{}') {
			return true
		}
		if (json === '[]') {
			return true
		}
		return false
	} else {
		return false
	}
}
// 控制台日志,支持传一个参数(对象/字符串), 也支持传两个参数(标志,日志消息<可以是对象,可以是字符串>)
function clog(flag, value= 'xxxxxxxxxxxxxxxxxxx=Default-value_override+xxxxxxxxxxxxxxxxx') {
	try {
		// 如果value为默认值,则没有传递第二个参数,只处理第一个参数
		if (value === `xxxxxxxxxxxxxxxxxxx=Default-value_override+xxxxxxxxxxxxxxxxx`) {
			let tmp = JSON.stringify(flag);
			console.log(tmp)
		} else if (isNull(value)) {
			let tmp = JSON.stringify(flag);
			console.log(tmp + ":")
		} else if (isNull(flag)) {
			let tmp = JSON.stringify(value);
			console.log(":" + tmp)
		} else {
			let tmp = JSON.stringify(value);
			console.log(flag + ":" + tmp)
		}
	} catch (err) {
		console.log("log", err)
	}
}
//深拷贝对象
function copySelf(obj) {
  var newobj = obj.constructor === Array ? [] : {};
  if (typeof obj !== "object") {
    return;
  }
  for (var i in obj) {
    newobj[i] = typeof obj[i] === "object" ? copySelf(obj[i]) : obj[i];
  }
  return newobj;
}
//批量导入局部组件 (批量导入全局组件参见vue官网)
//使用方法 components: importComponents(require.context('./', false, /Yi.*\.vue$/)),  // 导入当前目录以"Yi" 开头,以".vue"结尾的全部组件
//require.context('./components', false, /Yi.*\.vue$/) : webpack的方法, 第一个参数为文件路径, 第二个参数为是否包含子文件夹, 第三个参数为正则
function importComponents(comps) {
  let res_components = {}
  comps.keys().forEach((fileName) => {
    let comp = comps(fileName)
    res_components[fileName.replace(/^\.\/(.*)\.\w+$/, '$1')] = comp.default
  })
  return res_components
}
//获取当前时间, 出参为格式化后的日期字符串
function timeNow() {
  var time = new Date();  // 程序计时的月从0开始取值后+1  
  var m = time.getMonth() + 1;
  var t = time.getFullYear() + "-" + m + "-" + time.getDate() + " " + time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds();
  return t;
}
//一天的开始, 入参为Date类型, 出参为格式化后的日期字符串
function timeDayBegin(time) {
  var m = time.getMonth() + 1;
  var t = time.getFullYear() + "-" + m + "-" + time.getDate() + " 00:00:00";
  return t;
}
//一天的结束, 入参为Date类型, 出参为格式化后的日期字符串
function timeDayEnd(time) {
  var m = time.getMonth() + 1;
  var t = time.getFullYear() + "-" + m + "-" + time.getDate() + " 23:59:59";
  return t;
}
//字符串数组转整型数字键
function strArr2IntArr(arrStr) {
  for (var i = 0; i < arrStr.length; i++) {
    arrStr[i] = parseFloat(arrStr[i])
  }
  return arrStr;
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Vue打印错误日志问题

本文链接: https://www.lsjlt.com/news/169669.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue打印错误日志问题
    目录Vue3全局方法和静态配置文件的最佳实践Vue3全局方法最佳方案1.添加一个工具类,例如utils.ts2.这么用Vue3引入静态配置文件最佳方案Vue3全局方法方案二1.先吧全...
    99+
    2022-11-13
    Vue打印错误日志 Vue打印日志 Vue错误日志打印
  • 如何解决springboot log4j2不能打印框架错误日志的问题
    这篇文章主要介绍如何解决springboot log4j2不能打印框架错误日志的问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!springboot log4j2为什么不能打印框架错误日志问题使用springboo...
    99+
    2023-06-20
  • Java项目中怎么打印错误日志
    这篇文章将为大家详细讲解有关Java项目中怎么打印错误日志,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1.上层系统引入的非法参数。对于非法参数引入的错误, 可以通过参数校验和前置条件校验来...
    99+
    2023-06-16
  • MySQL5.7中死锁打印到错误日志的方法
    这篇文章主要介绍MySQL5.7中死锁打印到错误日志的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!  在MySQL5.5及之前的版本中,查...
    99+
    2022-10-18
  • MySQL5.7新特性之错误日志打印到操作系统日志文件
     通常,MySQL将错误日志输出在hostname.err文件中,但MySQL5.7可以将错误日志打印到操作系统日志中,具体操作如下:  MySQL服务器启动的时候,mysqld_sa...
    99+
    2022-10-18
  • feign 打印日志不显示的问题及解决
    目录feign打印日志不显示feign基本使用Feign 概述Feign 入门案例Feign 工作原理feign打印日志不显示 1.是否有设置 feign 的 Logger.Leve...
    99+
    2022-11-13
  • 聊聊如何打印GC日志排查的问题
    目录如何打印GC日志排查问题先来看个示例那么上面打印出来的日志,具体是什么意思呢?小结一下gc日志打印时间戳如何打印GC日志排查问题 在工作当中,有时候我们会需要打印GC的相关信息来...
    99+
    2022-11-12
  • log4j配置失效日志中打印Debug信息问题
    目录log4j配置失效日志中打印Debug信息去除依赖的方法log4j日志的配置--Debuglog4j配置失效日志中打印Debug信息 最近发布项目的时候发现控制台打印的日志较往常...
    99+
    2022-11-12
  • 怎么使用thinkphp5将错误SQL语句打印到日志中
    这篇文章主要介绍了怎么使用thinkphp5将错误SQL语句打印到日志中的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用thinkphp5将错误SQL语句打印到日志中文章都会有所收获,下面我们一起来看看吧...
    99+
    2023-07-06
  • springboot log4j2不能打印框架错误日志的解决方案
    springboot log4j2为什么不能打印框架错误日志 问题 使用springboot时老的框架使用的是log4j2,为了兼容不能够使用logback,按照网上的教程导入了lo...
    99+
    2022-11-12
  • php如何打开错误日志
    这篇文章将为大家详细讲解有关php如何打开错误日志,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php有什么用php是一个嵌套的缩写名称,是英文超级文本预处理语言,它的语法混合了C、Java、Perl以及...
    99+
    2023-06-08
  • 解决python logging遇到的坑 日志重复打印问题
    python 中 logging模块 假如遇到 多线程 或者 多进程 或者在web框架中自定义logging的话(一个请求就是一个独立的线程)非常容易重复打印日志 和造成内存崩溃,所...
    99+
    2022-11-11
  • 源码分析SpringMvc日志打印被忽略输出问题
    目录1.写在前面2.问题引出3.截取源码分析4.截取问题处理1.写在前面 在java的开发过程中,涉及到java web的开发,基本上都是走spring这一套了。 我们之前一般来说,...
    99+
    2022-11-13
  • 聊聊配置 Nginx 访问与错误日志的问题
    目录配置Nginx访问日志配置错误日志日志文件的位置读取和理解Nginx日志文件Nginx是一个开放源代码的高性能HTTP和反向代理服务器,负责处理Internet上某些最大站点的负...
    99+
    2022-11-13
  • log4j配置失效日志中打印Debug信息问题怎么处理
    这篇文章将为大家详细讲解有关log4j配置失效日志中打印Debug信息问题怎么处理,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。log4j配置失效日志中打印Debug信息最近发布项目的时候发现控制台打印的...
    99+
    2023-06-22
  • PHP 日志打包索引,如何避免错误?
    在日常开发中,日志是一个非常重要的工具,它可以帮助我们快速定位问题,解决问题。而对于大型项目来说,日志量非常庞大,如果不加以处理,不仅会占用大量的磁盘空间,还会降低系统的性能。因此,我们需要对日志进行打包和索引,以避免错误的发生。 一、P...
    99+
    2023-09-18
    日志 打包 索引
  • 如何配置Nginx访问与错误日志
    这篇“如何配置Nginx访问与错误日志”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何配置Nginx访问与错误日志”文章吧...
    99+
    2023-06-30
  • ASP 日志框架 path:如何解决常见的问题和错误?
    在 ASP.NET 开发中,日志框架是非常重要的一部分。日志框架可以帮助开发者更好地跟踪代码中的错误和问题,并快速解决这些问题。ASP 日志框架 path 是一款常用的日志框架,本文将介绍如何解决 path 日志框架中的常见问题和错误。 ...
    99+
    2023-09-27
    日志 框架 path
  • Python日志打包load:如何避免常见的错误?
    日志是软件开发中不可或缺的一部分,它能够记录程序运行时产生的信息,以便后续调试和优化。在Python中,标准库提供了logging模块,方便开发者对日志进行管理。在实际开发中,我们常常需要将日志打包成文件进行存储,以便后续分析和使用。本文...
    99+
    2023-10-29
    日志 打包 load
  • Vue全局监测错误并生成错误日志实现方法介绍
    目录一、准备工作(1)规定错误码(2)设置错误处理函数(3)保存错误日志二、监听错误(1)JS错误与静态资源加载错误(2)Vue逻辑错误(3)请求错误与Promise错误三、效果演示...
    99+
    2022-11-13
    Vue全局监测错误 Vue生成错误日志
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作