Как вы храните журналы в одном файле журнала, используя java.util.logging.FileHandler?
Я хочу добавить исключения в одном файле журнала. В моем исходном коде следующий код используется несколько раз... Я хочу сохранить все исключения в одном файле, но он создает несколько файлов, таких как exception.log, exception.log.1, exception.log.1.lck, exception.log.2 и так далее...
Date dir1 = new java.util.Date(System.currentTimeMillis());
String baseDir1 = "/home/gaurav/usr/logs/ESBegin/";
String newDir1 = createDateBasedDirectory(baseDir1, dir1);
System.out.println("Exception :: " + e.getMessage());
Logger logger = Logger.getLogger("MyLog");
FileHandler fh;
try {
// This block configure the logger with handler and formatter
fh = new FileHandler(newDir1+"/exception.log");
logger.addHandler(fh);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
// the following statement is used to log any messages
logger.info(e.getMessage());
} catch (SecurityException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
1 ответ
Это потому, что вы создаете новый FileHandler каждый раз, когда вызываете этот метод, вместо этого превращаете его в переменную экземпляра класса. Я проверил это, и это работает:
import java.io.IOException;
import java.util.Date;
import java.util.logging.FileHandler;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
public class Main {
private static String newDir1 = "C:\\Users\\pavel.orekhov\\Desktop";
private static FileHandler fh;
static {
try {
fh = new FileHandler(newDir1 + "\\exception.log", 0, 1, true);
} catch (IOException | SecurityException e) {
}
}
static void test() {
Date dir1 = new java.util.Date(System.currentTimeMillis());
Logger logger = Logger.getLogger("MyLog");
logger.addHandler(fh);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
logger.info("test");
}
public static void main(String[] args) {
// all these write to the same file
test();
test();
test();
test();
}
}
Код, который у вас был, был примерно таким:
import java.io.IOException;
import java.util.Date;
import java.util.logging.FileHandler;
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
public class Main {
static void test() {
Date dir1 = new java.util.Date(System.currentTimeMillis());
String newDir1 = "C:\\Users\\pavel.orekhov\\Desktop";
Logger logger = Logger.getLogger("MyLog");
FileHandler fh;
try {
fh = new FileHandler(newDir1 + "\\exception.log", 0, 1, true);
logger.addHandler(fh);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
logger.info("test");
} catch (SecurityException | IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
test(); // creates file 1
test(); // creates file 2
test(); // creates file 3
test(); // creates file 4
}
}
это создает столько файлов, сколько у вас есть вызовов на test()
метод.