Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;log4javascript";要存储在本地文件中的记录器_Javascript_Client_Log4javascript - Fatal编程技术网

&引用;log4javascript";要存储在本地文件中的记录器

&引用;log4javascript";要存储在本地文件中的记录器,javascript,client,log4javascript,Javascript,Client,Log4javascript,我们目前正在使用log4javascript popUpAppender控制台进行开发,并希望将详细信息存储到本地文件中 虽然我们可以使用AjaxAppender将日志消息发送到服务器,并将这些消息记录到使用滚动文件appender设置的log4j中,但我们正在寻找一种使用类似于Log4js中FileAppender的方法 有什么想法/建议吗 这与 因为我们已经实现了log4javascript,所以我们希望使用相同的框架 为IE和Firefox添加FileAppender解决方案 funct

我们目前正在使用log4javascript popUpAppender控制台进行开发,并希望将详细信息存储到本地文件中

虽然我们可以使用AjaxAppender将日志消息发送到服务器,并将这些消息记录到使用滚动文件appender设置的log4j中,但我们正在寻找一种使用类似于Log4js中FileAppender的方法

有什么想法/建议吗


这与

因为我们已经实现了log4javascript,所以我们希望使用相同的框架

为IE和Firefox添加FileAppender解决方案

function FileAppender() {}

FileAppender.prototype = new log4javascript.Appender();

FileAppender.prototype.layout = new log4javascript.SimpleLayout();

FileAppender.prototype.append = function(loggingEvent) {

  var appender = this;

     var getFormattedMessage = function() {
    var layout = appender.getLayout();
     var formattedMessage = layout.format(loggingEvent);
      if (layout.ignoresThrowable()) {
          formattedMessage += loggingEvent.getThrowableStrRep();
      }
      return formattedMessage;
    };
    writefile = function(destinationFile, message) {
     if (isEmpty(destinationFile)) {
         log.error("Source location unknown");
         return;
    }
    if ($.browser.msie) {
        try {
        var fso = new ActiveXObject("Scripting.FileSystemObject");
        var file = fso.OpenTextFile(destinationFile, 8, true);
        file.WriteLine(message);
        file.close();
        } catch (e) {
        log.error("Please validate if file exist");
        }
    } else {
        netscape.security.PrivilegeManager
            .enablePrivilege("UniversalXPConnect");
        this.fso.initWithPath(destinationFile);
        if (!this.fso.exists()) {
        // create file if needed
        this.fso.create(0x00, 0600);
        }

        var file = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
        file.init(this.fso, 0x04 | 0x08 | 0x10, 064, 0);
        var line = message;
        file.write(line, line.length); // write data
        file.close();
    }
    };
    getFile = function() {
    return "c://temp//log//Javascriptlog.log";
    };
    writefile(getFile(), getFormattedMessage());
};

FileAppender.prototype.toString = function() {
    return "FileAppender";
};

log4javascript.FileAppender = FileAppender;

在我看来,这在浏览器中仍然不可行。我又看了一眼;以下是我的观察:

  • 在Firefox中,我认为目前根本不可能写入本地文件系统,即使用户同意。从Firefox17(我想),它排除了在网络上浮动的旧方法(例如)

  • IE仍然有自己的ActiveX方法来实现这一点,但它比以往任何时候都更加锁定,需要用户执行各种操作才能启用它

  • HTML5有一个新的功能,目前只有新版本的Chrome和Opera才能实现。它将文件写入一个经过仔细沙盒处理的位置,并且不提供对实际文件名或路径的控制

  • 据我所知,Safari目前没有办法做到这一点

一般来说,浏览器对本地文件系统上的文件提供很少或根本没有访问权限,因此这是一种不可靠的登录方式。但是,我编写了一个粗略的BrowserFileAppender,它实现了HTML5和ActiveX方法,如果您觉得有用,欢迎使用这些方法:


使用,很容易:下载(arrLogLines.join(“\n”)、“log.txt”、“text/plain”)…我以前考虑过实现FileAppender,但浏览器支持太不稳定。我将再次研究它。+1,因为在线上没有多少可用的Appender示例。我不需要内容,只需要外壳。不要被否决票拖后腿。:)