console.log时间戳在Chrome?

有没有任何快速的方法让Chrome在console.log写入中输出时间戳(像Firefox那样)。还是预先new Date().getTime()是唯一的选项?

230219 次浏览

+new DateDate.now()是获取时间戳的可选方法

试试这个:

console.logCopy = console.log.bind(console);


console.log = function(data)
{
var currentDate = '[' + new Date().toUTCString() + '] ';
this.logCopy(currentDate, data);
};
< p > < br > < br > 或者这个,如果你想要一个时间戳:

console.logCopy = console.log.bind(console);


console.log = function(data)
{
var timestamp = '[' + Date.now() + '] ';
this.logCopy(timestamp, data);
};
< p > < br > < br > 以一种良好的方式记录不止一件事 而且(如对象树表示):

console.logCopy = console.log.bind(console);


console.log = function()
{
if (arguments.length)
{
var timestamp = '[' + Date.now() + '] ';
this.logCopy(timestamp, arguments);
}
};
< p > < br > < br > > (JSFiddle)

console.logCopy = console.log.bind(console);


console.log = function()
{
// Timestamp to prepend
var timestamp = new Date().toJSON();


if (arguments.length)
{
// True array copy so we can call .splice()
var args = Array.prototype.slice.call(arguments, 0);


// If there is a format string then... it must
// be a string
if (typeof arguments[0] === "string")
{
// Prepend timestamp to the (possibly format) string
args[0] = "%o: " + arguments[0];


// Insert the timestamp where it has to be
args.splice(1, 0, timestamp);


// Log the whole array
this.logCopy.apply(this, args);
}
else
{
// "Normal" log
this.logCopy(timestamp, args);
}
}
};

< br >

输出:

Sample output

附注:仅在Chrome中测试。

p.p.s.: Array.prototype.slice在这里并不完美,因为它将被记录为对象的数组,而不是对象的一系列。

这将向局部作用域添加一个“log”函数(使用this),使用任意多的参数:

this.log = function() {
var args = [];
args.push('[' + new Date().toUTCString() + '] ');
//now add all the other arguments that were passed in:
for (var _i = 0, _len = arguments.length; _i < _len; _i++) {
arg = arguments[_i];
args.push(arg);
}


//pass it all into the "real" log function
window.console.log.apply(window.console, args);
}

所以你可以使用它:

this.log({test: 'log'}, 'monkey', 42);

输出如下所示:

[Mon, 11 Mar 2013 16:47:49 GMT]对象{test: "log"} monkey 42

如果您使用谷歌Chrome浏览器,您可以使用Chrome控制台api:

  • 控制台。时间:在代码中你想要开始计时器的地方调用它
  • 控制台。timeEnd:调用它来停止计时器

这两个调用之间的运行时间显示在控制台中。

有关详细信息,请参阅文档链接:https://developers.google.com/chrome-developer-tools/docs/console

我使用Array.prototype.slicearguments转换为数组,以便我可以用我想添加的另一个数组 concat,然后将其传递给console.log.apply(console, /*here*/);

var log = function () {
return console.log.apply(
console,
['['+new Date().toISOString().slice(11,-5)+']'].concat(
Array.prototype.slice.call(arguments)
)
);
};
log(['foo']); // [18:13:17] ["foo"]

似乎arguments也可以被Array.prototype.unshifted,但我不知道这样修改是否是一个好主意/会有其他副作用

var log = function () {
Array.prototype.unshift.call(
arguments,
'['+new Date().toISOString().slice(11,-5)+']'
);
return console.log.apply(console, arguments);
};
log(['foo']); // [18:13:39] ["foo"]

也试试这个:

this.log = console.log.bind( console, '[' + new Date().toUTCString() + ']' );

此函数将时间戳、文件名和行号与内置console.log相同。

JSmyth对答案的改进:

console.logCopy = console.log.bind(console);


console.log = function()
{
if (arguments.length)
{
var timestamp = new Date().toJSON(); // The easiest way I found to get milliseconds in the timestamp
var args = arguments;
args[0] = timestamp + ' > ' + arguments[0];
this.logCopy.apply(this, args);
}
};

这样的:

  • 显示以毫秒为单位的时间戳
  • 假设一个格式字符串作为.log的第一个参数

在Chrome中,在控制台设置中有一个选项(按F1或选择开发人员工具->控制台→设置[右上角])命名为“显示时间戳”;这正是我所需要的

我刚找到。不需要其他肮脏的黑客破坏占位符和擦除代码中记录消息的地方。

Chrome 68+更新

“显示时间戳”;设置已经移动到“DevTools settings”的Preferences窗格中,在DevTools抽屉的右上角:

Show timestamps how-to picture .

如果你想保留行号信息(每个消息指向它的.log()调用,而不是所有指向我们的包装器),你必须使用.bind()。你可以通过console.log.bind(console, <timestamp>)提前一个额外的时间戳参数,但问题是你每次都需要重新运行这个来获得一个绑定了新时间戳的函数。 一种尴尬的方法是返回一个绑定函数:

function logf() {
// console.log is native function, has no .bind in some browsers.
// TODO: fallback to wrapping if .bind doesn't exist...
return Function.prototype.bind.call(console.log, console, yourTimeFormat());
}

然后必须与双重调用一起使用:

logf()(object, "message...")

但是,我们可以通过安装带有getter函数的财产来隐式地进行第一次调用:

var origLog = console.log;
// TODO: fallbacks if no `defineProperty`...
Object.defineProperty(console, "log", {
get: function () {
return Function.prototype.bind.call(origLog, console, yourTimeFormat());
}
});

现在你只需要调用console.log(...),它会自动添加一个时间戳!

> console.log(12)
71.919s 12 VM232:2
undefined
> console.log(12)
72.866s 12 VM233:2
undefined

你甚至可以用一个简单的log()来代替console.log(),通过执行Object.defineProperty(window, "log", ...)来实现这个神奇的行为。


请参阅https://github.com/pimterry/loglevel,以获得使用.bind()的出色的安全控制台包装,并带有兼容性回退。

参见https://github.com/eligrey/Xccessors获取从defineProperty()到遗留的__defineGetter__ API的兼容性回退。 如果这两个属性API都不起作用,则应该退回到每次都获得一个新的时间戳的包装器函数。(在这种情况下,你会丢失行号信息,但时间戳仍然会显示。


Boilerplate:我喜欢的时间格式:

var timestampMs = ((window.performance && window.performance.now) ?
function() { return window.performance.now(); } :
function() { return new Date().getTime(); });
function formatDuration(ms) { return (ms / 1000).toFixed(3) + "s"; }
var t0 = timestampMs();
function yourTimeFormat() { return formatDuration(timestampMs() - t0); }

您可以使用开发工具分析器。

console.time('Timer name');
//do critical time stuff
console.timeEnd('Timer name');

“定时器名称”必须相同。您可以使用多个具有不同名称的计时器实例。

我在大多数Node.JS应用程序中都有这个。它也适用于浏览器。

function log() {
const now = new Date();
const currentDate = `[${now.toISOString()}]: `;
const args = Array.from(arguments);
args.unshift(currentDate);
console.log.apply(console, args);
}

将非常漂亮的解决方案"with format string" from JSmyth扩展到支持

  • 所有其他__ABC0变化(__ABC1 __ABC2、__ABC3 __ABC4, error)
  • 包括时间戳字符串灵活性参数(例如09:05:11.518 vs. 2018-06-13T09:05:11.518Z)
  • 在浏览器中包括回退,以防console或其函数不存在

var Utl = {


consoleFallback : function() {


if (console == undefined) {
console = {
log : function() {},
debug : function() {},
info : function() {},
warn : function() {},
error : function() {}
};
}
if (console.debug == undefined) { // IE workaround
console.debug = function() {
console.info( 'DEBUG: ', arguments );
}
}
},




/** based on timestamp logging: from: https://stackoverflow.com/a/13278323/1915920 */
consoleWithTimestamps : function( getDateFunc = function(){ return new Date().toJSON() } ) {


console.logCopy = console.log.bind(console)
console.log = function() {
var timestamp = getDateFunc()
if (arguments.length) {
var args = Array.prototype.slice.call(arguments, 0)
if (typeof arguments[0] === "string") {
args[0] = "%o: " + arguments[0]
args.splice(1, 0, timestamp)
this.logCopy.apply(this, args)
} else this.logCopy(timestamp, args)
}
}
console.debugCopy = console.debug.bind(console)
console.debug = function() {
var timestamp = getDateFunc()
if (arguments.length) {
var args = Array.prototype.slice.call(arguments, 0)
if (typeof arguments[0] === "string") {
args[0] = "%o: " + arguments[0]
args.splice(1, 0, timestamp)
this.debugCopy.apply(this, args)
} else this.debugCopy(timestamp, args)
}
}
console.infoCopy = console.info.bind(console)
console.info = function() {
var timestamp = getDateFunc()
if (arguments.length) {
var args = Array.prototype.slice.call(arguments, 0)
if (typeof arguments[0] === "string") {
args[0] = "%o: " + arguments[0]
args.splice(1, 0, timestamp)
this.infoCopy.apply(this, args)
} else this.infoCopy(timestamp, args)
}
}
console.warnCopy = console.warn.bind(console)
console.warn = function() {
var timestamp = getDateFunc()
if (arguments.length) {
var args = Array.prototype.slice.call(arguments, 0)
if (typeof arguments[0] === "string") {
args[0] = "%o: " + arguments[0]
args.splice(1, 0, timestamp)
this.warnCopy.apply(this, args)
} else this.warnCopy(timestamp, args)
}
}
console.errorCopy = console.error.bind(console)
console.error = function() {
var timestamp = getDateFunc()
if (arguments.length) {
var args = Array.prototype.slice.call(arguments, 0)
if (typeof arguments[0] === "string") {
args[0] = "%o: " + arguments[0]
args.splice(1, 0, timestamp)
this.errorCopy.apply(this, args)
} else this.errorCopy(timestamp, args)
}
}
}
}  // Utl


Utl.consoleFallback()
//Utl.consoleWithTimestamps()  // defaults to e.g. '2018-06-13T09:05:11.518Z'
Utl.consoleWithTimestamps( function(){ return new Date().toJSON().replace( /^.+T(.+)Z.*$/, '$1' ) } )  // e.g. '09:05:11.518'

Chrome 98的更新如下:

设置→偏好→控制台→显示时间戳

enter image description here

Chrome 68:

“显示timestamps"移动到设置

前面控制台设置中的“显示时间戳”复选框已移动到设置

enter image description here

我最初是作为评论添加的,但我想添加一个截图,因为至少有一个人找不到这个选项(或者由于某种原因,它在他们的特定版本中不可用)。

在Chrome 68.0.3440.106(现在检入72.0.3626.121)我必须

  • 开放开发工具(F12)
  • 点击右上方的三点菜单
  • 点击设置
  • 在左侧菜单中选择Preferences
  • 在设置界面的控制台部分检查显示时间戳

设置>偏好比;控制台比;显示时间戳”> < / ></p></div>
                                                                            </div>
                                </div>
                            </div>
                        </div>
                                                <div class=

ES6解决方案:

const timestamp = () => `[${new Date().toUTCString()}]`
const log = (...args) => console.log(timestamp(), ...args)

其中timestamp()返回实际格式化的时间戳,而log添加一个时间戳,并将自己的所有参数传播到console.log

Chrome版本89.0.4389.90 (19.03.2021)

  1. 按F12。
  2. 找到并按下齿轮图标。
    < img src = " https://i.stack.imgur.com/oUtbM.png " alt = " 1 " / > < /李> <李>检查Show timestamps
    < img src = " https://i.stack.imgur.com/izlmy.png " alt = " 2 " / > < /李>