75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"reflect"
|
|
|
|
"mongo.games.com/goserver/core"
|
|
"mongo.games.com/goserver/core/broker/rabbitmq"
|
|
|
|
"mongo.games.com/game/common"
|
|
"mongo.games.com/game/model"
|
|
"mongo.games.com/game/mq"
|
|
)
|
|
|
|
// LogChannelSingleton 日志记录器
|
|
var LogChannelSingleton = &LogChannel{
|
|
cName: make(map[reflect.Type]string),
|
|
}
|
|
|
|
type LogChannel struct {
|
|
cName map[reflect.Type]string
|
|
}
|
|
|
|
func (c *LogChannel) RegisterLogCName(cname string, log interface{}) {
|
|
t := c.getLogType(log)
|
|
c.cName[t] = cname
|
|
}
|
|
|
|
func (c *LogChannel) getLogType(log interface{}) reflect.Type {
|
|
return reflect.Indirect(reflect.ValueOf(log)).Type()
|
|
}
|
|
|
|
func (c *LogChannel) getLogCName(log interface{}) string {
|
|
t := c.getLogType(log)
|
|
if name, exist := c.cName[t]; exist {
|
|
return name
|
|
}
|
|
return ""
|
|
}
|
|
|
|
func (c *LogChannel) WriteLog(log interface{}) {
|
|
cname := c.getLogCName(log)
|
|
if cname == "" {
|
|
cname = "_null_"
|
|
}
|
|
RabbitMQPublisher.Send(cname, log)
|
|
}
|
|
|
|
func (c *LogChannel) WriteMQData(data *model.RabbitMQData) {
|
|
RabbitMQPublisher.Send(data.MQName, data.Data)
|
|
}
|
|
|
|
var RabbitMQPublisher *mq.RabbitMQPublisher
|
|
|
|
func init() {
|
|
core.RegisteHook(core.HOOK_BEFORE_START, func() error {
|
|
//rabbitmq打开链接
|
|
RabbitMQPublisher = mq.NewRabbitMQPublisher(common.CustomConfig.GetString("RabbitMQURL"), rabbitmq.Exchange{Name: common.CustomConfig.GetString("RMQExchange"), Durable: true}, common.CustomConfig.GetInt("RMQPublishBacklog"))
|
|
if RabbitMQPublisher != nil {
|
|
err := RabbitMQPublisher.Start()
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
}
|
|
return nil
|
|
})
|
|
|
|
core.RegisteHook(core.HOOK_AFTER_STOP, func() error {
|
|
//关闭rabbitmq连接
|
|
if RabbitMQPublisher != nil {
|
|
RabbitMQPublisher.Stop()
|
|
}
|
|
return nil
|
|
})
|
|
}
|