【问题标题】:Java Log File creates multiple copiesJava 日志文件创建多个副本
【发布时间】:2015-12-11 11:09:14
【问题描述】:

我正在尝试在 Java swings 应用程序中创建一个日志文件,该文件将包含代码生成的所有消息。但不幸的是,它不会创建 1 个单个日志文件,而是创建一个如图所示的结构。我需要 1 个单一的日志文件。

我的代码:

 //get the logger object
logger = Logger.getLogger("MyLog");

try {
    // This block configure the logger with handler and formatter
    loggerFH = new FileHandler(System.getProperty("user.dir") + "\\resources\\logs\\logs.txt",true);
    logger.addHandler(loggerFH);            

    SimpleFormatter formatter = new SimpleFormatter();
    loggerFH.setFormatter(formatter);

} catch (IOException | SecurityException ex) {
    logger.severe(ex.getMessage());
    outputArea.append(ex.getMessage());

} 

【问题讨论】:

    标签: java swing file logging filehandler


    【解决方案1】:

    您的文件正在轮换。

    您是否尝试过以下解决方案: Java FileHandler disable log rotation

    FileHandler fh = new FileHandler("path" , 0, 1, false);

    【讨论】:

      【解决方案2】:

      我意识到我的 Logger 文件一次被多个实例使用。因此,当文件处理程序的 1 个实例锁定对文件的访问时,将创建一个新文件。所以我创建了一个 Synchronized 类来处理所有日志记录。而且效果很好。

      public class SynchronizedLogger {
      
      //Logger to put error logs and messages in the log file
      
      public static Logger logger = Logger.getLogger("MyLog");
      
      
      //Logger Filehandler
      private static FileHandler loggerFH;
      
      public SynchronizedLogger() {
      }
      
      public static synchronized void writeLog(String message) {
          logger.info(message);
      }
      
      public SynchronizedLogger(int i) {
          try {
              synchronized (this) {
                  // This block configures the logger with handler and formatter
                  loggerFH = new FileHandler(System.getProperty("user.dir") + "\\resources\\logs\\logs.txt", 0, 1, true);
                  logger.setUseParentHandlers(false);
                  logger.addHandler(loggerFH);
      
                  SimpleFormatter formatter = new SimpleFormatter();
                  loggerFH.setFormatter(formatter);
              }
      
          } catch (IOException | SecurityException ex) {
              writeLog(ex.getMessage());
              outputArea.append("\n\n" + ex.getMessage());
      
          }
      }
      

      }

      【讨论】:

        猜你喜欢
        • 2022-12-19
        • 2021-11-13
        • 1970-01-01
        • 1970-01-01
        • 2018-02-15
        • 1970-01-01
        • 2021-07-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多