From 4a9ab2e899bfe159fd43f520728770c4ef94781b Mon Sep 17 00:00:00 2001 From: boyce Date: Tue, 12 Feb 2019 17:19:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=97=A5=E5=BF=97=E6=A8=A1?= =?UTF-8?q?=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- originnode/global.go | 20 ++++++++ originnode/node.go | 24 ++++++++-- service/Service.go | 6 +-- sysmodule/LogModule.go | 92 ++++++++++++++++++++++++++++++++++++ sysmodule/SystemModuleDef.go | 7 +++ 5 files changed, 142 insertions(+), 7 deletions(-) create mode 100644 sysmodule/LogModule.go create mode 100644 sysmodule/SystemModuleDef.go diff --git a/originnode/global.go b/originnode/global.go index 5eb19a8..b181c9e 100644 --- a/originnode/global.go +++ b/originnode/global.go @@ -2,6 +2,9 @@ package originnode import ( _ "net/http/pprof" + "sync" + + "github.com/duanhf2012/origin/sysmodule" "github.com/duanhf2012/origin/service" ) @@ -23,3 +26,20 @@ func AddModule(module service.IModule) bool { func GetModuleByType(moduleType uint32) service.IModule { return g_module.GetModuleByType(moduleType) } + +func GetLog(logmodule uint32) sysmodule.ILogger { + module := g_module.GetModuleByType(logmodule) + if nil == module { + return nil + } + + return module.(sysmodule.ILogger) +} + +func InitGlobalModule() { + g_module.InitModule(&g_module) +} + +func RunGlobalModule(exit chan bool, pwaitGroup *sync.WaitGroup) { + g_module.RunModule(&g_module, exit, pwaitGroup) +} diff --git a/originnode/node.go b/originnode/node.go index a5e19b4..3d4f533 100644 --- a/originnode/node.go +++ b/originnode/node.go @@ -13,6 +13,7 @@ import ( "github.com/duanhf2012/origin/cluster" "github.com/duanhf2012/origin/service" + "github.com/duanhf2012/origin/sysmodule" ) type CExitCtl struct { @@ -24,9 +25,13 @@ type COriginNode struct { CExitCtl serviceManager service.IServiceManager sigs chan os.Signal + debugCheck bool } func (s *COriginNode) Init() { + + //初始化全局模块 + InitGlobalModule() service.InitLog() service.InstanceServiceMgr().Init() @@ -36,6 +41,10 @@ func (s *COriginNode) Init() { signal.Notify(s.sigs, syscall.SIGINT, syscall.SIGTERM) } +func (s *COriginNode) OpenDebugCheck() { + s.debugCheck = true +} + func (s *COriginNode) SetupService(services ...service.IService) { for i := 0; i < len(services); i++ { if cluster.InstanceClusterMgr().HasLocalService(services[i].GetServiceName()) == true { @@ -62,11 +71,15 @@ func (s *COriginNode) SetupService(services ...service.IService) { } func (s *COriginNode) Start() { - go func() { + if s.debugCheck == true { + go func() { + + log.Println(http.ListenAndServe("localhost:6060", nil)) + }() + } - log.Println(http.ListenAndServe("localhost:6060", nil)) - }() cluster.InstanceClusterMgr().Start() + RunGlobalModule(s.exit, s.waitGroup) service.InstanceServiceMgr().Start(s.exit, s.waitGroup) select { @@ -83,6 +96,11 @@ func (s *COriginNode) Stop() { } func NewOrginNode() *COriginNode { + var syslogmodule sysmodule.LogModule + syslogmodule.Init("system", sysmodule.LEVER_INFO) + syslogmodule.SetModuleType(sysmodule.SYS_LOG) + AddModule(&syslogmodule) + err := cluster.InstanceClusterMgr().Init() if err != nil { fmt.Print(err) diff --git a/service/Service.go b/service/Service.go index 827789c..a093257 100644 --- a/service/Service.go +++ b/service/Service.go @@ -53,14 +53,14 @@ var Log *log.Logger var logFile *os.File func InitLog() { - fileName := "log.log" + fileName := "system-" + time.Now().Format("2006-01-02") + ".log" var err error logFile, err = os.Create(fileName) if err != nil { log.Fatalln("open file error") } - Log = log.New(logFile, "", log.LstdFlags) + Log = log.New(logFile, "", log.Lshortfile|log.LstdFlags) } type BaseService struct { @@ -158,8 +158,6 @@ func (slf *BaseModule) GetModuleType() uint32 { return slf.moduleType } -//OnInit() error -//OnRun() error func (slf *BaseModule) AddModule(module IModule) bool { if module.GetModuleType() == 0 { return false diff --git a/sysmodule/LogModule.go b/sysmodule/LogModule.go new file mode 100644 index 0000000..0ea2bc5 --- /dev/null +++ b/sysmodule/LogModule.go @@ -0,0 +1,92 @@ +package sysmodule + +import ( + "fmt" + "log" + "os" + "time" + + "github.com/duanhf2012/origin/service" +) + +//等级从低到高 +const ( + LEVER_UNKNOW = 0 + LEVER_DEBUG = 1 + LEVER_INFO = 2 + LEVER_WARN = 3 + LEVER_ERROR = 4 + LEVER_FATAL = 5 + LEVEL_MAX = 6 +) + +var LogPrefix = [LEVEL_MAX]string{"[UNKNOW]", "[DEBUG]", "[INFO]", "[WARN]", "[ERROR]", "[FATAL]"} + +type ILogger interface { + Printf(level uint, format string, v ...interface{}) + Print(level uint, v ...interface{}) +} + +type LogModule struct { + service.BaseModule + currentDay int + logfilename string + logger [LEVEL_MAX]*log.Logger + logFile *os.File + openLevel uint +} + +func (slf *LogModule) GetCurrentFileName() string { + return slf.logfilename + "-" + time.Now().Format("2006-01-02") + ".log" +} + +func (slf *LogModule) CheckAndGenFile() { + if time.Now().Day() != slf.currentDay { + slf.currentDay = time.Now().Day() + if slf.logFile != nil { + slf.logFile.Close() + } + + var err error + slf.logFile, err = os.Create(slf.GetCurrentFileName()) + if err != nil { + fmt.Print("create log file %s error!", slf.GetCurrentFileName()) + return + } + + for level := 0; level < LEVEL_MAX; level++ { + slf.logger[level] = log.New(slf.logFile, LogPrefix[level], log.Lshortfile|log.LstdFlags) + } + } +} + +func (slf *LogModule) Init(logfilename string, openLevel uint) { + slf.currentDay = 0 + slf.logfilename = logfilename + slf.openLevel = openLevel +} + +func (slf *LogModule) GetLoggerByLevel(level uint) *log.Logger { + if level >= LEVEL_MAX { + level = 0 + } + return slf.logger[level] +} + +func (slf *LogModule) Printf(level uint, format string, v ...interface{}) { + if level < slf.openLevel { + return + } + + slf.CheckAndGenFile() + slf.GetLoggerByLevel(level).Printf(format, v...) +} + +func (slf *LogModule) Print(level uint, v ...interface{}) { + if level < slf.openLevel { + return + } + + slf.CheckAndGenFile() + slf.GetLoggerByLevel(level).Print(v...) +} diff --git a/sysmodule/SystemModuleDef.go b/sysmodule/SystemModuleDef.go new file mode 100644 index 0000000..f4380f1 --- /dev/null +++ b/sysmodule/SystemModuleDef.go @@ -0,0 +1,7 @@ +package sysmodule + +//等级从低到高 +const ( + SYS_LOG = 1 + SYS_TEST = 2 +)