我正在使用java記錄器類來記錄一些東西,並根據某些數據我需要將日誌配置到某些路線。記錄器在HashMap
讓說我有下面的代碼:
public class LoggerLocator {
private static HashMap<String, Logger> loggerMap = new HashMap<String, Logger>();
private static int count = 0;
public Logger getLogger(String id) {
if(!LoggerLocator.loggerMap.containsKey(id)) {
configure(id);
}
return LoggerLocator.loggerMap.get(id);
}
private void configure(String id) {
Logger logger = Logger.getLogger(LoggerLocator.class.getName());
FileHandler fh = new FileHandler(String.format("/home/abc/logs/mylog_%d.log", id), true);
fileHandler.setFormatter(new MyFormatter());
logger.addHandler(fh);
}
LoggerLocator.count++;
LoggerLocator.loggerMap.put(id, logger);
}
我的問題是,當我做一些extress測試發送大量請求到服務器,我印在每個請求的計數變量,從而有望具有值1,而不是獲取名稱爲mylog_ {id} .log,mylog_ {id} .log.1的2和2個文件的值
可能是在創建第一個記錄之前loggerMap爲空記錄器和分配給HashMap和另一個線程在LoggerLocator.loggerMap.containsKey(id)中變爲false?