控制台 console.log() 的乐趣

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 控制台 console.log() 的乐趣

如果你曾经开发过 Web 应用程序,那么你肯定熟悉console.log(...),这是一种将数据打印到控制台的方法;可用于调试、日志记录和测试。

这篇文章简要概述了可用于提升console.log(console)日志记录体验的 10 大技巧。

table

console.table() 方法将对象/数组打印为格式整齐的表。

console.table({
  '时间戳': new Date().getTime(),
  '操作系统': navigator['platform'],
  '浏览器': navigator['appCodeName'],
  '语言': navigator['language'],
});

image.png

group

使用console.group()将相关的控制台语句与可折叠部分组合在一起。

你可以选择通过传递字符串作为参数来为节指定标题。也可以在控制台中折叠和展开,但默认情况下也可以使用 groupCollapsed 而不是 group 来折叠节。你也可以在节中嵌套子节,但一定要记住用 groupEnd 结束每个组。

以下示例将输出一个打开的部分,其中包含一些信息

console.group('URL信息');
  console.log('协议', window.location.protocol);
  console.log('主机', window.origin);
  console.log('路径', window.location.pathname);
  console.groupCollapsed('Meta信息');
    console.log('提取日期', new Date().getTime());
    console.log('操作系统', navigator['platform']);
    console.log('浏览器', navigator['appCodeName']);
    console.log('语言', navigator['language']);
  console.groupEnd();
console.groupEnd();

image.png

带样式的日志

可以使用一些基本的 CSS 来设置日志输出的样式,例如颜色、字体、文本样式和大小。请注意,浏览器对此的支持变化很大。

例如,尝试运行以下命令:

css

console.log(
  '%cHello World!',
  'color: #f709bb; font-family: sans-serif; text-decoration: underline;'
);

可以得到以下输出:

image.png

挺好看的吧?还可以做更多的事情,改变字体,样式,背景颜色,添加一些阴影和一些曲线等等......

css

console.log(
    `\n%c海拥摸鱼小游戏🎮很好玩!🚀`, 
    'color:#0dd8d8; background:#0b1021; font-size:1.5rem; padding:0.15rem 0.25rem; margin: 1rem auto; font-family: Rockwell; border: 2px solid #0dd8d8; border-radius: 4px;font-weight: bold; text-shadow: 1px 1px 1px #00af87bf;'
);

image.png

还有更多样式原作者在开发人员仪表板中使用的类似内容,代码在这里

image.png

时间

另一种常见的调试技术是测量执行时间,以跟踪操作所需的时间。这可以通过使用console.time() 启动计时器并传入标签,然后使用相同的标签使用console.timeEnd()结束计时器来实现。你还可以使用console.timeLog()在长时间运行的操作中添加标记

ini

console.time("concatenation");
let output = "";
for (var i = 1; i <= 1e6; i++) {
  output += i;
}
console.timeEnd("concatenation");

makefile

concatenation: 1206ms - timer ended

image.png

还有一个非标准方法console.timeStamp(),它在性能选项卡中添加标记,因此你可以将代码中的点与时间轴中记录的其他事件(如绘制和布局事件)相关联。

断言

你可能只想在发生错误或特定条件为真或假时登录到控制台。这可以使用console.assert()来完成,除非第一个参数是false,否则它不会将任何内容记录到控制台。

第一个参数是要检查的布尔条件,后跟要打印的 0 个或多个数据点,最后一个参数是要输出的消息。Sowill 输出消息,因为第一个参数是。console.assert(false, 'Value was false')``false

ini

const errorMsg = 'the # is not even';
for (let num = 2; num <= 5; num++) {
  console.log(`the # is ${num}`);
  console.assert(num % 2 === 0, { num }, errorMsg);
}

image.png


计数

有没有发现自己手动递增一个数字进行日志记录?console.count()有助于跟踪执行某些内容的次数或输入代码块的频率。

你可以选择为计数器指定一个标签,以便管理多个计数器并使输出更清晰。

计数器将始终从 1 开始。你可以随时使用console.countReset()重置计数器,该计数器也采用可选的标签参数。

以下代码将递增数组中每个项目的计数器,最终值将为 8。

ini

const numbers = [1, 2, 3, 30, 69, 120, 240, 420];
numbers.forEach((name) => {
  console.count();
});

下面是标记计数器的示例输出。

image.png

如果使用值,则不会传入标签,而是为每个条件值提供一个单独的计数器。例如:

console.count(NaN);         // NaN: 1
console.count(NaN+3);       // NaN: 2
console.count(1/0);         // Infinity: 1
console.count(String(1/0)); // Infinity: 2

跟踪

在 JavaScript 中,我们经常使用深度嵌套的方法和对象。您可以使用console.trace()遍历堆栈跟踪,并输出调用了哪些方法以到达某个点。

image.png

你可以选择将数据也与堆栈跟踪一起输出。


dir

如果将大型对象记录到控制台,则可能会变得难以读取。console.dir()方法将以可扩展的树结构格式化它。

以下是目录样式控制台输出的示例:

image.png

你还可以使用console.dirxml()以类似的方式打印基于 XML 或 HTML 的树。


调试

你可能在应用中设置了一些日志记录,你在开发过程中依赖这些日志记录,但不希望用户看到。用console.debug()替换console.log日志语句就可以做到这一点,它的功能方式与大多数构建系统完全一样,但在生产模式下运行时会被剥离或禁用。


日志级别

你可能已经注意到浏览器控制台中有几个过滤器(信息、警告和错误),它们允许你更改记录数据的详细程度。要使用这些过滤器,只需使用以下方法之一切换日志语句:

  • console.info()- 用于日志记录的信息性消息,通常包括一个小的“i”和/或蓝色背景
  • console.warn()- 警告/非严重错误,通常包括三角感叹号和/或黄色背景
  • console.error()- 可能影响功能的错误,通常包括圆形感叹号和/或红色背景

在 Node 中.js在生产环境中运行时,不同的日志级别会被写入不同的流,例如 error() 将写入 stderr,而日志输出到stdout,但在开发过程中,它们都将正常显示在控制台中。


多值日志

控制台对象上的大多数函数将接受多个参数,因此你可以向输出添加标签,或一次打印多个数据点,例如:console.log('User: ', user.name);

但是,打印多个标记值的更简单方法是使用对象解构。例如,如果您有三个变量(例如x、y和z),您可以将它们作为一个对象进行记录,方法是将它们用大括号括起来,以便输出每个变量的名称和值,就像console.log({x,y,z});

image.png


日志字符串格式

如果需要构建要输出的格式化字符串,可以使用格式说明符使用 C 样式的 printf 执行此操作。

支持以下说明符:

  • %s- 字符串或任何其他类型转换为字符串
  • %d / %i- 整数
  • %f- 浮点型
  • %o- 使用最佳格式
  • %O- 使用默认格式
  • %c- 使用自定义格式

例如

console.log("Hello %s, welcome to the year %d!", "World", new Date().getFullYear());
// Hello World, welcome to the year 2022!

当然,你也可以使用模板文字来实现相同的目的,这对于较短的字符串可能更容易阅读。


clear

最后,当查找事件的输出时,你可能希望删除页面首次加载时记录到控制台的所有内容。这可以通过console.clear()来完成,它将清除所有内容,但也不会重置任何数据。

通常还可以通过单击 Bin 图标来清除控制台,以及使用筛选器文本输入进行搜索。


特殊浏览器方法

直接在浏览器控制台中运行代码时,你将可以访问几个速记方法,这些方法对于调试、自动化和测试非常有用。

其中最有用的是:

  • $()-Document.querySelector()的简写(选择DOM元素,jQuery-style!)
  • $$()- 同上,但selectAll用于在数组中返回多个元素
  • $_- 返回上次计算表达式的值
  • $0- 返回最近选择的 DOM 元素(在检查器中)
  • $1...$4 也可用于抓取以前选择的 UI 元素
  • $x()- 允许你使用 Xpath 查询选择 DOM 元素
  • keys()values() - Object.getKeys()的简写,将返回一个 obj 键或值的数组
  • copy()- 将内容复制到剪贴板
  • monitorEvents()- 每次触发给定事件时运行命令
  • 对于某些常见的控制台命令(如console.table()),你不需要键入前面的控制台。只需运行table()

还有更多控制台速记命令,这是一个完整列表

警告这些只能在开发工具控制台中工作,不适用于你的代码!


还有更多...

登录到控制台可以执行更多操作!有关更多信息,请查看MDN控制台文档Chrome 开发控制台文档

只是关于最佳实践的快速说明...

  • 定义 lint 规则,以防止任何控制台.log语句合并到主分支中
  • 编写一个包装函数来处理日志记录,这样你就可以根据环境启用/禁用调试日志,以及使用适当的日志级别,并应用任何格式。这也可用于与第三方日志记录服务集成,仅在一个位置进行代码更新
  • 切勿记录任何敏感信息,浏览器日志可以被任何已安装的扩展程序捕获,因此不应被视为安全
  • 始终使用正确的日志级别(info, warn, error),以使过滤和禁用更容易
  • 遵循一致的格式,以便在需要时可以由计算机解析日志
  • 始终用英语编写简短、有意义的日志消息
  • 在日志中包含上下文或类别
  • 不要过度,只记录有用的信息



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
SQL IDE Java
IDEA控制台如何查看格式化的SQL(MyBatis Log插件)
IDEA控制台如何查看格式化的SQL(MyBatis Log插件)
1490 0
webpack 打包去掉控制台的console.log()
webpack 打包去掉控制台的console.log()
933 0
webpack 打包去掉控制台的console.log()
|
6月前
|
JavaScript 前端开发 开发者
控制台居然可以这么玩?五分钟带你上手ANSI指令,实现一个log工具包
控制台居然可以这么玩?五分钟带你上手ANSI指令,实现一个log工具包
89 1
|
8月前
|
测试技术 Python
pycharm使用pytest运行测试用例,无法在控制台输出print语句、log语句的解决办法
pycharm使用pytest运行测试用例,无法在控制台输出print语句、log语句的解决办法
519 1
控制台输出信息console.log()的用法总结
控制台输出信息console.log()的用法总结
222 0
console.log控制台里怎么输出图片
console.log控制台里怎么输出图片
171 0
console.log控制台里怎么输出图片
在控制台上看苹果手机的LOG
在控制台上看苹果手机的LOG
120 0
|
监控
日志服务(Log service)5月控制台更新指南
概览 日志查询分析框全面增强 SLB日志分发支持国内Region,仪表盘优化 支持数据永久保存 图表属性相关开放国际站和日本站 可视化图形细节提升 部分已知bug修复 日志查询分析框全面增强 提升可视区域,支持换行编辑查询分析语句 关键字、操作符、函数高亮,查询分析语句更加易读 交互式编辑体验,关键字、200+内置函数以及字段索引自动提升,提升你的编辑体验 SLB日志分发支持国内Region,仪表盘优化 SLB日志分发功能目前已经支持所有的国内Region项目进行分发,优化了默认的字段索引以及仪表盘,欢迎试用。
1440 0
|
Web App开发 监控 对象存储
日志服务(Log service)4月控制台更新指南
概览 查询界面全新视图 支持查询页面以及仪表盘页面内嵌 支持OSS访问日志向导以及安骑士访问日志向导 时间选择器全面加强 部分细节优化和已知bug修复 一.查询界面全新视图 左侧标签页替换为资源树状结构,直接展示用户的日志库、快速查询和仪表盘列表。
2397 0