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",
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
7
|
gm = "common",
|
44c6e479
zhouhaihai
增加部分日志
|
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
mail_actions = "common",
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",
role_action = "common",
|
4c5d72ab
zhouhaihai
高级pvp
|
22
23
|
}
|
df883a11
zhouhaihai
日志处理
|
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
-- 如要修改 要提前修改 _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
增加部分日志
|
40
41
42
43
44
|
-- 底层使用的 一些参数
cint1 = "integer",
cint2 = "integer",
cint3 = "integer",
|
df883a11
zhouhaihai
日志处理
|
45
46
|
}
}
|
4c5d72ab
zhouhaihai
高级pvp
|
47
|
|
df883a11
zhouhaihai
日志处理
|
48
49
50
51
52
53
54
55
56
57
58
|
-- 所有的日志都包括的部分 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
|
59
60
|
}
|
4c5d72ab
zhouhaihai
高级pvp
|
61
|
|
df883a11
zhouhaihai
日志处理
|
62
63
64
65
66
67
|
local function checkType(logType, field, value, ctype)
local typecheckfunc = {
keyword = function()
--长度不超过256
if type(value) ~= "string" then
value = tostring(value)
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
68
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [keyword], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
69
70
|
else
if #value > 256 then
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
71
|
print(string.format("LOG ERROR: logType [%s] field [%s] [keyword] type to long. value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
72
73
74
75
76
77
78
|
end
end
return value
end,
text = function()
if type(value) ~= "string" then
value = tostring(value)
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
79
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [text], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
80
81
82
83
84
85
|
end
return value
end,
integer = function()
if type(value) ~= "number" then
value = tonumber(value)
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
86
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
87
88
89
90
91
92
|
end
if value then
if math.type(value) ~= "integer" then
local oldValue = value
value = math.floor(value)
if value ~= oldValue then
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
93
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], is float, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
94
95
96
97
|
end
end
if -2147483648 > value or value > 2147483647 then
value = nil
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
98
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [integer], too big, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
99
100
101
102
103
104
105
|
end
end
return value
end,
short = function()
if type(value) ~= "number" then
value = tonumber(value)
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
106
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
107
108
109
110
111
112
|
end
if value then
if math.type(value) ~= "integer" then
local oldValue = value
value = math.floor(value)
if value ~= oldValue then
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
113
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], is float, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
114
115
116
117
118
|
end
end
if -32768 > value or value > 32768 then
value = nil
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
119
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [short], too big, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
120
121
122
123
124
125
126
|
end
end
return value
end,
long = function()
if type(value) ~= "number" then
value = tonumber(value)
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
127
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
128
129
130
131
132
133
134
|
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
|
135
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], too big, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
136
|
elseif value ~= oldValue then
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
137
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [long], is float, value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
138
139
140
141
142
143
144
145
|
end
end
end
return value
end,
float = function()
if type(value) ~= "number" then
value = tonumber(value)
|
e3c5cc5e
zhouhaihai
跨服竞技场over
|
146
|
print(string.format("LOG ERROR: logType [%s] field [%s] isn't [float], value : %s", logType, field, value))
|
df883a11
zhouhaihai
日志处理
|
147
148
149
150
151
152
153
154
155
156
157
158
|
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
|
159
|
|
df883a11
zhouhaihai
日志处理
|
160
161
|
local RoleLog = {}
function RoleLog.bind(Role)
|
4c5d72ab
zhouhaihai
高级pvp
|
162
|
function Role:log(logType, contents)
|
4c5d72ab
zhouhaihai
高级pvp
|
163
|
contents = contents or {}
|
df883a11
zhouhaihai
日志处理
|
164
165
166
167
168
|
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
|
169
|
local doc = {}
|
df883a11
zhouhaihai
日志处理
|
170
171
172
173
174
|
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
|
175
|
end
|
df883a11
zhouhaihai
日志处理
|
176
177
|
local mapping = Mapping[_logType]
|
44c6e479
zhouhaihai
增加部分日志
|
178
179
180
|
if mapping["ucode"] and not contents["ucode"] then
contents["ucode"] = self:getActionUcode()
end
|
df883a11
zhouhaihai
日志处理
|
181
|
|
4c5d72ab
zhouhaihai
高级pvp
|
182
|
for field, value in pairs(contents) do
|
df883a11
zhouhaihai
日志处理
|
183
184
185
|
local ftype = mapping[field]
if ftype then
doc[field] = checkType(logType, field, value, ftype)
|
4c5d72ab
zhouhaihai
高级pvp
|
186
|
else
|
df883a11
zhouhaihai
日志处理
|
187
|
print(string.format("LOG ERROR: logType [%s] have new field [%s] no type in mapping.", logType, field))
|
4c5d72ab
zhouhaihai
高级pvp
|
188
189
|
end
end
|
df883a11
zhouhaihai
日志处理
|
190
191
|
if not logd then return end
pcall(skynet.send, logd, "lua", "log", logType, doc, _logType)
|
4c5d72ab
zhouhaihai
高级pvp
|
192
|
end
|
44c6e479
zhouhaihai
增加部分日志
|
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
|
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
|
212
|
end
|
4c5d72ab
zhouhaihai
高级pvp
|
213
|
return RoleLog
|