114 lines
2.8 KiB
TypeScript
114 lines
2.8 KiB
TypeScript
import { Db, MongoClient } from "mongodb";
|
||
|
||
let logDB:Db;
|
||
let errorLogDB:Db;
|
||
|
||
/**
|
||
* 是否是G123的测试服
|
||
*/
|
||
function isG123stg(){
|
||
return G.config.mongodbUrl.indexOf('.stg.')!=-1;
|
||
}
|
||
|
||
async function connGameLogDB() {
|
||
console.log('connect gamelog mongodb ......');
|
||
let logDBUrl:string;
|
||
if(G.config.isG123){
|
||
logDBUrl = "mongodb://root:lffu2bD%5eGn2%5eE%2bE7@blacklagoon-mongo-log-primary.pro.g123-cpp.com:3717,blacklagoon-mongo-log-secondary.pro.g123-cpp.com:3717?replicaSet=mgset-351742307";
|
||
}else{
|
||
logDBUrl = "mongodb://root:lyMaple525458@10.0.1.20:27017/heijiao_gamelog?authSource=admin";
|
||
}
|
||
let client = await MongoClient.connect(logDBUrl,{
|
||
maxPoolSize:10,
|
||
maxIdleTimeMS: 5*60*1000
|
||
});
|
||
logDB = client.db(`gameLog${G.config.serverId}`);
|
||
errorLogDB = client.db(`nodeJsErrorLog`);
|
||
|
||
return logDB;
|
||
}
|
||
|
||
|
||
process.on('uncaughtException',function(err:Error){
|
||
addErrorLog((err?.stack)?.toString());
|
||
})
|
||
|
||
process.on('unhandledRejection', function (err:Error, promise) {
|
||
addErrorLog((err?.stack)?.toString());
|
||
})
|
||
|
||
async function addErrorLog(errData:any){
|
||
try{
|
||
//g123测试版连接不上db,不抓取
|
||
if(!errData)return;
|
||
if(isG123stg())return;
|
||
let log = {
|
||
serverId : G.config.serverId,
|
||
pid : process.pid,
|
||
cTime : Math.floor(Date.now()/1000),
|
||
error: errData
|
||
}
|
||
if(!errorLogDB){
|
||
await connGameLogDB();
|
||
}
|
||
errorLogDB.collection('nodeJsErrorLog').insertOne(log);
|
||
}catch(e){
|
||
console.error('addErrorLog',e);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 增加游戏日志
|
||
* @param uid 玩家uid
|
||
* @param type 日志类型
|
||
* @param req 客户端请求数据
|
||
* @param data 日志内容
|
||
*/
|
||
|
||
export async function addGameLog(uid:string, type:string, req:any, data:any){
|
||
try{
|
||
//g123测试版连接不上db,不抓取
|
||
if(isG123stg())return;
|
||
|
||
if(!logDB){
|
||
await connGameLogDB();
|
||
}
|
||
let log = {
|
||
uid,
|
||
type,
|
||
req,
|
||
data
|
||
}
|
||
//事件时间
|
||
log['cTime'] = Math.floor(Date.now()/1000);
|
||
logDB.collection('gameLog').insertOne(log);
|
||
}catch(e){
|
||
console.error('addGameLog',e);
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 玩家游戏内打点
|
||
* @param uid 玩家uid
|
||
* @param type 日志类型
|
||
* @param data 日志内容
|
||
*/
|
||
|
||
export async function addGameDot(uid:string, type:string, data?:any){
|
||
try{
|
||
if(!logDB){
|
||
await connGameLogDB();
|
||
}
|
||
let log = {
|
||
uid,
|
||
type,
|
||
data
|
||
}
|
||
//事件时间
|
||
log['cTime'] = Math.floor(Date.now()/1000);
|
||
|
||
logDB.collection('gameDot').insertOne(log);
|
||
}catch(e){
|
||
console.error('addGameLog',e);
|
||
}
|
||
} |