首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存储在本地文件中的"log4javascript“记录器

存储在本地文件中的"log4javascript“记录器
EN

Stack Overflow用户
提问于 2013-09-09 16:25:05
回答 2查看 2.5K关注 0票数 0

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

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

有什么想法/建议吗?

这类似于http://www.techques.com/question/1-3626960/JavaScript-logger-into-a-rolling-file

由于我们已经实现了log4javascript,所以我们希望坚持相同的框架。

EN

回答 2

Stack Overflow用户

发布于 2013-09-15 16:04:43

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

  • 在Firefox中,我认为目前根本不可能写入本地文件系统,即使用户批准了。从火狐17 (我想),特权代码不能在网页中运行。,这排除了旧的方法在网上浮动(如这里)。
  • IE仍然有它的ActiveX方法来完成这个操作,但是它比以往任何时候都要被锁定,并且需要用户的各种操作来启用它。
  • HTML5有一个文件系统API,目前只有Chrome和Opera的新版本才能实现。它将文件写入一个小心的沙箱位置,并且不提供对实际文件名或路径的控制。
  • 据我所知,Safari目前无法做到这一点。

通常,浏览器只提供很少或根本不访问本地文件系统上的文件,因此这是一种不可靠的记录方式。不过,我已经编写了一个粗略的BrowserFileAppender,它实现了HTML5和ActiveX方法,如果您发现这些方法很有用,欢迎使用:

https://gist.github.com/timdown/6572000

票数 1
EN

Stack Overflow用户

发布于 2013-09-10 15:26:24

为IE和火狐添加FileAppender解决方案。

代码语言:javascript
复制
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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18702720

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档