P15GEN2\59518
2024-05-29 d4210c7c4b04abde20037ea8aa0f54ef8a2649aa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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;
    }
}