【问题标题】:Redirecting log output to HTML text area将日志输出重定向到 HTML 文本区域
【发布时间】:2014-06-02 16:16:14
【问题描述】:

我目前正在使用 JSP 编写 Web 应用程序,并在应用程序的运行生命周期内将日志记录设置写入文件。这种情况下的日志信息对用户来说非常重要,我想以某种方式显示它。起初我想在 Logger 对象本身上使用某种 actionListener 并在 JSP 中使用 scriptlet 将文本附加到 Text Area 元素中,但我不太确定这是否可行。有没有简单或已知的方法来做到这一点?非常感谢任何反馈和帮助。现在我正在使用常规的 apache Logger 对象,但我当然愿意使用外部库,例如 Log4j 或其他选项来实现我的需要。

我不能这样做吗?每次记录器写入信息时,都需要更新文本区域,而无需实际刷新整个页面。如果无法做到这一点,是否建议使用弹出窗口进行处理?这可能会通过弹出窗口来完成,也许是 JSwing,但这可能看起来很难看。

【问题讨论】:

  • 这样做可能是一个安全问题。

标签: java apache jsp logging


【解决方案1】:

您是否考虑过进行一些简单的定期 ajax 轮询?这是一个使用 jQuery 的小示例,它发布到一些 jsp,然后调用另一个 javascript 函数来更新您的 textArea:

function doPoll(){
    $.post('ajax/log.jsp', function(data) {
        updateTextArea(data);  // process results here
        setTimeout(doPoll,5000);
    });
}

一个简单但可能相当笨拙的可能性是让您的控制器在 ajax 发布到它时读取生成的日志文件并返回最新的更改(或整个日志)。

编辑:developerwjk 快一点 :) 如果日志很重要,请将其保存在数据库中的某个位置。然后在帖子中检索日志消息并将它们传递回 ajax。

【讨论】:

  • 处理时间间隔并在文件更改时使用文件中的某些内容更新文本区域元素是我考虑过的。我不熟悉 ajax 轮询,但看起来它绝对是一个有效的解决方案。非常感谢这个想法。我会再次发帖。
  • 由于我在我的类中使用 Java Logger 对象,我可能会考虑使用 StringBuffer 将日志语句附加到我去并在 JSP 内部编写一个脚本来检查缓冲区大小是否更大比之前更新文本区域,如果没有则不更新文本区域。
  • 考虑到通常控制器只在某些请求被交给他们时才做他们的工作。必须想出一些方法来处理请求之间在服务器端发生的事件。
【解决方案2】:

使用某种密钥跟踪您在数据库中登录的任何内容,然后在浏览器中加载页面后,向将返回日志文本的 servlet 执行 Ajax 请求,并在您的 Javascript 中设置收到 Ajax 响应时将文本放入文本框中。

【讨论】:

    猜你喜欢
    • 2019-08-21
    • 2016-10-07
    • 1970-01-01
    • 2019-03-20
    • 1970-01-01
    • 2014-11-08
    • 2013-04-15
    • 2010-09-18
    • 1970-01-01
    相关资源
    最近更新 更多