【问题标题】:Cordova - Log to fileCordova - 记录到文件
【发布时间】:2025-12-24 11:45:12
【问题描述】:

我需要将所有日志写入文件,就像我们在服务器端编程中所做的那样。我尝试使用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")

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

【问题讨论】:

  • @skyline75489 你有什么想法
  • 你使用的是cordova还是react-native?两个都用得怎么样?
  • 我同时使用cordova和react native

标签: cordova react-native react-android


【解决方案1】:

我也有类似的需要,将我所有的 cordova android 应用程序的日志写入一个文件。

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

如果不仅 javascript 的日志 (console.log) 存储在文件中,而且来自调用 cordova LOG 类的插件的其他日志也存储在文件中,那么优势在于。

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

如果你不想用你的日志填满所有磁盘,你也应该小心使用一种 logrotate 系统。

【讨论】: