簡體   English   中英

ES6-用替換包裝console.log()

[英]ES6 - Wrapping console.log() with substitutions

我有一個自定義記錄器,在輸出到控制台時會添加額外的格式。

class Logger {

    Log(moduleId, message, ...args) {
        var d = new Date(),
            h = (d.getHours()<10?'0':'') + d.getHours(),
            m = (d.getMinutes()<10?'0':'') + d.getMinutes(),
            s = (d.getSeconds()<10?'0':'') + d.getSeconds();
        var timestamp = h + ":" + m + ":" + s;

        console.log('[%s | %s] - %s', timestamp, moduleId, message, ...args);
    }

}

var instance = new Logger();
module.exports = instance;

然后將其稱為:

Logger.Log('Web', 'Request %s completed in %dms MS', url, new Date() - benchmark);

預期的結果將是

[20:03:30 | Web] - Request http://example.com completed in 193dms MS

但是,輸出是

[20:03:30 | Web] - Request %s completed in %dms MS http://example.com 193

看來我當前的實現破壞了console.log()的令牌替換機制。 為什么會發生這種情況,我該如何解決?

嘗試替換您的字符串console.log('[%s | %s] - %s', timestamp, moduleId, message, ...args);

console.log(`[${timestamp} | ${moduleId}] - ${message}`, ...args);

您不能在替換標記的string中使用替換。 最好的辦法是使用string串聯來構造傳遞給console.log的第一個參數。

這是一個例子。

 class Logger { static Log(moduleId, message, ...args) { var d = new Date(), h = (d.getHours()<10?'0':'') + d.getHours(), m = (d.getMinutes()<10?'0':'') + d.getMinutes(), s = (d.getSeconds()<10?'0':'') + d.getSeconds(); var timestamp = h + ":" + m + ":" + s; console.log('[%s | %s] - ' + message, timestamp, moduleId, ...args); } } Logger.Log('Web', 'Request %s completed in %dms MS', "https://....", 10); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM