【发布时间】:2019-01-08 18:43:27
【问题描述】:
我制作了一个日志系统,但我需要将日志消息写入单独的日志/txt 文件中。
我想出了这个:
public class UIRestService {
private static final Logger LOGGER = Logger.getLogger(UIRestService.class.toString());
FileHandler fh;
public UIRestService() {
try {
fh = new FileHandler("E:/MyLog.log");
LOGGER.addHandler(fh);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
} catch (IOException e){
e.printStackTrace();
}
}
public MainDTO registerEORI(@RequestBody EoriRegistration json){
long startTime = System.currentTimeMillis();
try {
LOGGER.info("--- Start EORI registration ---");
EoriData entity = Converter.convertDTO2Entity(json);
LOGGER.info("Converted DTO to Entity");
MainDTO dto = dataManager.registration(entity);
if (dto instanceof EoriRegistration) {
msgManager.writeMsg(json.getState(), json.getC8_number() == null ? "test" : json.getC8_number());//TODO remove after IAM json.getC8_number()
}
return dto;
} catch (Exception e){
LOGGER.info("Exception in registerEORI");
e.printStackTrace();
Error error = new Error(Constants.TYPE_DTO2);
error.setErrorDescription(e.getMessage());
LOGGER.info("Exception in registerEORI" + error);
return error;
} finally {
long endTime = System.currentTimeMillis();
LOGGER.info("Registering EORI id: " + json.getId() + " , eori number:" + json.getEoriNumber() + " , elapsed:" + (endTime - startTime));
}
}
}
我在 E:/ 中手动创建了 MyLog.log 文件,但什么也没有。我尝试了没有手动创建的文件 - 再次没有。它说从不使用构造函数。你能告诉我我做错了什么吗?我用了这个例子 - Example
【问题讨论】:
-
如果您手动将
public UIRestService()替换为static。 -
等等,你什么意思?
-
抱歉,我刚刚在服务构造函数中看到了一个静态 LOGGER 和一个初始化。没有多想,我提出了一个静态初始化器
static { ... }。我也会先调用 setFomatter,然后再调用 addHandler。但这一切似乎都不太可能导致问题。 -
BTW 看不到日志消息时最常见的错误是错误的日志级别。上面应该是 INFO 或更少。
-
也许我解释得不够好。我在控制台中看到日志消息,但我需要同时将它们写入日志/txt 文件中 - 因此不会发生在文件中的写入本身。文件为空。