Java日志文件创建多个副本

Java日志文件创建多个副本,java,swing,file,logging,filehandler,Java,Swing,File,Logging,Filehandler,我试图在Java swings应用程序中创建一个日志文件,该文件将包含代码生成的所有消息。但不幸的是,它并没有创建一个日志文件,而是创建了一个结构,如图所示。我需要一个单一的日志文件 我的代码: //get the logger object logger = Logger.getLogger("MyLog"); try { // This block configure the logger with handler and formatter loggerFH = ne

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

我的代码:

 //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());

} 

正在旋转您的文件

您是否尝试了以下解决方案:


FileHandler fh=新的FileHandler(“路径”,0,1,false)

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

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());

    }
}
}