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;
|
}
|
}
|