4c5d72ab
zhouhaihai
高级pvp
|
1
|
|
df883a11
zhouhaihai
日志处理
|
2
|
-- logType
|
4c5d72ab
zhouhaihai
高级pvp
|
3
|
local LogType = {
|
df883a11
zhouhaihai
日志处理
|
4
5
6
|
create = "common",
login = "common",
logout = "common",
|
3133cb76
zhouhaihai
日志
|
7
8
|
guide = "common",
|
44c6e479
zhouhaihai
增加部分日志
|
9
10
11
12
13
14
15
16
17
18
19
20
|
in_item = "common",
out_item = "common",
in_diamond = "common",
out_diamond = "common",
in_hero = "common",
out_hero = "common",
in_equip = "common",
out_equip = "common",
in_rune = "common",
out_rune = "common",
player_exp = "common",
func_open = "common",
|
3133cb76
zhouhaihai
日志
|
21
22
23
24
25
|
in_adv = "common",
out_adv = "common",
in_artifact = "common",
mail_action = "common",
|
44c6e479
zhouhaihai
增加部分日志
|
26
|
role_action = "common",
|
3133cb76
zhouhaihai
日志
|
27
28
29
30
31
32
33
34
|
hang_action = "common",
hero_action = "common",
adv_action = "common",
rune_action = "common",
pvp_action = "common",
diner_action = "common",
tower_action = "common",
gm_action = "common",
|
4c5d72ab
zhouhaihai
高级pvp
|
35
36
|
}
|
df883a11
zhouhaihai
日志处理
|
37
38
|
-- 如要修改 要提前修改 _template mapping -- 对应 mapping 为 gamelog-*
local Mapping = {
|
cbc6973f
zhouhaihai
天赋bug 日志调整
|
39
|
-- 预留一些数据格式 担心integer 范围不够用 将 通用的int* 全部换为long
|
df883a11
zhouhaihai
日志处理
|
40
41
42
43
44
45
46
47
48
|
common = {
desc = "keyword",--索引的短字符串
ucode = "keyword",--关联日志对应ucode
key1 = "keyword", --可索引的短字符串
key2 = "keyword", --可索引的短字符串
-- 几乎不用的长文本
text1 = "text", --长字符串不索引的类型
-- 五个不同类型的数字 基本上满足数量要求 尽量从低到高用
short1 = "short",
|
cbc6973f
zhouhaihai
天赋bug 日志调整
|
49
50
|
int1 = "long",
int2 = "long",
|
df883a11
zhouhaihai
日志处理
|
51
52
|
long1 = "long",
float1 = "float",
|
44c6e479
zhouhaihai
增加部分日志
|
53
54
|
-- 底层使用的 一些参数
|
cbc6973f
zhouhaihai
天赋bug 日志调整
|
55
56
57
|
cint1 = "long",
cint2 = "long",
cint3 = "long",
|
df883a11
zhouhaihai
日志处理
|
58
59
|
}
}
|
4c5d72ab
zhouhaihai
高级pvp
|
60
|
|
df883a11
zhouhaihai
日志处理
|
61
62
63
64
65
66
67
68
69
70
71
|
-- 所有的日志都包括的部分 role 里面的信息 -- mapping 信息在 gamelog-role
local commonRoleField = {
name = "keyword",
id = "integer",
uid = "keyword",
sid = "short",
device = "keyword",
ctime = "integer",
ltime = "integer",
level = "short",
rmbC = "integer",
|
4c5d72ab
zhouhaihai
高级pvp
|
72
73
|
}
|
b216676d
zhouhaihai
log
|
74
75
76
77
|
local function printError(info)
print(info)
print(debug.traceback())
end
|
4c5d72ab
zhouhaihai
高级pvp
|
78
|
|
df883a11
zhouhaihai
日志处理
|
79
80
81
82
83
84
|
local function checkType(logType, field, value, ctype)
local typecheckfunc = {
keyword = function()
--长度不超过256
if type(value) ~= "string" then
value = tostring(value)
|
b216676d
zhouhaihai
log
|
85
|
printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [keyword], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
86
87
|
else
if #value > 256 then
|
b216676d
zhouhaihai
log
|
88
|
printError(string.format("LOG ERROR: logType [%s] field [%s] [keyword] type to long. value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
89
90
91
92
93
94
95
|
end
end
return value
end,
text = function()
if type(value) ~= "string" then
value = tostring(value)
|
b216676d
zhouhaihai
log
|
96
|
printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [text], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
97
98
99
100
101
102
|
end
return value
end,
integer = function()
if type(value) ~= "number" then
value = tonumber(value)
|
b216676d
zhouhaihai
log
|
103
|
printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
104
105
106
107
108
109
|
end
if value then
if math.type(value) ~= "integer" then
local oldValue = value
value = math.floor(value)
if value ~= oldValue then
|
b216676d
zhouhaihai
log
|
110
|
printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], is float, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
111
112
113
|
end
end
if -2147483648 > value or value > 2147483647 then
|
b216676d
zhouhaihai
log
|
114
|
printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], too big, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
115
|
value = nil
|
df883a11
zhouhaihai
日志处理
|
116
117
118
119
120
121
122
|
end
end
return value
end,
short = function()
if type(value) ~= "number" then
value = tonumber(value)
|
b216676d
zhouhaihai
log
|
123
|
printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
124
125
126
127
128
129
|
end
if value then
if math.type(value) ~= "integer" then
local oldValue = value
value = math.floor(value)
if value ~= oldValue then
|
b216676d
zhouhaihai
log
|
130
|
printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], is float, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
131
132
133
134
|
end
end
if -32768 > value or value > 32768 then
|
b216676d
zhouhaihai
log
|
135
|
printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], too big, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
136
|
value = nil
|
df883a11
zhouhaihai
日志处理
|
137
138
139
140
141
142
143
|
end
end
return value
end,
long = function()
if type(value) ~= "number" then
value = tonumber(value)
|
b216676d
zhouhaihai
log
|
144
|
printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
145
146
147
148
149
150
|
end
if value then
if math.type(value) ~= "integer" then
local oldValue = value
value = math.floor(value)
if type(value) ~= "integer" then
|
b216676d
zhouhaihai
log
|
151
|
printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], too big, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
152
|
value = nil
|
df883a11
zhouhaihai
日志处理
|
153
|
elseif value ~= oldValue then
|
b216676d
zhouhaihai
log
|
154
|
printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], is float, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
155
156
157
158
159
160
161
162
|
end
end
end
return value
end,
float = function()
if type(value) ~= "number" then
value = tonumber(value)
|
b216676d
zhouhaihai
log
|
163
|
printError(string.format("LOG ERROR: logType [%s] field [%s] isn't [float], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
164
165
166
167
168
169
170
171
|
end
return value
end,
}
if typecheckfunc[ctype] then
return typecheckfunc[ctype]()
else
|
b216676d
zhouhaihai
log
|
172
|
printError(string.format("LOG ERROR: logType [%s] field [%s] have a new type [%s] need add check.", logType, field, ctype))
|
df883a11
zhouhaihai
日志处理
|
173
174
175
|
return nil
end
end
|
4c5d72ab
zhouhaihai
高级pvp
|
176
|
|
df883a11
zhouhaihai
日志处理
|
177
178
|
local RoleLog = {}
function RoleLog.bind(Role)
|
4c5d72ab
zhouhaihai
高级pvp
|
179
|
function Role:log(logType, contents)
|
4c5d72ab
zhouhaihai
高级pvp
|
180
|
contents = contents or {}
|
df883a11
zhouhaihai
日志处理
|
181
182
|
local _logType = LogType[logType]
if not _logType then
|
b216676d
zhouhaihai
log
|
183
|
printError(string.format("LOG ERROR: new logType [%s] need Add Maping.", logType))
|
df883a11
zhouhaihai
日志处理
|
184
185
|
return
end
|
4c5d72ab
zhouhaihai
高级pvp
|
186
|
local doc = {}
|
df883a11
zhouhaihai
日志处理
|
187
188
|
for field, ctype in pairs(commonRoleField) do
if contents[field] then
|
b216676d
zhouhaihai
log
|
189
|
printError(string.format("LOG ERROR: logType [%s] had field [%s] overwrite default.", logType, field))
|
df883a11
zhouhaihai
日志处理
|
190
191
|
end
doc[field] = checkType("commonRoleField", field, self:getProperty(field), ctype)
|
4c5d72ab
zhouhaihai
高级pvp
|
192
|
end
|
df883a11
zhouhaihai
日志处理
|
193
194
|
local mapping = Mapping[_logType]
|
44c6e479
zhouhaihai
增加部分日志
|
195
196
197
|
if mapping["ucode"] and not contents["ucode"] then
contents["ucode"] = self:getActionUcode()
end
|
df883a11
zhouhaihai
日志处理
|
198
|
|
4c5d72ab
zhouhaihai
高级pvp
|
199
|
for field, value in pairs(contents) do
|
df883a11
zhouhaihai
日志处理
|
200
201
202
|
local ftype = mapping[field]
if ftype then
doc[field] = checkType(logType, field, value, ftype)
|
4c5d72ab
zhouhaihai
高级pvp
|
203
|
else
|
b216676d
zhouhaihai
log
|
204
|
printError(string.format("LOG ERROR: logType [%s] have new field [%s] no type in mapping.", logType, field))
|
4c5d72ab
zhouhaihai
高级pvp
|
205
206
|
end
end
|
df883a11
zhouhaihai
日志处理
|
207
208
|
if not logd then return end
pcall(skynet.send, logd, "lua", "log", logType, doc, _logType)
|
4c5d72ab
zhouhaihai
高级pvp
|
209
|
end
|
44c6e479
zhouhaihai
增加部分日志
|
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
|
function Role:startActionUcode()
if not self._uniqueCount then
self._uniqueCount = 0
end
local action = {self:getProperty("id"), skynet.timex(), self._uniqueCount}
self._uniqueCount = self._uniqueCount + 1
self._actionUcode = table.concat(action, "_")
end
function Role:endActionUcode()
self._actionUcode = nil
end
function Role:getActionUcode()
return self._actionUcode
end
|
4c5d72ab
zhouhaihai
高级pvp
|
229
|
end
|
4c5d72ab
zhouhaihai
高级pvp
|
230
|
return RoleLog
|