我使用JAX-RS(Jersey 2.0)构建一个服务,并尝试实现一个记录器,用于记录错误或请求结果等事件。工作良好! :) 不幸的是,每次调用服务时它都会创建一个文件,但是将它写入一个文件会很好。
看看我的代码(它只是相关部分):
package webservice.feedbacks;
import java.io.IOException;
// imports
@Path("webservice")
public class DeleteFeedback {
Logger logger = Logger.getLogger("Feedbacklogger");
@POST
@Path("/deleteFeedback")
@Consumes(MediaType.APPLICATION_JSON + ";charset=UTF-8")
@Produces("text/plain")
public String setFeedbacks(String incoming){
FileHandler fh;
JSONObject jsonObj = new JSONObject(incoming);
try {
fh = new FileHandler("D:/Eclipse-Projekte/SmartliveService/logs/DeleteFeedback_log.log");
logger.addHandler(fh);
SimpleFormatter formatter = new SimpleFormatter();
fh.setFormatter(formatter);
logger.info("----- BEGINN DES PROTOKOLLS -----");
} catch (SecurityException | IOException e) {e.getMessage();}
int id = jsonObj.getInt("id");
String result = executeQuery(id);
logger.info("----- ENDE DES PROTOKOLLS -----");
return result;
}
private String executeQuery(int id) {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {logger.info("Treiberfehler: " + e.getMessage());}
Connection con = null;
Statement stmt = null;
try{...} catch(SQLException e){
logger.info("SQL-Fehler: " + e.getMessage());
return "error";
} finally {
try { if (stmt != null) stmt.close();} catch (Exception e) {logger.info("Das Statement konnte nicht geschlossen werden: " + e.getMessage());};
try { if (con != null) con.close();} catch (Exception e) {logger.info("Die Verbindung konnte nicht geschlossen werden: " + e.getMessage());};
}
return "success";
}
}}
如您所见,我创建了FileHandler
。我从一个教程中得到了这个,因为我不像几年前那样熟悉JAVA。代码只是进行了数据库查询并发送结果。
那么,每次调用接口时,如何编写我记录到一个文件的代码而不是创建一个新代码?
希望有人可以帮助我。
答案 0 :(得分:0)
每次调用方法时都不应初始化文件处理程序。也许你应该使它静态或在构造函数中初始化它。另见附录。