package foundation.icall.log; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.util.Date; import org.apache.commons.io.FileUtils; import foundation.data.object.EntitySaver; import foundation.icall.RunType; import foundation.io.FileCenter; import foundation.io.FileField; import foundation.io.object.FileRecord; import foundation.persist.NamedSQL; import foundation.util.Util; public class ICallLogger { private static FileField FileField_Request = new FileField("request_file_id", "request_file"); private static FileField FileField_Response = new FileField("return_file_id", "return_file");; private static String Table_Log = "sys_interface_log"; public static void beginAction(LogRecord record, String runType) throws Exception { //1. 写日志文件 String path = record.getRequestFile(); String url = record.getUrl(); String requestBody = record.getRequestBody(); String requestHeader = record.getRequestHeader(); FileRecord fileRecord = writeOneLogFile(FileField_Request, record.getID(), path, url, requestHeader, requestBody); //2. EntitySaver saver = record.getSaver(); saver.set("start_time", new Date()); saver.set("create_time", new Date()); saver.set("type", Util.isEmpty(runType) ? RunType.Normal : runType); saver.set(FileField_Request.getFileId(), fileRecord.getIndexId()); saver.set(FileField_Request.getFileName(), fileRecord.getFileName()); record.insert(); } public static void endAction(LogRecord record, String body) { if (record == null) { return; } //1. 写日志文件 String path = record.getResponseFile(); FileRecord fileRecord = writeOneLogFile(FileField_Response, record.getID(), path, null, null, body); //2. 写日志记录 Date now = new Date(); try { NamedSQL namedSQL = NamedSQL.getInstance("writeJCallEnd"); namedSQL.setParam("id", record.getID()); namedSQL.setParam(FileField_Response.getFileId(), fileRecord.getIndexId()); namedSQL.setParam(FileField_Response.getFileName(), fileRecord.getFileName()); namedSQL.setParam("end_time", now, true); namedSQL.execute(); } catch (Exception e) { e.printStackTrace(); } } public static FileRecord writeOneLogFile(FileField fileField, String logId, String filePath, String url, String header, String body) { FileRecord fileRecord; try { //1. create file File file = new File(filePath); //2. create path FileUtils.forceMkdir(file.getParentFile()); //3. write to file file.createNewFile(); //FileOutputStream outputStream = new FileOutputStream(file); OutputStreamWriter outputStream = new OutputStreamWriter(new FileOutputStream(file), "utf-8"); PrintWriter writer = new PrintWriter(outputStream); try { writer.write("{"); if (!Util.isEmpty(url)) { writer.write("\"URL\":\"" + url + "\""); writer.write(",\r\n"); } if (!Util.isEmpty(header)) { writer.write("\"headers\":" + header); writer.write(",\r\n"); } body = Util.isEmpty(body) ? "" :body; if (!body.startsWith("{")) { body = Util.doubleQuotedStr(body); } writer.write("\"body\":" + body); writer.write("}"); //4. save to file index fileRecord = FileCenter.getFileRecord(file); fileRecord.setContentType("text/plain"); FileCenter.saveFileIndex(Table_Log, logId, fileField, fileRecord); writer.close(); return fileRecord; } finally { writer.close(); } } catch (Exception e) { e.printStackTrace(); } return null; } }