Cordova-登录到文件

时间:2018-08-08 09:17:29

标签: cordova react-native react-android

我需要将所有日志写入文件,就像我们在服务器端编程中一样。我尝试使用cordova-plugin-logtofile,但无法安装。因此,我尝试直接写入文件like this

请查看我的代码。

logger.js

var loggerOb = null; 
var loggerFilePath = null; 
var loggerLevel = 4;

function logStr(logType, str, obj) {
    let time = new Date().getTime();
    return "[" + time + "] :: "+ logType + " :: " + str + " :: " + JSON.stringify(obj) + " \n";
}

function loggerWriteLog(str) {
    loggerOb.createWriter(function(fileWriter) {
      fileWriter.seek(fileWriter.length);
      var blob = new Blob([str], {type:'text/plain'});
      fileWriter.write(blob);
      console.log("Logger :: Ok, in theory i worked", str);
    }, function(err){
      console.log("Logger :: Failed to log ", err);
    });  
}

function loggerInit(log) {

    loggerFilePath = cordova.file.externalApplicationStorageDirectory;
    window.resolveLocalFileSystemURL(loggerFilePath, function(dir) {
        dir.getFile("log.txt", {create:true}, function(file) {
            console.log("Logger :: got the file", file);
            loggerOb = file;
            loggerWriteLog(log);
        });
    });
}

export default {

    debug(str, obj = {}) {
        var log =  logStr('debug', str, obj);
        if(loggerLevel >= 4) {
            if(loggerOb == null){
                loggerInit(log);
            } else {
                loggerWriteLog(log);
            }
        } 
    },

    info(str, obj = {}) {
        var log =  logStr('info', str, obj);
        if(loggerLevel >= 3) {
            if(loggerOb == null){
                loggerInit(log);
            } else {
                loggerWriteLog(log);
            }
        } 
    },

    warn(str, obj = {}) {
        var log =  logStr('warning', str, obj);
        if(loggerLevel >= 2) {
            if(loggerOb == null){
                loggerInit(log);
            } else {
                loggerWriteLog(log);
            }
        } 
    },

    error(str, obj = {}) {
        var log =  logStr('error', str, obj);
        if(loggerLevel >= 1) {
            if(loggerOb == null){
                loggerInit(log);
            } else {
                loggerWriteLog(log);
            }
        } 
    },

}

my_component.js

import logger from '../common/logger';
logger.info("test info")
logger.debug("test debug")
logger.error("test error")

这里我的问题是我只能写任何一行。

1 个答案:

答案 0 :(得分:0)

我同样有需要将所有cordova android应用程序的日志写入文件。

我所做的是一个钩子,该钩子将修补cordova活动和LOG.java文件以记录到文件中,而不仅仅是使用Android的默认日志系统。

如果不仅将javascript的日志(console.log)存储在文件中,而且还存储来自调用cordova LOG类的插件的其他日志,则具有优势。

问题在于,每次我更新cordova android平台版本时,我都必须检查钩子(为什么我仍在使用cordova 6的众多原因之一)。

如果您不想结束用日志填充所有磁盘,也应该谨慎使用一种logrotate系统。