mirror of
https://github.com/go-admin-team/go-admin.git
synced 2026-09-20 17:57:54 +00:00
logger模块移入go-admin-core仓库,修改log用法暂时折中
fixme:后期要尽快改成统一的log处理方式
This commit is contained in:
@@ -2,9 +2,9 @@ package system
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
mycasbin "go-admin/pkg/casbin"
|
|
||||||
|
|
||||||
"go-admin/app/admin/models"
|
"go-admin/app/admin/models"
|
||||||
|
"go-admin/common/global"
|
||||||
"go-admin/tools"
|
"go-admin/tools"
|
||||||
"go-admin/tools/app"
|
"go-admin/tools/app"
|
||||||
)
|
)
|
||||||
@@ -88,7 +88,7 @@ func InsertRole(c *gin.Context) {
|
|||||||
tools.HasError(err, "", -1)
|
tools.HasError(err, "", -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = mycasbin.LoadPolicy()
|
_, err = global.LoadPolicy()
|
||||||
tools.HasError(err, "", -1)
|
tools.HasError(err, "", -1)
|
||||||
|
|
||||||
app.OK(c, data, "添加成功")
|
app.OK(c, data, "添加成功")
|
||||||
@@ -118,7 +118,7 @@ func UpdateRole(c *gin.Context) {
|
|||||||
tools.HasError(err2, "修改失败(insert)", -1)
|
tools.HasError(err2, "修改失败(insert)", -1)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = mycasbin.LoadPolicy()
|
_, err = global.LoadPolicy()
|
||||||
tools.HasError(err, "", -1)
|
tools.HasError(err, "", -1)
|
||||||
|
|
||||||
app.OK(c, result, "修改成功")
|
app.OK(c, result, "修改成功")
|
||||||
@@ -156,7 +156,7 @@ func DeleteRole(c *gin.Context) {
|
|||||||
_, err := Role.BatchDelete(IDS)
|
_, err := Role.BatchDelete(IDS)
|
||||||
tools.HasError(err, "删除失败", -1)
|
tools.HasError(err, "删除失败", -1)
|
||||||
|
|
||||||
_, err = mycasbin.LoadPolicy()
|
_, err = global.LoadPolicy()
|
||||||
tools.HasError(err, "", -1)
|
tools.HasError(err, "", -1)
|
||||||
|
|
||||||
app.OK(c, "", "删除成功")
|
app.OK(c, "", "删除成功")
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
package middleware
|
package middleware
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"go-admin/common/log"
|
|
||||||
"go-admin/tools/app"
|
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
|
|
||||||
mycasbin "go-admin/pkg/casbin"
|
"go-admin/common/global"
|
||||||
|
"go-admin/common/log"
|
||||||
"go-admin/pkg/jwtauth"
|
"go-admin/pkg/jwtauth"
|
||||||
"go-admin/tools"
|
"go-admin/tools"
|
||||||
|
"go-admin/tools/app"
|
||||||
)
|
)
|
||||||
|
|
||||||
//权限检查中间件
|
//权限检查中间件
|
||||||
@@ -17,15 +17,15 @@ func AuthCheckRole() gin.HandlerFunc {
|
|||||||
return func(c *gin.Context) {
|
return func(c *gin.Context) {
|
||||||
data, _ := c.Get(jwtauth.JwtPayloadKey)
|
data, _ := c.Get(jwtauth.JwtPayloadKey)
|
||||||
v := data.(jwtauth.MapClaims)
|
v := data.(jwtauth.MapClaims)
|
||||||
e := mycasbin.Casbin()
|
e := global.CasbinEnforcer
|
||||||
var res bool
|
var res bool
|
||||||
var err error
|
var err error
|
||||||
msgID := tools.GenerateMsgIDFromContext(c)
|
msgID := tools.GenerateMsgIDFromContext(c)
|
||||||
//检查权限
|
//检查权限
|
||||||
if v["rolekey"]=="admin" {
|
if v["rolekey"] == "admin" {
|
||||||
res = true
|
res = true
|
||||||
log.Infof("msgID[%s] info:%s method:%s path:%s", msgID, v["rolekey"], c.Request.Method, c.Request.URL.Path)
|
log.Infof("msgID[%s] info:%s method:%s path:%s", msgID, v["rolekey"], c.Request.Method, c.Request.URL.Path)
|
||||||
}else {
|
} else {
|
||||||
res, err = e.Enforce(v["rolekey"], c.Request.URL.Path, c.Request.Method)
|
res, err = e.Enforce(v["rolekey"], c.Request.URL.Path, c.Request.Method)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Errorf("msgID[%s] error:%s method:%s path:%s", msgID, err, c.Request.Method, c.Request.URL.Path)
|
log.Errorf("msgID[%s] error:%s method:%s path:%s", msgID, err, c.Request.Method, c.Request.URL.Path)
|
||||||
|
|||||||
+8
-7
@@ -17,6 +17,7 @@ import (
|
|||||||
"go-admin/app/jobs"
|
"go-admin/app/jobs"
|
||||||
"go-admin/common/database"
|
"go-admin/common/database"
|
||||||
"go-admin/common/global"
|
"go-admin/common/global"
|
||||||
|
"go-admin/common/log"
|
||||||
mycasbin "go-admin/pkg/casbin"
|
mycasbin "go-admin/pkg/casbin"
|
||||||
"go-admin/pkg/logger"
|
"go-admin/pkg/logger"
|
||||||
"go-admin/tools"
|
"go-admin/tools"
|
||||||
@@ -57,14 +58,14 @@ func setup() {
|
|||||||
//1. 读取配置
|
//1. 读取配置
|
||||||
config.Setup(configYml)
|
config.Setup(configYml)
|
||||||
//2. 设置日志
|
//2. 设置日志
|
||||||
logger.Setup()
|
global.Logger, global.JobLogger, global.RequestLogger = logger.Setup()
|
||||||
//3. 初始化数据库链接
|
//3. 初始化数据库链接
|
||||||
database.Setup(config.DatabaseConfig.Driver)
|
database.Setup(config.DatabaseConfig.Driver)
|
||||||
//4. 接口访问控制加载
|
//4. 接口访问控制加载
|
||||||
mycasbin.Setup()
|
global.CasbinEnforcer = mycasbin.Setup(global.Eloquent, "sys_")
|
||||||
|
|
||||||
usageStr := `starting api server`
|
usageStr := `starting api server`
|
||||||
global.Logger.Info(usageStr)
|
log.Info(usageStr)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -100,11 +101,11 @@ func run() error {
|
|||||||
// 服务连接
|
// 服务连接
|
||||||
if config.SslConfig.Enable {
|
if config.SslConfig.Enable {
|
||||||
if err := srv.ListenAndServeTLS(config.SslConfig.Pem, config.SslConfig.KeyStr); err != nil && err != http.ErrServerClosed {
|
if err := srv.ListenAndServeTLS(config.SslConfig.Pem, config.SslConfig.KeyStr); err != nil && err != http.ErrServerClosed {
|
||||||
global.Logger.Fatal("listen: ", err)
|
log.Fatal("listen: ", err)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
|
||||||
global.Logger.Fatal("listen: ", err)
|
log.Fatal("listen: ", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
@@ -127,9 +128,9 @@ func run() error {
|
|||||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
if err := srv.Shutdown(ctx); err != nil {
|
if err := srv.Shutdown(ctx); err != nil {
|
||||||
global.Logger.Fatal("Server Shutdown:", err)
|
log.Fatal("Server Shutdown:", err)
|
||||||
}
|
}
|
||||||
global.Logger.Println("Server exiting")
|
log.Info("Server exiting")
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ func run() {
|
|||||||
//1. 读取配置
|
//1. 读取配置
|
||||||
config.Setup(configYml)
|
config.Setup(configYml)
|
||||||
//2. 设置日志
|
//2. 设置日志
|
||||||
logger.Setup()
|
global.Logger, global.JobLogger, global.RequestLogger = logger.Setup()
|
||||||
_ = initDB()
|
_ = initDB()
|
||||||
} else {
|
} else {
|
||||||
_ = genFile()
|
_ = genFile()
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import (
|
|||||||
"database/sql"
|
"database/sql"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"go-admin/logger"
|
"github.com/go-admin-team/go-admin-core/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package config
|
|||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
|
|
||||||
"go-admin/logger"
|
"github.com/go-admin-team/go-admin-core/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Conf interface {
|
type Conf interface {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ package database
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"log"
|
. "log"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"gorm.io/driver/mysql"
|
"gorm.io/driver/mysql"
|
||||||
@@ -10,9 +10,10 @@ import (
|
|||||||
"gorm.io/gorm/logger"
|
"gorm.io/gorm/logger"
|
||||||
"gorm.io/gorm/schema"
|
"gorm.io/gorm/schema"
|
||||||
|
|
||||||
|
goAdminLogger "github.com/go-admin-team/go-admin-core/logger"
|
||||||
"go-admin/common/config"
|
"go-admin/common/config"
|
||||||
"go-admin/common/global"
|
"go-admin/common/global"
|
||||||
goAdminLogger "go-admin/logger"
|
"go-admin/common/log"
|
||||||
"go-admin/tools"
|
"go-admin/tools"
|
||||||
toolsConfig "go-admin/tools/config"
|
toolsConfig "go-admin/tools/config"
|
||||||
)
|
)
|
||||||
@@ -22,10 +23,10 @@ type Mysql struct {
|
|||||||
|
|
||||||
func (e *Mysql) Setup() {
|
func (e *Mysql) Setup() {
|
||||||
global.Source = e.GetConnect()
|
global.Source = e.GetConnect()
|
||||||
global.Logger.Info(tools.Green(global.Source))
|
log.Info(tools.Green(global.Source))
|
||||||
db, err := sql.Open("mysql", global.Source)
|
db, err := sql.Open("mysql", global.Source)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Logger.Fatal(tools.Red(e.GetDriver()+" connect error :"), err)
|
log.Fatal(tools.Red(e.GetDriver()+" connect error :"), err)
|
||||||
}
|
}
|
||||||
global.Cfg.SetDb(&config.DBConfig{
|
global.Cfg.SetDb(&config.DBConfig{
|
||||||
Driver: "mysql",
|
Driver: "mysql",
|
||||||
@@ -37,18 +38,18 @@ func (e *Mysql) Setup() {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Logger.Fatal(tools.Red(e.GetDriver()+" connect error :"), err)
|
log.Fatal(tools.Red(e.GetDriver()+" connect error :"), err)
|
||||||
} else {
|
} else {
|
||||||
global.Logger.Info(tools.Green(e.GetDriver() + " connect success !"))
|
log.Info(tools.Green(e.GetDriver() + " connect success !"))
|
||||||
}
|
}
|
||||||
|
|
||||||
if global.Eloquent.Error != nil {
|
if global.Eloquent.Error != nil {
|
||||||
global.Logger.Fatal(tools.Red(" database error :"), global.Eloquent.Error)
|
log.Fatal(tools.Red(" database error :"), global.Eloquent.Error)
|
||||||
}
|
}
|
||||||
|
|
||||||
if toolsConfig.LoggerConfig.EnabledDB {
|
if toolsConfig.LoggerConfig.EnabledDB {
|
||||||
global.Eloquent.Logger = logger.New(
|
global.Eloquent.Logger = logger.New(
|
||||||
log.New(goAdminLogger.DefaultLogger.Options().Out, "\r\n", log.LstdFlags),
|
New(goAdminLogger.DefaultLogger.Options().Out, "\r\n", LstdFlags),
|
||||||
logger.Config{
|
logger.Config{
|
||||||
SlowThreshold: time.Second,
|
SlowThreshold: time.Second,
|
||||||
Colorful: true,
|
Colorful: true,
|
||||||
|
|||||||
@@ -2,7 +2,8 @@ package database
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"log"
|
"go-admin/common/log"
|
||||||
|
. "log"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"gorm.io/driver/postgres"
|
"gorm.io/driver/postgres"
|
||||||
@@ -10,9 +11,9 @@ import (
|
|||||||
"gorm.io/gorm/logger"
|
"gorm.io/gorm/logger"
|
||||||
"gorm.io/gorm/schema"
|
"gorm.io/gorm/schema"
|
||||||
|
|
||||||
|
goAdminLogger "github.com/go-admin-team/go-admin-core/logger"
|
||||||
"go-admin/common/config"
|
"go-admin/common/config"
|
||||||
"go-admin/common/global"
|
"go-admin/common/global"
|
||||||
goAdminLogger "go-admin/logger"
|
|
||||||
"go-admin/tools"
|
"go-admin/tools"
|
||||||
toolsConfig "go-admin/tools/config"
|
toolsConfig "go-admin/tools/config"
|
||||||
)
|
)
|
||||||
@@ -24,7 +25,7 @@ func (e *PgSql) Setup() {
|
|||||||
var err error
|
var err error
|
||||||
|
|
||||||
global.Source = e.GetConnect()
|
global.Source = e.GetConnect()
|
||||||
log.Println(global.Source)
|
log.Info(global.Source)
|
||||||
db, err := sql.Open("postgresql", global.Source)
|
db, err := sql.Open("postgresql", global.Source)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Logger.Fatal(tools.Red(e.GetDriver()+" connect error :"), err)
|
global.Logger.Fatal(tools.Red(e.GetDriver()+" connect error :"), err)
|
||||||
@@ -41,7 +42,7 @@ func (e *PgSql) Setup() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("%s connect error %v", e.GetDriver(), err)
|
log.Fatalf("%s connect error %v", e.GetDriver(), err)
|
||||||
} else {
|
} else {
|
||||||
log.Printf("%s connect success!", e.GetDriver())
|
log.Infof("%s connect success!", e.GetDriver())
|
||||||
}
|
}
|
||||||
|
|
||||||
if global.Eloquent.Error != nil {
|
if global.Eloquent.Error != nil {
|
||||||
@@ -50,7 +51,7 @@ func (e *PgSql) Setup() {
|
|||||||
|
|
||||||
if toolsConfig.LoggerConfig.EnabledDB {
|
if toolsConfig.LoggerConfig.EnabledDB {
|
||||||
global.Eloquent.Logger = logger.New(
|
global.Eloquent.Logger = logger.New(
|
||||||
log.New(goAdminLogger.DefaultLogger.Options().Out, "\r\n", log.LstdFlags),
|
New(goAdminLogger.DefaultLogger.Options().Out, "\r\n", LstdFlags),
|
||||||
logger.Config{
|
logger.Config{
|
||||||
SlowThreshold: time.Second,
|
SlowThreshold: time.Second,
|
||||||
Colorful: true,
|
Colorful: true,
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ package database
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"log"
|
. "log"
|
||||||
"os"
|
"os"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
@@ -15,6 +15,7 @@ import (
|
|||||||
|
|
||||||
"go-admin/common/config"
|
"go-admin/common/config"
|
||||||
"go-admin/common/global"
|
"go-admin/common/global"
|
||||||
|
"go-admin/common/log"
|
||||||
"go-admin/tools"
|
"go-admin/tools"
|
||||||
toolsConfig "go-admin/tools/config"
|
toolsConfig "go-admin/tools/config"
|
||||||
)
|
)
|
||||||
@@ -26,7 +27,7 @@ func (e *SqLite) Setup() {
|
|||||||
var err error
|
var err error
|
||||||
|
|
||||||
global.Source = e.GetConnect()
|
global.Source = e.GetConnect()
|
||||||
log.Println(global.Source)
|
log.Info(global.Source)
|
||||||
db, err := sql.Open("sqlite3", global.Source)
|
db, err := sql.Open("sqlite3", global.Source)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
global.Logger.Fatal(tools.Red(e.GetDriver()+" connect error :"), err)
|
global.Logger.Fatal(tools.Red(e.GetDriver()+" connect error :"), err)
|
||||||
@@ -44,7 +45,7 @@ func (e *SqLite) Setup() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("%s connect error %v", e.GetDriver(), err)
|
log.Fatalf("%s connect error %v", e.GetDriver(), err)
|
||||||
} else {
|
} else {
|
||||||
log.Printf("%s connect success!", e.GetDriver())
|
log.Infof("%s connect success!", e.GetDriver())
|
||||||
}
|
}
|
||||||
|
|
||||||
if global.Eloquent.Error != nil {
|
if global.Eloquent.Error != nil {
|
||||||
@@ -52,11 +53,13 @@ func (e *SqLite) Setup() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if toolsConfig.LoggerConfig.EnabledDB {
|
if toolsConfig.LoggerConfig.EnabledDB {
|
||||||
global.Eloquent.Logger = logger.New(log.New(os.Stdout, "\r\n", log.LstdFlags), logger.Config{
|
global.Eloquent.Logger = logger.New(
|
||||||
SlowThreshold: time.Second,
|
New(os.Stdout, "\r\n", LstdFlags), logger.Config{
|
||||||
Colorful: true,
|
SlowThreshold: time.Second,
|
||||||
LogLevel: logger.Info,
|
Colorful: true,
|
||||||
})
|
LogLevel: logger.Info,
|
||||||
|
},
|
||||||
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,9 @@ import (
|
|||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/gogf/gf/os/glog"
|
"github.com/gogf/gf/os/glog"
|
||||||
"github.com/robfig/cron/v3"
|
"github.com/robfig/cron/v3"
|
||||||
"go-admin/common/config"
|
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
|
|
||||||
|
"go-admin/common/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|||||||
@@ -0,0 +1,15 @@
|
|||||||
|
package global
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/casbin/casbin/v2"
|
||||||
|
"github.com/casbin/casbin/v2/log"
|
||||||
|
)
|
||||||
|
|
||||||
|
func LoadPolicy() (*casbin.SyncedEnforcer, error) {
|
||||||
|
if err := CasbinEnforcer.LoadPolicy(); err == nil {
|
||||||
|
return CasbinEnforcer, err
|
||||||
|
} else {
|
||||||
|
log.LogPrintf("casbin rbac_model or policy init error, message: %v \r\n", err.Error())
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
package log
|
package log
|
||||||
|
|
||||||
import "go-admin/logger"
|
import "github.com/go-admin-team/go-admin-core/logger"
|
||||||
|
|
||||||
var (
|
var (
|
||||||
// Trace trace级日志输出
|
// Trace trace级日志输出
|
||||||
|
|||||||
@@ -1,56 +0,0 @@
|
|||||||
// Package log provides debug logging
|
|
||||||
package log
|
|
||||||
|
|
||||||
import (
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"time"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
// Default buffer size if any
|
|
||||||
DefaultSize = 256
|
|
||||||
// Default formatter
|
|
||||||
DefaultFormat = TextFormat
|
|
||||||
)
|
|
||||||
|
|
||||||
// Log is debug log interface for reading and writing logs
|
|
||||||
type Log interface {
|
|
||||||
// Read reads log entries from the logger
|
|
||||||
Read(...ReadOption) ([]Record, error)
|
|
||||||
// Write writes records to log
|
|
||||||
Write(Record) error
|
|
||||||
// Stream log records
|
|
||||||
Stream() (Stream, error)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Record is log record entry
|
|
||||||
type Record struct {
|
|
||||||
// Timestamp of logged event
|
|
||||||
Timestamp time.Time `json:"timestamp"`
|
|
||||||
// Metadata to enrich log record
|
|
||||||
Metadata map[string]string `json:"metadata"`
|
|
||||||
// Value contains log entry
|
|
||||||
Message interface{} `json:"message"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// Stream returns a log stream
|
|
||||||
type Stream interface {
|
|
||||||
Chan() <-chan Record
|
|
||||||
Stop() error
|
|
||||||
}
|
|
||||||
|
|
||||||
// Format is a function which formats the output
|
|
||||||
type FormatFunc func(Record) string
|
|
||||||
|
|
||||||
// TextFormat returns text format
|
|
||||||
func TextFormat(r Record) string {
|
|
||||||
t := r.Timestamp.Format("2006-01-02 15:04:05")
|
|
||||||
return fmt.Sprintf("%s %v", t, r.Message)
|
|
||||||
}
|
|
||||||
|
|
||||||
// JSONFormat is a json Format func
|
|
||||||
func JSONFormat(r Record) string {
|
|
||||||
b, _ := json.Marshal(r)
|
|
||||||
return string(b)
|
|
||||||
}
|
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
package log
|
|
||||||
|
|
||||||
import "time"
|
|
||||||
|
|
||||||
// Option used by the logger
|
|
||||||
type Option func(*Options)
|
|
||||||
|
|
||||||
// Options are logger options
|
|
||||||
type Options struct {
|
|
||||||
// Name of the log
|
|
||||||
Name string
|
|
||||||
// Size is the size of ring buffer
|
|
||||||
Size int
|
|
||||||
// Format specifies the output format
|
|
||||||
Format FormatFunc
|
|
||||||
}
|
|
||||||
|
|
||||||
// Name of the log
|
|
||||||
func Name(n string) Option {
|
|
||||||
return func(o *Options) {
|
|
||||||
o.Name = n
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Size sets the size of the ring buffer
|
|
||||||
func Size(s int) Option {
|
|
||||||
return func(o *Options) {
|
|
||||||
o.Size = s
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func Format(f FormatFunc) Option {
|
|
||||||
return func(o *Options) {
|
|
||||||
o.Format = f
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// DefaultOptions returns default options
|
|
||||||
func DefaultOptions() Options {
|
|
||||||
return Options{
|
|
||||||
Size: DefaultSize,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// ReadOptions for querying the logs
|
|
||||||
type ReadOptions struct {
|
|
||||||
// Since what time in past to return the logs
|
|
||||||
Since time.Time
|
|
||||||
// Count specifies number of logs to return
|
|
||||||
Count int
|
|
||||||
// Stream requests continuous log stream
|
|
||||||
Stream bool
|
|
||||||
}
|
|
||||||
|
|
||||||
// ReadOption used for reading the logs
|
|
||||||
type ReadOption func(*ReadOptions)
|
|
||||||
|
|
||||||
// Since sets the time since which to return the log records
|
|
||||||
func Since(s time.Time) ReadOption {
|
|
||||||
return func(o *ReadOptions) {
|
|
||||||
o.Since = s
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Count sets the number of log records to return
|
|
||||||
func Count(c int) ReadOption {
|
|
||||||
return func(o *ReadOptions) {
|
|
||||||
o.Count = c
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+2
-2
@@ -20,8 +20,8 @@ func main() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
mycasbin.Setup()
|
global.CasbinEnforcer = mycasbin.Setup(global.Eloquent, "sys_")
|
||||||
logger.Setup()
|
global.Logger, global.JobLogger, global.RequestLogger = logger.Setup()
|
||||||
global.GinEngine = gin.Default()
|
global.GinEngine = gin.Default()
|
||||||
//router.InitRouter()
|
//router.InitRouter()
|
||||||
log.Fatal(global.GinEngine.Run(":8000"))
|
log.Fatal(global.GinEngine.Run(":8000"))
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ require (
|
|||||||
github.com/casbin/gorm-adapter/v3 v3.0.2
|
github.com/casbin/gorm-adapter/v3 v3.0.2
|
||||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
github.com/dgrijalva/jwt-go v3.2.0+incompatible
|
||||||
github.com/gin-gonic/gin v1.6.3
|
github.com/gin-gonic/gin v1.6.3
|
||||||
github.com/go-admin-team/go-admin-core v1.2.1
|
github.com/go-admin-team/go-admin-core v1.2.2-0.20201026083717-3ca6060dfd3c
|
||||||
github.com/go-redis/redis/v7 v7.4.0
|
github.com/go-redis/redis/v7 v7.4.0
|
||||||
github.com/go-sql-driver/mysql v1.5.0
|
github.com/go-sql-driver/mysql v1.5.0
|
||||||
github.com/gogf/gf v1.13.4
|
github.com/gogf/gf v1.13.4
|
||||||
|
|||||||
@@ -187,8 +187,8 @@ github.com/git-chglog/git-chglog v0.0.0-20190923122001-6050f20bcdb0 h1:rdQovo0Jt
|
|||||||
github.com/git-chglog/git-chglog v0.0.0-20190923122001-6050f20bcdb0/go.mod h1:Dcsy1kii/xFyNad5JqY/d0GO5mu91sungp5xotbm3Yk=
|
github.com/git-chglog/git-chglog v0.0.0-20190923122001-6050f20bcdb0/go.mod h1:Dcsy1kii/xFyNad5JqY/d0GO5mu91sungp5xotbm3Yk=
|
||||||
github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
|
github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
|
||||||
github.com/go-acme/lego/v3 v3.4.0/go.mod h1:xYbLDuxq3Hy4bMUT1t9JIuz6GWIWb3m5X+TeTHYaT7M=
|
github.com/go-acme/lego/v3 v3.4.0/go.mod h1:xYbLDuxq3Hy4bMUT1t9JIuz6GWIWb3m5X+TeTHYaT7M=
|
||||||
github.com/go-admin-team/go-admin-core v1.2.1 h1:Ko9PSuQhi6YXA29iXYk8resTQ9iM46TjdHYZII0DZS4=
|
github.com/go-admin-team/go-admin-core v1.2.2-0.20201026083717-3ca6060dfd3c h1:Ltad1Ux6Loha/wrv/KReJevMvPChYsqCRzkVBoW3Qkk=
|
||||||
github.com/go-admin-team/go-admin-core v1.2.1/go.mod h1:uDLyMASlSXDnFD34V1U0w8tDaBdstc/JM3xhi+eGIEk=
|
github.com/go-admin-team/go-admin-core v1.2.2-0.20201026083717-3ca6060dfd3c/go.mod h1:uDLyMASlSXDnFD34V1U0w8tDaBdstc/JM3xhi+eGIEk=
|
||||||
github.com/go-cmd/cmd v1.0.5/go.mod h1:y8q8qlK5wQibcw63djSl/ntiHUHXHGdCkPk0j4QeW4s=
|
github.com/go-cmd/cmd v1.0.5/go.mod h1:y8q8qlK5wQibcw63djSl/ntiHUHXHGdCkPk0j4QeW4s=
|
||||||
github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
|
github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q=
|
||||||
github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
|
github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E=
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
package logger
|
|
||||||
|
|
||||||
import "context"
|
|
||||||
|
|
||||||
type loggerKey struct{}
|
|
||||||
|
|
||||||
func FromContext(ctx context.Context) (Logger, bool) {
|
|
||||||
l, ok := ctx.Value(loggerKey{}).(Logger)
|
|
||||||
return l, ok
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewContext(ctx context.Context, l Logger) context.Context {
|
|
||||||
return context.WithValue(ctx, loggerKey{}, l)
|
|
||||||
}
|
|
||||||
@@ -1,194 +0,0 @@
|
|||||||
package logger
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"os"
|
|
||||||
"runtime"
|
|
||||||
"sort"
|
|
||||||
"strings"
|
|
||||||
"sync"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
dlog "go-admin/debug/log"
|
|
||||||
)
|
|
||||||
|
|
||||||
func init() {
|
|
||||||
lvl, err := GetLevel(os.Getenv("GO_ADMIN_LOG_LEVEL"))
|
|
||||||
if err != nil {
|
|
||||||
lvl = InfoLevel
|
|
||||||
}
|
|
||||||
|
|
||||||
DefaultLogger = NewHelper(NewLogger(WithLevel(lvl)))
|
|
||||||
}
|
|
||||||
|
|
||||||
type defaultLogger struct {
|
|
||||||
sync.RWMutex
|
|
||||||
opts Options
|
|
||||||
}
|
|
||||||
|
|
||||||
// Init(opts...) should only overwrite provided options
|
|
||||||
func (l *defaultLogger) Init(opts ...Option) error {
|
|
||||||
for _, o := range opts {
|
|
||||||
o(&l.opts)
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *defaultLogger) String() string {
|
|
||||||
return "default"
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *defaultLogger) Fields(fields map[string]interface{}) Logger {
|
|
||||||
l.Lock()
|
|
||||||
l.opts.Fields = copyFields(fields)
|
|
||||||
l.Unlock()
|
|
||||||
return l
|
|
||||||
}
|
|
||||||
|
|
||||||
func copyFields(src map[string]interface{}) map[string]interface{} {
|
|
||||||
dst := make(map[string]interface{}, len(src))
|
|
||||||
for k, v := range src {
|
|
||||||
dst[k] = v
|
|
||||||
}
|
|
||||||
return dst
|
|
||||||
}
|
|
||||||
|
|
||||||
// logCallerfilePath returns a package/file:line description of the caller,
|
|
||||||
// preserving only the leaf directory name and file name.
|
|
||||||
func logCallerfilePath(loggingFilePath string) string {
|
|
||||||
// To make sure we trim the path correctly on Windows too, we
|
|
||||||
// counter-intuitively need to use '/' and *not* os.PathSeparator here,
|
|
||||||
// because the path given originates from Go stdlib, specifically
|
|
||||||
// runtime.Caller() which (as of Mar/17) returns forward slashes even on
|
|
||||||
// Windows.
|
|
||||||
//
|
|
||||||
// See https://github.com/golang/go/issues/3335
|
|
||||||
// and https://github.com/golang/go/issues/18151
|
|
||||||
//
|
|
||||||
// for discussion on the issue on Go side.
|
|
||||||
idx := strings.LastIndexByte(loggingFilePath, '/')
|
|
||||||
if idx == -1 {
|
|
||||||
return loggingFilePath
|
|
||||||
}
|
|
||||||
idx = strings.LastIndexByte(loggingFilePath[:idx], '/')
|
|
||||||
if idx == -1 {
|
|
||||||
return loggingFilePath
|
|
||||||
}
|
|
||||||
return loggingFilePath[idx+1:]
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *defaultLogger) Log(level Level, v ...interface{}) {
|
|
||||||
// TODO decide does we need to write message if log level not used?
|
|
||||||
if !l.opts.Level.Enabled(level) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
l.RLock()
|
|
||||||
fields := copyFields(l.opts.Fields)
|
|
||||||
l.RUnlock()
|
|
||||||
|
|
||||||
fields["level"] = level.String()
|
|
||||||
|
|
||||||
if _, file, line, ok := runtime.Caller(l.opts.CallerSkipCount); ok {
|
|
||||||
fields["file"] = fmt.Sprintf("%s:%d", logCallerfilePath(file), line)
|
|
||||||
}
|
|
||||||
|
|
||||||
rec := dlog.Record{
|
|
||||||
Timestamp: time.Now(),
|
|
||||||
Message: fmt.Sprint(v...),
|
|
||||||
Metadata: make(map[string]string, len(fields)),
|
|
||||||
}
|
|
||||||
|
|
||||||
keys := make([]string, 0, len(fields))
|
|
||||||
for k, v := range fields {
|
|
||||||
keys = append(keys, k)
|
|
||||||
rec.Metadata[k] = fmt.Sprintf("%v", v)
|
|
||||||
}
|
|
||||||
|
|
||||||
sort.Strings(keys)
|
|
||||||
metadata := ""
|
|
||||||
|
|
||||||
for _, k := range keys {
|
|
||||||
metadata += fmt.Sprintf(" %s=%v", k, fields[k])
|
|
||||||
}
|
|
||||||
|
|
||||||
t := rec.Timestamp.Format("2006-01-02 15:04:05")
|
|
||||||
_, err := l.opts.Out.Write([]byte(fmt.Sprintf("%s %s %v\n", t, metadata, rec.Message)))
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("log [Log] write error: %s \n", err.Error())
|
|
||||||
}
|
|
||||||
//fmt.Printf("%s %s %v\n", t, metadata, rec.Message)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *defaultLogger) Logf(level Level, format string, v ...interface{}) {
|
|
||||||
// TODO decide does we need to write message if log level not used?
|
|
||||||
if level < l.opts.Level {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
l.RLock()
|
|
||||||
fields := copyFields(l.opts.Fields)
|
|
||||||
l.RUnlock()
|
|
||||||
|
|
||||||
fields["level"] = level.String()
|
|
||||||
|
|
||||||
if _, file, line, ok := runtime.Caller(l.opts.CallerSkipCount); ok {
|
|
||||||
fields["file"] = fmt.Sprintf("%s:%d", logCallerfilePath(file), line)
|
|
||||||
}
|
|
||||||
|
|
||||||
rec := dlog.Record{
|
|
||||||
Timestamp: time.Now(),
|
|
||||||
Message: fmt.Sprintf(format, v...),
|
|
||||||
Metadata: make(map[string]string, len(fields)),
|
|
||||||
}
|
|
||||||
|
|
||||||
keys := make([]string, 0, len(fields))
|
|
||||||
for k, v := range fields {
|
|
||||||
keys = append(keys, k)
|
|
||||||
rec.Metadata[k] = fmt.Sprintf("%v", v)
|
|
||||||
}
|
|
||||||
|
|
||||||
sort.Strings(keys)
|
|
||||||
metadata := ""
|
|
||||||
|
|
||||||
for _, k := range keys {
|
|
||||||
metadata += fmt.Sprintf(" %s=%v", k, fields[k])
|
|
||||||
}
|
|
||||||
|
|
||||||
t := rec.Timestamp.Format("2006-01-02 15:04:05")
|
|
||||||
//fmt.Printf("%s %s %v\n", t, metadata, rec.Message)
|
|
||||||
_, err := l.opts.Out.Write([]byte(fmt.Sprintf("%s %s %v\n", t, metadata, rec.Message)))
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("log [Logf] write error: %s \n", err.Error())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (l *defaultLogger) Options() Options {
|
|
||||||
// not guard against options Context values
|
|
||||||
l.RLock()
|
|
||||||
opts := l.opts
|
|
||||||
opts.Fields = copyFields(l.opts.Fields)
|
|
||||||
l.RUnlock()
|
|
||||||
return opts
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewLogger builds a new logger based on options
|
|
||||||
func NewLogger(opts ...Option) Logger {
|
|
||||||
// Default options
|
|
||||||
options := Options{
|
|
||||||
Level: InfoLevel,
|
|
||||||
Fields: make(map[string]interface{}),
|
|
||||||
Out: os.Stderr,
|
|
||||||
CallerSkipCount: 2,
|
|
||||||
Context: context.Background(),
|
|
||||||
}
|
|
||||||
|
|
||||||
l := &defaultLogger{opts: options}
|
|
||||||
if err := l.Init(opts...); err != nil {
|
|
||||||
l.Log(FatalLevel, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
return l
|
|
||||||
}
|
|
||||||
@@ -1,114 +0,0 @@
|
|||||||
package logger
|
|
||||||
|
|
||||||
import (
|
|
||||||
"os"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Helper struct {
|
|
||||||
Logger
|
|
||||||
fields map[string]interface{}
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewHelper(log Logger) *Helper {
|
|
||||||
return &Helper{Logger: log}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Helper) Info(args ...interface{}) {
|
|
||||||
if !h.Logger.Options().Level.Enabled(InfoLevel) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
h.Logger.Fields(h.fields).Log(InfoLevel, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Helper) Infof(template string, args ...interface{}) {
|
|
||||||
if !h.Logger.Options().Level.Enabled(InfoLevel) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
h.Logger.Fields(h.fields).Logf(InfoLevel, template, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Helper) Trace(args ...interface{}) {
|
|
||||||
if !h.Logger.Options().Level.Enabled(TraceLevel) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
h.Logger.Fields(h.fields).Log(TraceLevel, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Helper) Tracef(template string, args ...interface{}) {
|
|
||||||
if !h.Logger.Options().Level.Enabled(TraceLevel) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
h.Logger.Fields(h.fields).Logf(TraceLevel, template, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Helper) Debug(args ...interface{}) {
|
|
||||||
if !h.Logger.Options().Level.Enabled(DebugLevel) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
h.Logger.Fields(h.fields).Log(DebugLevel, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Helper) Debugf(template string, args ...interface{}) {
|
|
||||||
if !h.Logger.Options().Level.Enabled(DebugLevel) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
h.Logger.Fields(h.fields).Logf(DebugLevel, template, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Helper) Warn(args ...interface{}) {
|
|
||||||
if !h.Logger.Options().Level.Enabled(WarnLevel) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
h.Logger.Fields(h.fields).Log(WarnLevel, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Helper) Warnf(template string, args ...interface{}) {
|
|
||||||
if !h.Logger.Options().Level.Enabled(WarnLevel) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
h.Logger.Fields(h.fields).Logf(WarnLevel, template, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Helper) Error(args ...interface{}) {
|
|
||||||
if !h.Logger.Options().Level.Enabled(ErrorLevel) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
h.Logger.Fields(h.fields).Log(ErrorLevel, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Helper) Errorf(template string, args ...interface{}) {
|
|
||||||
if !h.Logger.Options().Level.Enabled(ErrorLevel) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
h.Logger.Fields(h.fields).Logf(ErrorLevel, template, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Helper) Fatal(args ...interface{}) {
|
|
||||||
if !h.Logger.Options().Level.Enabled(FatalLevel) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
h.Logger.Fields(h.fields).Log(FatalLevel, args...)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Helper) Fatalf(template string, args ...interface{}) {
|
|
||||||
if !h.Logger.Options().Level.Enabled(FatalLevel) {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
h.Logger.Fields(h.fields).Logf(FatalLevel, template, args...)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Helper) WithError(err error) *Helper {
|
|
||||||
fields := copyFields(h.fields)
|
|
||||||
fields["error"] = err
|
|
||||||
return &Helper{Logger: h.Logger, fields: fields}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *Helper) WithFields(fields map[string]interface{}) *Helper {
|
|
||||||
nfields := copyFields(fields)
|
|
||||||
for k, v := range h.fields {
|
|
||||||
nfields[k] = v
|
|
||||||
}
|
|
||||||
return &Helper{Logger: h.Logger, fields: nfields}
|
|
||||||
}
|
|
||||||
-140
@@ -1,140 +0,0 @@
|
|||||||
package logger
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Level int8
|
|
||||||
|
|
||||||
const (
|
|
||||||
// TraceLevel level. Designates finer-grained informational events than the Debug.
|
|
||||||
TraceLevel Level = iota - 2
|
|
||||||
// DebugLevel level. Usually only enabled when debugging. Very verbose logging.
|
|
||||||
DebugLevel
|
|
||||||
// InfoLevel is the default logging priority.
|
|
||||||
// General operational entries about what's going on inside the application.
|
|
||||||
InfoLevel
|
|
||||||
// WarnLevel level. Non-critical entries that deserve eyes.
|
|
||||||
WarnLevel
|
|
||||||
// ErrorLevel level. Logs. Used for errors that should definitely be noted.
|
|
||||||
ErrorLevel
|
|
||||||
// FatalLevel level. Logs and then calls `logger.Exit(1)`. highest level of severity.
|
|
||||||
FatalLevel
|
|
||||||
)
|
|
||||||
|
|
||||||
func (l Level) String() string {
|
|
||||||
switch l {
|
|
||||||
case TraceLevel:
|
|
||||||
return "trace"
|
|
||||||
case DebugLevel:
|
|
||||||
return "debug"
|
|
||||||
case InfoLevel:
|
|
||||||
return "info"
|
|
||||||
case WarnLevel:
|
|
||||||
return "warn"
|
|
||||||
case ErrorLevel:
|
|
||||||
return "error"
|
|
||||||
case FatalLevel:
|
|
||||||
return "fatal"
|
|
||||||
}
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
|
|
||||||
// LevelForGorm 转换成gorm日志级别
|
|
||||||
func (l Level) LevelForGorm() int {
|
|
||||||
switch l {
|
|
||||||
case FatalLevel, ErrorLevel:
|
|
||||||
return 2
|
|
||||||
case WarnLevel:
|
|
||||||
return 3
|
|
||||||
case InfoLevel, DebugLevel, TraceLevel:
|
|
||||||
return 4
|
|
||||||
default:
|
|
||||||
return 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Enabled returns true if the given level is at or above this level.
|
|
||||||
func (l Level) Enabled(lvl Level) bool {
|
|
||||||
return lvl >= l
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetLevel converts a level string into a logger Level value.
|
|
||||||
// returns an error if the input string does not match known values.
|
|
||||||
func GetLevel(levelStr string) (Level, error) {
|
|
||||||
switch levelStr {
|
|
||||||
case TraceLevel.String():
|
|
||||||
return TraceLevel, nil
|
|
||||||
case DebugLevel.String():
|
|
||||||
return DebugLevel, nil
|
|
||||||
case InfoLevel.String():
|
|
||||||
return InfoLevel, nil
|
|
||||||
case WarnLevel.String():
|
|
||||||
return WarnLevel, nil
|
|
||||||
case ErrorLevel.String():
|
|
||||||
return ErrorLevel, nil
|
|
||||||
case FatalLevel.String():
|
|
||||||
return FatalLevel, nil
|
|
||||||
}
|
|
||||||
return InfoLevel, fmt.Errorf("Unknown Level String: '%s', defaulting to InfoLevel", levelStr)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Info(args ...interface{}) {
|
|
||||||
DefaultLogger.Log(InfoLevel, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Infof(template string, args ...interface{}) {
|
|
||||||
DefaultLogger.Logf(InfoLevel, template, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Trace(args ...interface{}) {
|
|
||||||
DefaultLogger.Log(TraceLevel, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Tracef(template string, args ...interface{}) {
|
|
||||||
DefaultLogger.Logf(TraceLevel, template, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Debug(args ...interface{}) {
|
|
||||||
DefaultLogger.Log(DebugLevel, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Debugf(template string, args ...interface{}) {
|
|
||||||
DefaultLogger.Logf(DebugLevel, template, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Warn(args ...interface{}) {
|
|
||||||
DefaultLogger.Log(WarnLevel, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Warnf(template string, args ...interface{}) {
|
|
||||||
DefaultLogger.Logf(WarnLevel, template, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Error(args ...interface{}) {
|
|
||||||
DefaultLogger.Log(ErrorLevel, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Errorf(template string, args ...interface{}) {
|
|
||||||
DefaultLogger.Logf(ErrorLevel, template, args...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Fatal(args ...interface{}) {
|
|
||||||
DefaultLogger.Log(FatalLevel, args...)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Fatalf(template string, args ...interface{}) {
|
|
||||||
DefaultLogger.Logf(FatalLevel, template, args...)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Returns true if the given level is at or lower the current logger level
|
|
||||||
func V(lvl Level, log Logger) bool {
|
|
||||||
l := DefaultLogger
|
|
||||||
if log != nil {
|
|
||||||
l = log
|
|
||||||
}
|
|
||||||
return l.Options().Level <= lvl
|
|
||||||
}
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
// Package log provides a log interface
|
|
||||||
package logger
|
|
||||||
|
|
||||||
var (
|
|
||||||
// Default logger
|
|
||||||
DefaultLogger Logger
|
|
||||||
)
|
|
||||||
|
|
||||||
// Logger is a generic logging interface
|
|
||||||
type Logger interface {
|
|
||||||
// Init initialises options
|
|
||||||
Init(options ...Option) error
|
|
||||||
// The Logger options
|
|
||||||
Options() Options
|
|
||||||
// Fields set fields to always be logged
|
|
||||||
Fields(fields map[string]interface{}) Logger
|
|
||||||
// Log writes a log entry
|
|
||||||
Log(level Level, v ...interface{})
|
|
||||||
// Logf writes a formatted log entry
|
|
||||||
Logf(level Level, format string, v ...interface{})
|
|
||||||
// String returns the name of logger
|
|
||||||
String() string
|
|
||||||
}
|
|
||||||
|
|
||||||
func Init(opts ...Option) error {
|
|
||||||
return DefaultLogger.Init(opts...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Fields(fields map[string]interface{}) Logger {
|
|
||||||
return DefaultLogger.Fields(fields)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Log(level Level, v ...interface{}) {
|
|
||||||
DefaultLogger.Log(level, v...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func Logf(level Level, format string, v ...interface{}) {
|
|
||||||
DefaultLogger.Logf(level, format, v...)
|
|
||||||
}
|
|
||||||
|
|
||||||
func String() string {
|
|
||||||
return DefaultLogger.String()
|
|
||||||
}
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
package logger
|
|
||||||
|
|
||||||
import (
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestLogger(t *testing.T) {
|
|
||||||
l := NewLogger(WithLevel(TraceLevel))
|
|
||||||
h1 := NewHelper(l).WithFields(map[string]interface{}{"key1": "val1"})
|
|
||||||
h1.Trace("trace_msg1")
|
|
||||||
h1.Warn("warn_msg1")
|
|
||||||
|
|
||||||
h2 := NewHelper(l).WithFields(map[string]interface{}{"key2": "val2"})
|
|
||||||
h2.Trace("trace_msg2")
|
|
||||||
h2.Warn("warn_msg2")
|
|
||||||
|
|
||||||
l.Fields(map[string]interface{}{"key3": "val4"}).Log(InfoLevel, "test_msg")
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
package logger
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"io"
|
|
||||||
)
|
|
||||||
|
|
||||||
type Option func(*Options)
|
|
||||||
|
|
||||||
type Options struct {
|
|
||||||
// The logging level the logger should log at. default is `InfoLevel`
|
|
||||||
Level Level
|
|
||||||
// fields to always be logged
|
|
||||||
Fields map[string]interface{}
|
|
||||||
// It's common to set this to a file, or leave it default which is `os.Stderr`
|
|
||||||
Out io.Writer
|
|
||||||
// Caller skip frame count for file:line info
|
|
||||||
CallerSkipCount int
|
|
||||||
// Alternative options
|
|
||||||
Context context.Context
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithFields set default fields for the logger
|
|
||||||
func WithFields(fields map[string]interface{}) Option {
|
|
||||||
return func(args *Options) {
|
|
||||||
args.Fields = fields
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithLevel set default level for the logger
|
|
||||||
func WithLevel(level Level) Option {
|
|
||||||
return func(args *Options) {
|
|
||||||
args.Level = level
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithOutput set default output writer for the logger
|
|
||||||
func WithOutput(out io.Writer) Option {
|
|
||||||
return func(args *Options) {
|
|
||||||
args.Out = out
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// WithCallerSkipCount set frame count to skip
|
|
||||||
func WithCallerSkipCount(c int) Option {
|
|
||||||
return func(args *Options) {
|
|
||||||
args.CallerSkipCount = c
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func SetOption(k, v interface{}) Option {
|
|
||||||
return func(o *Options) {
|
|
||||||
if o.Context == nil {
|
|
||||||
o.Context = context.Background()
|
|
||||||
}
|
|
||||||
o.Context = context.WithValue(o.Context, k, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
package mycasbin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"sync/atomic"
|
||||||
|
|
||||||
|
"github.com/go-admin-team/go-admin-core/logger"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Logger is the implementation for a Logger using golang log.
|
||||||
|
type Logger struct {
|
||||||
|
enable int32
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Logger) EnableLog(enable bool) {
|
||||||
|
i := 0
|
||||||
|
if enable {
|
||||||
|
i = 1
|
||||||
|
}
|
||||||
|
atomic.StoreInt32(&(l.enable), int32(i))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Logger) IsEnabled() bool {
|
||||||
|
return atomic.LoadInt32(&(l.enable)) != 0
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Logger) Print(v ...interface{}) {
|
||||||
|
if l.IsEnabled() {
|
||||||
|
logger.DefaultLogger.Log(logger.InfoLevel, v...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (l *Logger) Printf(format string, v ...interface{}) {
|
||||||
|
if l.IsEnabled() {
|
||||||
|
logger.DefaultLogger.Logf(logger.InfoLevel, format, v...)
|
||||||
|
}
|
||||||
|
}
|
||||||
+7
-20
@@ -1,14 +1,11 @@
|
|||||||
package mycasbin
|
package mycasbin
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"log"
|
|
||||||
|
|
||||||
"github.com/casbin/casbin/v2"
|
"github.com/casbin/casbin/v2"
|
||||||
|
"github.com/casbin/casbin/v2/log"
|
||||||
"github.com/casbin/casbin/v2/model"
|
"github.com/casbin/casbin/v2/model"
|
||||||
gormAdapter "github.com/casbin/gorm-adapter/v3"
|
gormAdapter "github.com/casbin/gorm-adapter/v3"
|
||||||
_ "github.com/go-sql-driver/mysql"
|
"gorm.io/gorm"
|
||||||
|
|
||||||
"go-admin/common/global"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
// Initialize the model from a string.
|
// Initialize the model from a string.
|
||||||
@@ -26,8 +23,8 @@ e = some(where (p.eft == allow))
|
|||||||
m = r.sub == p.sub && (keyMatch2(r.obj, p.obj) || keyMatch(r.obj, p.obj)) && (r.act == p.act || p.act == "*")
|
m = r.sub == p.sub && (keyMatch2(r.obj, p.obj) || keyMatch(r.obj, p.obj)) && (r.act == p.act || p.act == "*")
|
||||||
`
|
`
|
||||||
|
|
||||||
func Setup() {
|
func Setup(db *gorm.DB, prefix string) *casbin.SyncedEnforcer {
|
||||||
Apter, err := gormAdapter.NewAdapterByDBUsePrefix(global.Eloquent, "sys_")
|
Apter, err := gormAdapter.NewAdapterByDBUsePrefix(db, prefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
@@ -43,18 +40,8 @@ func Setup() {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
}
|
}
|
||||||
global.CasbinEnforcer = e
|
|
||||||
}
|
|
||||||
|
|
||||||
func Casbin() *casbin.SyncedEnforcer {
|
log.SetLogger(&Logger{})
|
||||||
return global.CasbinEnforcer
|
e.EnableLog(true)
|
||||||
}
|
return e
|
||||||
|
|
||||||
func LoadPolicy() (*casbin.SyncedEnforcer, error) {
|
|
||||||
if err := global.CasbinEnforcer.LoadPolicy(); err == nil {
|
|
||||||
return global.CasbinEnforcer, err
|
|
||||||
} else {
|
|
||||||
log.Printf("casbin rbac_model or policy init error, message: %v \r\n", err.Error())
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,16 +2,16 @@ package logger
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/gogf/gf/os/glog"
|
"github.com/gogf/gf/os/glog"
|
||||||
"go-admin/common/global"
|
|
||||||
"go-admin/tools"
|
"go-admin/tools"
|
||||||
"go-admin/tools/config"
|
"go-admin/tools/config"
|
||||||
)
|
)
|
||||||
|
|
||||||
var Logger *glog.Logger
|
func Setup() (*glog.Logger, *glog.Logger, *glog.Logger) {
|
||||||
var JobLogger *glog.Logger
|
var Logger *glog.Logger
|
||||||
var RequestLogger *glog.Logger
|
var JobLogger *glog.Logger
|
||||||
|
var RequestLogger *glog.Logger
|
||||||
|
|
||||||
func Setup() {
|
|
||||||
Logger = glog.New()
|
Logger = glog.New()
|
||||||
_ = Logger.SetPath(config.LoggerConfig.Path + "/bus")
|
_ = Logger.SetPath(config.LoggerConfig.Path + "/bus")
|
||||||
Logger.SetStdoutPrint(config.LoggerConfig.EnabledBUS && config.LoggerConfig.Stdout)
|
Logger.SetStdoutPrint(config.LoggerConfig.EnabledBUS && config.LoggerConfig.Stdout)
|
||||||
@@ -31,8 +31,5 @@ func Setup() {
|
|||||||
_ = RequestLogger.SetLevelStr(config.LoggerConfig.Level)
|
_ = RequestLogger.SetLevelStr(config.LoggerConfig.Level)
|
||||||
|
|
||||||
Logger.Info(tools.Green("Logger init success!"))
|
Logger.Info(tools.Green("Logger init success!"))
|
||||||
|
return Logger, JobLogger, RequestLogger
|
||||||
global.Logger = Logger.Line()
|
|
||||||
global.JobLogger = JobLogger.Line()
|
|
||||||
global.RequestLogger = RequestLogger.Line()
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user