当前位置: 首页 > 面试题库 >

如何刷新缓冲的log4j FileAppender?

王伯寅
2023-03-14
问题内容

在log4j中,当使用具有BufferedIO = true和BufferSize =
xxx属性(即启用了缓冲)的FileAppender时,我希望能够在正常关闭过程中刷新日志。有关如何执行此操作的任何想法?


问题答案:
public static void flushAllLogs()
{
    try
    {
        Set<FileAppender> flushedFileAppenders = new HashSet<FileAppender>();
        Enumeration currentLoggers = LogManager.getLoggerRepository().getCurrentLoggers();
        while(currentLoggers.hasMoreElements())
        {
            Object nextLogger = currentLoggers.nextElement();
            if(nextLogger instanceof Logger)
            {
                Logger currentLogger = (Logger) nextLogger;
                Enumeration allAppenders = currentLogger.getAllAppenders();
                while(allAppenders.hasMoreElements())
                {
                    Object nextElement = allAppenders.nextElement();
                    if(nextElement instanceof FileAppender)
                    {
                        FileAppender fileAppender = (FileAppender) nextElement;
                        if(!flushedFileAppenders.contains(fileAppender) && !fileAppender.getImmediateFlush())
                        {
                            flushedFileAppenders.add(fileAppender);
                            //log.info("Appender "+fileAppender.getName()+" is not doing immediateFlush ");
                            fileAppender.setImmediateFlush(true);
                            currentLogger.info("FLUSH");
                            fileAppender.setImmediateFlush(false);
                        }
                        else
                        {
                            //log.info("fileAppender"+fileAppender.getName()+" is doing immediateFlush");
                        }
                    }
                }
            }
        }
    }
    catch(RuntimeException e)
    {
        log.error("Failed flushing logs",e);
    }
}


 类似资料:
  • 问题内容: 我正在优化一个大型查询,并希望在比较之前和之后从同一基准运行它。 我知道mysql查询缓存,但与我无关,因为无论如何都不会缓存2个查询。 正在缓冲的是缓冲池中的innodb页面。有没有一种方法可以清除整个缓冲池,以便可以从同一起点比较两个查询? 虽然在运行每个查询后重新启动mysql服务器无疑会工作,但我想尽可能避免这种情况 问题答案: 警告:以下内容仅适用于MySQL 5.5和MyS

  • 问题内容: 有人可以保存这两个文件并运行它们,然后告诉我为什么我得到错误“ ob_flush()[ref.outcontrol]:无法刷新缓冲区。没有要刷新的缓冲区”。我尝试了四处搜寻,并说必须使用ob_start();。但是,当我这样做时,它不会逐行打印出来,而是在完成后从FOR循环返回整个对象。我对PHP有点陌生,所以我不确定其他地方。 test_process.php main.html 问

  • 本文向大家介绍刷新PHP缓冲区为你的站点加速,包括了刷新PHP缓冲区为你的站点加速的使用技巧和注意事项,需要的朋友参考一下 在当前 PHP 版本的默认配置下,“输出缓冲(Output Buffering)”是被打开的。旧版本则不是这样,在旧版本的 PHP 中,字符串在每次被输出的时候(通过 echo 或 print 函数),都会触发一次发送到客户端浏览器的动作。 “输出缓冲”的引入,使得这一过程更

  • 我使用JPA(Eclipse Link 2.5)进行持久性。我的Web应用程序包含AJAX页面更新。保存帖子时,发布的内容会在不刷新浏览器的情况下显示。该帖子具有使用OneTo多关系与之关联的标签。这些标签应该在保存后也会显示出来。但是,由于启用了缓存,我无法获取标签。 这是我的代码: 我怎样才能让事情运转起来?如何刷新一个实体及其所有关联的实体?谢了。

  • 问题内容: 我有一个JpaRepository在Spring MVC应用程序中持久保存新创建的实体。这个实体看起来像这样(非常简化): 和版本实体: 我创建一个这样的翻译对象 其中11是从一开始就已经存在于数据库中的版本。请注意,我没有为ClientVersionDTO 设置和的值。 然后,我有一个持久化新对象的服务(我使用库将DTO转换为实体) 请注意我的评论“ t2.getVersion()返

  • 本文向大家介绍如何刷新浏览器的应用缓存?相关面试题,主要包含被问及如何刷新浏览器的应用缓存?时的应答技巧和注意事项,需要的朋友参考一下 按F5或浏览器刷新按钮 浏览器会在请求中附加必要的缓存协商,但不允许浏览器直接使用本地缓存,它能够让 Last-Modified、ETag发挥效果,但是对Expires无效。 按Ctrl+F5或按Ctrl并点击刷新按钮 这种方式就是强制刷新,总会发起一个全新的请求