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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
-- 如要修改 要提前修改 _template mapping -- 对应 mapping 为 gamelog-*
local Mapping = {
-- 预留一些数据格式
common = {
desc = "keyword",--索引的短字符串
ucode = "keyword",--关联日志对应ucode
key1 = "keyword", --可索引的短字符串
key2 = "keyword", --可索引的短字符串
-- 几乎不用的长文本
text1 = "text", --长字符串不索引的类型
-- 五个不同类型的数字 基本上满足数量要求 尽量从低到高用
short1 = "short",
int1 = "integer",
int2 = "integer",
long1 = "long",
float1 = "float",
|
44c6e479
zhouhaihai
增加部分日志
|
53
54
55
56
57
|
-- 底层使用的 一些参数
cint1 = "integer",
cint2 = "integer",
cint3 = "integer",
|
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
|
}
|
4c5d72ab
zhouhaihai
高级pvp
|
74
|
|
df883a11
zhouhaihai
日志处理
|
75
76
77
78
79
80
|
local function checkType(logType, field, value, ctype)
local typecheckfunc = {
keyword = function()
--长度不超过256
if type(value) ~= "string" then
value = tostring(value)
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
81
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [keyword], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
82
83
|
else
if #value > 256 then
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
84
|
print(string.format("LOG ERROR: logType [%s] field [%s] [keyword] type to long. value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
85
86
87
88
89
90
91
|
end
end
return value
end,
text = function()
if type(value) ~= "string" then
value = tostring(value)
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
92
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [text], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
93
94
95
96
97
98
|
end
return value
end,
integer = function()
if type(value) ~= "number" then
value = tonumber(value)
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
99
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
100
101
102
103
104
105
|
end
if value then
if math.type(value) ~= "integer" then
local oldValue = value
value = math.floor(value)
if value ~= oldValue then
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
106
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], is float, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
107
108
109
110
|
end
end
if -2147483648 > value or value > 2147483647 then
value = nil
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
111
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], too big, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
112
113
114
115
116
117
118
|
end
end
return value
end,
short = function()
if type(value) ~= "number" then
value = tonumber(value)
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
119
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
120
121
122
123
124
125
|
end
if value then
if math.type(value) ~= "integer" then
local oldValue = value
value = math.floor(value)
if value ~= oldValue then
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
126
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], is float, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
127
128
129
130
131
|
end
end
if -32768 > value or value > 32768 then
value = nil
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
132
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], too big, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
133
134
135
136
137
138
139
|
end
end
return value
end,
long = function()
if type(value) ~= "number" then
value = tonumber(value)
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
140
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
141
142
143
144
145
146
147
|
end
if value then
if math.type(value) ~= "integer" then
local oldValue = value
value = math.floor(value)
if type(value) ~= "integer" then
value = nil
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
148
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], too big, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
149
|
elseif value ~= oldValue then
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
150
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], is float, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
151
152
153
154
155
156
157
158
|
end
end
end
return value
end,
float = function()
if type(value) ~= "number" then
value = tonumber(value)
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
159
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [float], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
160
161
162
163
164
165
166
167
168
169
170
171
|
end
return value
end,
}
if typecheckfunc[ctype] then
return typecheckfunc[ctype]()
else
print(string.format("LOG ERROR: logType [%s] field [%s] have a new type [%s] need add check.", logType, field, ctype))
return nil
end
end
|
4c5d72ab
zhouhaihai
高级pvp
|
172
|
|
df883a11
zhouhaihai
日志处理
|
173
174
|
local RoleLog = {}
function RoleLog.bind(Role)
|
4c5d72ab
zhouhaihai
高级pvp
|
175
|
function Role:log(logType, contents)
|
4c5d72ab
zhouhaihai
高级pvp
|
176
|
contents = contents or {}
|
df883a11
zhouhaihai
日志处理
|
177
178
179
180
181
|
local _logType = LogType[logType]
if not _logType then
print(string.format("LOG ERROR: new logType [%s] need Add Maping.", logType))
return
end
|
4c5d72ab
zhouhaihai
高级pvp
|
182
|
local doc = {}
|
df883a11
zhouhaihai
日志处理
|
183
184
185
186
187
|
for field, ctype in pairs(commonRoleField) do
if contents[field] then
print(string.format("LOG ERROR: logType [%s] had field [%s] overwrite default.", logType, field))
end
doc[field] = checkType("commonRoleField", field, self:getProperty(field), ctype)
|
4c5d72ab
zhouhaihai
高级pvp
|
188
|
end
|
df883a11
zhouhaihai
日志处理
|
189
190
|
local mapping = Mapping[_logType]
|
44c6e479
zhouhaihai
增加部分日志
|
191
192
193
|
if mapping["ucode"] and not contents["ucode"] then
contents["ucode"] = self:getActionUcode()
end
|
df883a11
zhouhaihai
日志处理
|
194
|
|
4c5d72ab
zhouhaihai
高级pvp
|
195
|
for field, value in pairs(contents) do
|
df883a11
zhouhaihai
日志处理
|
196
197
198
|
local ftype = mapping[field]
if ftype then
doc[field] = checkType(logType, field, value, ftype)
|
4c5d72ab
zhouhaihai
高级pvp
|
199
|
else
|
df883a11
zhouhaihai
日志处理
|
200
|
print(string.format("LOG ERROR: logType [%s] have new field [%s] no type in mapping.", logType, field))
|
4c5d72ab
zhouhaihai
高级pvp
|
201
202
|
end
end
|
df883a11
zhouhaihai
日志处理
|
203
204
|
if not logd then return end
pcall(skynet.send, logd, "lua", "log", logType, doc, _logType)
|
4c5d72ab
zhouhaihai
高级pvp
|
205
|
end
|
44c6e479
zhouhaihai
增加部分日志
|
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
|
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
|
225
|
end
|
4c5d72ab
zhouhaihai
高级pvp
|
226
|
return RoleLog
|