@liuchuana/logger
Version:
logger是一个轻量,实用和客户端级的前端日志记录工具。
1 lines • 3.09 kB
JavaScript
!function(e,o){"object"==typeof exports&&"undefined"!=typeof module?module.exports=o():"function"==typeof define&&define.amd?define(o):(e="undefined"!=typeof globalThis?globalThis:e||self).Logger=o()}(this,(function(){"use strict";return class{constructor(){this.tempLogs=[];const e=indexedDB.open("logger");e.onsuccess=e=>{const o=e.target.result;this.db=o},e.onupgradeneeded=e=>{const o=e.target.result;o.objectStoreNames.contains("logs")||o.createObjectStore("logs",{autoIncrement:!0})}}logToDB(e,o){const r={createTime:this.getCurrentDateTime(),msgs:e,level:o,source:window.location.href};if(!this.db)return void this.tempLogs.push(r);const t=this.db.transaction("logs","readwrite").objectStore("logs"),n=t.add(r);this.tempLogs.length&&(this.tempLogs.map((e=>{t.add(e)})),this.tempLogs=[]),n.onsuccess=()=>{},n.onerror=r=>{console.error(`Error logging ${o} - ${e}`,r)}}log(e,...o){console.info("Logger[LOG]:",e,...o),this.logToDB([e,...o],"LOG")}info(e,...o){console.info("Logger[INFO]:",e,...o),this.logToDB([e,...o],"INFO")}warn(e,...o){console.info("Logger[WARN]:",e,...o),this.logToDB([e,...o],"WARN")}error(e,...o){console.info("Logger[ERROR]:",e,...o),this.logToDB([e,...o],"ERROR")}getAllLogs(){return new Promise(((e,o)=>{if(!this.db)return console.error("IndexedDB is not available."),void o("IndexedDB is not available.");const r=this.db.transaction("logs","readonly").objectStore("logs"),t=[],n=r.openCursor();n.onsuccess=o=>{const r=o.target.result;r?(t.push(r.value),r.continue()):e(t)},n.onerror=e=>{console.error("Error retrieving logs",e),o("Error retrieving logs")}}))}getLogsByLevel(e){return new Promise(((o,r)=>{if(!this.db)return console.error("IndexedDB is not available."),void r("IndexedDB is not available.");const t=this.db.transaction("logs","readonly").objectStore("logs"),n=[],s=t.index("level").openCursor(IDBKeyRange.only(e));s.onsuccess=e=>{const r=e.target.result;r?(n.push(r.value),r.continue()):o(n)},s.onerror=e=>{console.error("Error retrieving logs",e),r("Error retrieving logs")}}))}getCountOfAllLogs(){return new Promise(((e,o)=>{if(!this.db)return console.error("IndexedDB is not available."),void o("IndexedDB is not available.");const r=this.db.transaction("logs","readonly").objectStore("logs").count();r.onsuccess=o=>{const r=o.target.result;e(r)},r.onerror=e=>{console.error("Error retrieving log count",e),o("Error retrieving log count")}}))}getCountOfLogsByLevel(e){return new Promise(((o,r)=>{if(!this.db)return console.error("IndexedDB is not available."),void r("IndexedDB is not available.");const t=this.db.transaction("logs","readonly").objectStore("logs").index("level").count(IDBKeyRange.only(e));t.onsuccess=e=>{const r=e.target.result;o(r)},t.onerror=e=>{console.error("Error retrieving log count",e),r("Error retrieving log count")}}))}pushLogs(){}getCurrentDateTime(){const e=new Date;return`${e.getFullYear()}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")} ${String(e.getHours()).padStart(2,"0")}:${String(e.getMinutes()).padStart(2,"0")}:${String(e.getSeconds()).padStart(2,"0")}`}}}));