-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathtrc.c
More file actions
109 lines (95 loc) · 2.24 KB
/
trc.c
File metadata and controls
109 lines (95 loc) · 2.24 KB
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
#include "trc.h"
#include<fcntl.h>
#include<sys/types.h>
#include<sys/stat.h>
#include <stdio.h>
#include <time.h>
#include "py_Dameng.h"
#define MAX_TRACE_MASSEGE_LEN (2048)
#define MAX_TIMESTAMP_STR_LEN (32)
#define TIMESTAMPE_BUF_LEN (MAX_TIMESTAMP_STR_LEN + 1)
udint4 dmpython_trace_mod = DMPYTHON_TRACE_OFF;
#ifdef WIN32
#define LOCALTIME(tm,ti) localtime_s(tm,ti)
#else
#define LOCALTIME(tm,ti) localtime_r(ti,tm)
#endif
static
void
dpy_get_timestamp(
sdbyte* buf
)
{
struct tm cur_time;
time_t ltime;
if (buf == NULL)
{
return;
}
time(<ime);
LOCALTIME(&cur_time, <ime);
aq_sprintf(buf, 33, "%04d-%02d-%02d %02d:%02d:%02d",
cur_time.tm_year + 1900,
cur_time.tm_mon + 1,
cur_time.tm_mday,
cur_time.tm_hour,
cur_time.tm_min,
cur_time.tm_sec);
}
void
dpy_trace(
PyObject* statement,
PyObject* args,
sdbyte* info,
...
)
{
sdbyte timestamp[TIMESTAMPE_BUF_LEN];
va_list vl;
char* statementStr = NULL;
char* argsStr = NULL;
PyObject* tempObj;
FILE* fp;
// 打开文件
fp = fopen(DMPYTHON_TRACE_FILE, "a+");
if (fp == NULL)
{
return;
}
// 写时间戳
dpy_get_timestamp(timestamp);
fwrite(timestamp, 1, strlen(timestamp), fp);
fwrite("\t", 1, 1, fp);
// 写info信息
va_start(vl, info);
vfprintf(fp, info, vl);
va_end(vl);
// 写statement
if (statement != NULL && statement != Py_None)
{
tempObj = PyObject_Str(statement);
if (tempObj != NULL)
{
statementStr = py_String_asString(tempObj);
Py_DECREF(tempObj);
fwrite(statementStr, 1, strlen(statementStr), fp);
fwrite("\n", 1, 1, fp);
}
}
// 写args
if (args != NULL && args != Py_None)
{
tempObj = PyObject_Str(args);
if (tempObj != NULL)
{
argsStr = py_String_asString(tempObj);
Py_DECREF(tempObj);
fwrite(argsStr, 1, strlen(argsStr), fp);
fwrite("\n", 1, 1, fp);
}
}
fwrite("\n", 1, 1, fp);
//关闭文件
fflush(fp);
fclose(fp);
}