g***@leiyankeji.com
g***@leiyankeji.com
  • 发布:2021-04-25 16:55
  • 更新:2021-04-25 16:55
  • 阅读:434

logger.js (改自:https://ext.dcloud.net.cn/plugin?id=3938#rating)

分类:uni-app

/**  
 * js 日期格式化  
 * 传时间戳参数进行时间戳转换,不传时返回当前时间(返回年月日时分秒格式)  
 * @param {Object} timeStamp 时间戳参数 非必传  
 * @param {Object} format 格式化样式 非必传  
 */  
function getTimeStampDatetime(format = 'yyyy-MM-dd HH:mm:ss', timeStamp) {  
    let nowDatetime = new Date()  
    timeStamp ? nowDatetime = new Date(timeStamp) : nowDatetime = new Date()  
    return nowDatetime.Format(format)  
}  
Date.prototype.Format = function(fmt) {  
    var o = {  
        "M+": this.getMonth() + 1, //月份   
        "d+": this.getDate(), //日   
        "H+": this.getHours(), //小时   
        "m+": this.getMinutes(), //分   
        "s+": this.getSeconds(), //秒   
        "q+": Math.floor((this.getMonth() + 3) / 3), //季度   
        "S": this.getMilliseconds() //毫秒   
    };  
    if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));  
    for (var k in o)  
        if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) : (("00" + o[  
            k]).substr(("" + o[k]).length)));  
    return fmt;  
}  

// 获取日志文件信息  
function getLogFileInfo() {  
    // 今日日期  
    let nowDate = getTimeStampDatetime("yyyy-MM-dd")  
    // 当前时间精确到秒  
    let nowTime = getTimeStampDatetime("HH:mm:ss")  
    // 文件名称  
    const fileName = 'log.' + nowDate  
    // 内容前缀  
    const linePrefix = nowTime + ' '  
    const lineSuffix = "\r\n"  
    return {  
        fileName,  
        linePrefix,  
        lineSuffix  
    }  
}  

/**  
 * 日志内容输出并写入文件  
 * 文件写入手机地址,华为Android/data/应用包名/documents/app-log/xxxx  
 * @param {string} text 写入日志的内容  
 * @param {boolean} isError  是否错误  
 */  
function log(text, isError) {  
    const fileInfo = getLogFileInfo()  
    let content = fileInfo.linePrefix + text + fileInfo.lineSuffix  
    isError && (content = '#error# ' + content)  
    isError ? console.error(text) : console.log(text)  
    //#ifndef APP-PLUS  
    return  
    //#endif  
    plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) {  
        // 可通过fs操作PUBLIC_DOCUMENTS文件系统   
        // 创建日志文件夹  
        fs.root.getDirectory("app-log", {  
            create: true,  
            exclusive: false  
        }, function(dir) {  
            // 创建或写入文件  
            console.log("Directory Entry Name: " + dir.fullPath + fileInfo.fileName);  
            dir.getFile(fileInfo.fileName, {  
                create: true,  
            }, function(fileEntry) {  
                // 找到文件准备写入操作  
                fileEntry.file(function(file) {  
                    // create a FileWriter to write to the file  
                    fileEntry.createWriter(function(writer) {  
                        // Write data to file.  
                        writer.seek(file.size)  
                        writer.write(content)  
                    }, function(e) {  
                        console.error("日志写入错误", error)  
                    });  
                });  
            });  
        }, function(err) {  
            console.error("文件夹创建失败", err)  
        });  

    }, function(error) {  
        console.error("文件系统进入错误", error)  
    });  
}  

function logFileNames() {  
    const func = (resolve, reject) => {  
        plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) {  
            fs.root.getDirectory("app-log", {  
                create: false,  
                exclusive: false  
            }, function(dir) {  
                const directoryReader = dir.createReader();  
                directoryReader.readEntries( function( entries ){  
                    const names = entries.map(item => {  
                        return item.name  
                    })  
                    resolve(names)  
                }, function ( e ) {  
                    // alert( "Read entries failed: " + e.message );  
                    console.error("Read entries failed", e)  
                    reject(e)  
                } );  
            }, function(err) {  
                console.error("文件夹读取失败", err)  
                reject(err)  
            });  

        }, function(error) {  
            console.error("文件系统进入错误", error)  
            reject(error)  
        });  
    }  
    const promise = new Promise(func)  
    return promise  
}  

function logFileContent(fileName) {  
    const func = (resolve, reject) => {  
        plus.io.requestFileSystem(plus.io.PUBLIC_DOCUMENTS, function(fs) {  
            fs.root.getDirectory("app-log", {  
                create: false,  
                exclusive: false  
            }, function(dir) {  
                dir.getFile(fileName, {  
                    create: false  
                }, function(fileEntry) {  
                    fileEntry.file(function(file) {  
                        console.log('file', JSON.stringify(file))  
                        const reader = new plus.io.FileReader()  
                        console.log('reader', reader)  
                        reader.onloadend = function (e) {  
                            console.log( "Read success")  
                            // Get data  
                            console.log(e.target.result)  
                            resolve(e.target.result)  
                        };  
                        reader.onerror = function (e) {  
                            console.error(e)  
                            reject(e)  
                        }  
                        reader.onabort = function(e) {  
                            console.error(e)  
                            reject(e)  
                        }  
                        reader.readAsText(file) // 'utf-8'  
                    }, function(err) {  
                        console.error("获取文件数据对象失败", err)  
                        reject(err)  
                    });  
                }, function(err) {  
                    console.error("获取文件数据失败", err)  
                    reject(err)  
                });  
            }, function(err) {  
                console.error("文件夹创建失败", err)  
                reject(err)  
            });  

        }, function(error) {  
            console.error("文件系统进入错误", error)  
            reject(error)  
        });  
    }  
    return new Promise(func)  
}  

export default {  
    log,  
    logFileNames,  
    logFileContent,  
}  
0 关注 分享

要回复文章请先登录注册