mirror of
https://github.com/astaxie/beego.git
synced 2024-11-22 13:30:56 +00:00
Custom formatting opts implementation
This commit is contained in:
parent
2b39ff7837
commit
8178f035a0
@ -5,6 +5,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"github.com/astaxie/beego/pkg/common"
|
||||||
"github.com/astaxie/beego/pkg/logs"
|
"github.com/astaxie/beego/pkg/logs"
|
||||||
"github.com/gogo/protobuf/proto"
|
"github.com/gogo/protobuf/proto"
|
||||||
)
|
)
|
||||||
@ -32,13 +33,12 @@ type Config struct {
|
|||||||
// aliLSWriter implements LoggerInterface.
|
// aliLSWriter implements LoggerInterface.
|
||||||
// Writes messages in keep-live tcp connection.
|
// Writes messages in keep-live tcp connection.
|
||||||
type aliLSWriter struct {
|
type aliLSWriter struct {
|
||||||
store *LogStore
|
store *LogStore
|
||||||
group []*LogGroup
|
group []*LogGroup
|
||||||
withMap bool
|
withMap bool
|
||||||
groupMap map[string]*LogGroup
|
groupMap map[string]*LogGroup
|
||||||
lock *sync.Mutex
|
lock *sync.Mutex
|
||||||
UseCustomFormatter bool
|
customFormatter func(*logs.LogMsg) string
|
||||||
CustomFormatter func(*logs.LogMsg) string
|
|
||||||
Config
|
Config
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,15 +50,17 @@ func NewAliLS() logs.Logger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Init parses config and initializes struct
|
// Init parses config and initializes struct
|
||||||
func (c *aliLSWriter) Init(jsonConfig string, LogFormatter ...func(*logs.LogMsg) string) (err error) {
|
func (c *aliLSWriter) Init(jsonConfig string, opts ...common.SimpleKV) error {
|
||||||
|
|
||||||
for _, elem := range LogFormatter {
|
for _, elem := range opts {
|
||||||
if elem != nil {
|
if elem.Key == "formatter" {
|
||||||
c.UseCustomFormatter = true
|
formatter, err := logs.GetFormatter(elem)
|
||||||
c.CustomFormatter = elem
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
c.customFormatter = formatter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
json.Unmarshal([]byte(jsonConfig), c)
|
json.Unmarshal([]byte(jsonConfig), c)
|
||||||
|
|
||||||
if c.FlushWhen > CacheSize {
|
if c.FlushWhen > CacheSize {
|
||||||
@ -72,11 +74,13 @@ func (c *aliLSWriter) Init(jsonConfig string, LogFormatter ...func(*logs.LogMsg)
|
|||||||
AccessKeySecret: c.KeySecret,
|
AccessKeySecret: c.KeySecret,
|
||||||
}
|
}
|
||||||
|
|
||||||
c.store, err = prj.GetLogStore(c.LogStore)
|
store, err := prj.GetLogStore(c.LogStore)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c.store = store
|
||||||
|
|
||||||
// Create default Log Group
|
// Create default Log Group
|
||||||
c.group = append(c.group, &LogGroup{
|
c.group = append(c.group, &LogGroup{
|
||||||
Topic: proto.String(""),
|
Topic: proto.String(""),
|
||||||
@ -141,8 +145,8 @@ func (c *aliLSWriter) WriteMsg(lm *logs.LogMsg) error {
|
|||||||
lg = c.group[0]
|
lg = c.group[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
if c.UseCustomFormatter {
|
if c.customFormatter != nil {
|
||||||
content = c.CustomFormatter(lm)
|
content = c.customFormatter(lm)
|
||||||
} else {
|
} else {
|
||||||
content = c.Format(lm)
|
content = c.Format(lm)
|
||||||
}
|
}
|
||||||
|
@ -25,13 +25,14 @@ import (
|
|||||||
// connWriter implements LoggerInterface.
|
// connWriter implements LoggerInterface.
|
||||||
// Writes messages in keep-live tcp connection.
|
// Writes messages in keep-live tcp connection.
|
||||||
type connWriter struct {
|
type connWriter struct {
|
||||||
lg *logWriter
|
lg *logWriter
|
||||||
innerWriter io.WriteCloser
|
innerWriter io.WriteCloser
|
||||||
ReconnectOnMsg bool `json:"reconnectOnMsg"`
|
customFormatter func(*LogMsg) string
|
||||||
Reconnect bool `json:"reconnect"`
|
ReconnectOnMsg bool `json:"reconnectOnMsg"`
|
||||||
Net string `json:"net"`
|
Reconnect bool `json:"reconnect"`
|
||||||
Addr string `json:"addr"`
|
Net string `json:"net"`
|
||||||
Level int `json:"level"`
|
Addr string `json:"addr"`
|
||||||
|
Level int `json:"level"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewConn creates new ConnWrite returning as LoggerInterface.
|
// NewConn creates new ConnWrite returning as LoggerInterface.
|
||||||
@ -48,12 +49,16 @@ func (c *connWriter) Format(lm *LogMsg) string {
|
|||||||
// Init initializes a connection writer with json config.
|
// Init initializes a connection writer with json config.
|
||||||
// json config only needs they "level" key
|
// json config only needs they "level" key
|
||||||
func (c *connWriter) Init(jsonConfig string, opts ...common.SimpleKV) error {
|
func (c *connWriter) Init(jsonConfig string, opts ...common.SimpleKV) error {
|
||||||
// for _, elem := range LogFormatter {
|
|
||||||
// if elem != nil {
|
for _, elem := range opts {
|
||||||
// c.UseCustomFormatter = true
|
if elem.Key == "formatter" {
|
||||||
// c.CustomFormatter = elem
|
formatter, err := GetFormatter(elem)
|
||||||
// }
|
if err != nil {
|
||||||
// }
|
return err
|
||||||
|
}
|
||||||
|
c.customFormatter = formatter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return json.Unmarshal([]byte(jsonConfig), c)
|
return json.Unmarshal([]byte(jsonConfig), c)
|
||||||
}
|
}
|
||||||
@ -75,7 +80,14 @@ func (c *connWriter) WriteMsg(lm *LogMsg) error {
|
|||||||
defer c.innerWriter.Close()
|
defer c.innerWriter.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
msg := c.Format(lm)
|
msg := ""
|
||||||
|
if c.customFormatter != nil {
|
||||||
|
msg = c.customFormatter(lm)
|
||||||
|
} else {
|
||||||
|
msg = c.Format(lm)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
_, err := c.lg.writeln(msg)
|
_, err := c.lg.writeln(msg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -81,7 +81,6 @@ func NewConsole() Logger {
|
|||||||
|
|
||||||
// Init initianlizes the console logger.
|
// Init initianlizes the console logger.
|
||||||
// jsonConfig must be in the format '{"level":LevelTrace}'
|
// jsonConfig must be in the format '{"level":LevelTrace}'
|
||||||
// func (c *consoleWriter) Init(jsonConfig string, LogFormatter ...func(*LogMsg) string) error {
|
|
||||||
func (c *consoleWriter) Init(jsonConfig string, opts ...common.SimpleKV) error {
|
func (c *consoleWriter) Init(jsonConfig string, opts ...common.SimpleKV) error {
|
||||||
|
|
||||||
for _, elem := range opts {
|
for _, elem := range opts {
|
||||||
|
@ -12,6 +12,7 @@ import (
|
|||||||
"github.com/elastic/go-elasticsearch/v6"
|
"github.com/elastic/go-elasticsearch/v6"
|
||||||
"github.com/elastic/go-elasticsearch/v6/esapi"
|
"github.com/elastic/go-elasticsearch/v6/esapi"
|
||||||
|
|
||||||
|
"github.com/astaxie/beego/pkg/common"
|
||||||
"github.com/astaxie/beego/pkg/logs"
|
"github.com/astaxie/beego/pkg/logs"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -31,10 +32,9 @@ func NewES() logs.Logger {
|
|||||||
// import _ "github.com/astaxie/beego/logs/es"
|
// import _ "github.com/astaxie/beego/logs/es"
|
||||||
type esLogger struct {
|
type esLogger struct {
|
||||||
*elasticsearch.Client
|
*elasticsearch.Client
|
||||||
DSN string `json:"dsn"`
|
DSN string `json:"dsn"`
|
||||||
Level int `json:"level"`
|
Level int `json:"level"`
|
||||||
UseCustomFormatter bool
|
customFormatter func(*logs.LogMsg) string
|
||||||
CustomFormatter func(*logs.LogMsg) string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (el *esLogger) Format(lm *logs.LogMsg) string {
|
func (el *esLogger) Format(lm *logs.LogMsg) string {
|
||||||
@ -42,15 +42,19 @@ func (el *esLogger) Format(lm *logs.LogMsg) string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// {"dsn":"http://localhost:9200/","level":1}
|
// {"dsn":"http://localhost:9200/","level":1}
|
||||||
func (el *esLogger) Init(jsonconfig string, LogFormatter ...func(*logs.LogMsg) string) error {
|
func (el *esLogger) Init(jsonConfig string, opts ...common.SimpleKV) error {
|
||||||
for _, elem := range LogFormatter {
|
|
||||||
if elem != nil {
|
for _, elem := range opts {
|
||||||
el.UseCustomFormatter = true
|
if elem.Key == "formatter" {
|
||||||
el.CustomFormatter = elem
|
formatter, err := logs.GetFormatter(elem)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
el.customFormatter = formatter
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
err := json.Unmarshal([]byte(jsonconfig), el)
|
err := json.Unmarshal([]byte(jsonConfig), el)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -79,8 +83,8 @@ func (el *esLogger) WriteMsg(lm *logs.LogMsg) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
msg := ""
|
msg := ""
|
||||||
if el.UseCustomFormatter {
|
if el.customFormatter != nil {
|
||||||
msg = el.CustomFormatter(lm)
|
msg = el.customFormatter(lm)
|
||||||
} else {
|
} else {
|
||||||
msg = el.Format(lm)
|
msg = el.Format(lm)
|
||||||
}
|
}
|
||||||
|
@ -62,8 +62,7 @@ type fileLogWriter struct {
|
|||||||
hourlyOpenDate int
|
hourlyOpenDate int
|
||||||
hourlyOpenTime time.Time
|
hourlyOpenTime time.Time
|
||||||
|
|
||||||
UseCustomFormatter bool
|
customFormatter func(*LogMsg) string
|
||||||
CustomFormatter func(*LogMsg) string
|
|
||||||
|
|
||||||
Rotate bool `json:"rotate"`
|
Rotate bool `json:"rotate"`
|
||||||
|
|
||||||
@ -110,12 +109,16 @@ func (w *fileLogWriter) Format(lm *LogMsg) string {
|
|||||||
// "perm":"0600"
|
// "perm":"0600"
|
||||||
// }
|
// }
|
||||||
func (w *fileLogWriter) Init(jsonConfig string, opts ...common.SimpleKV) error {
|
func (w *fileLogWriter) Init(jsonConfig string, opts ...common.SimpleKV) error {
|
||||||
// for _, elem := range LogFormatter {
|
|
||||||
// if elem != nil {
|
for _, elem := range opts {
|
||||||
// w.UseCustomFormatter = true
|
if elem.Key == "formatter" {
|
||||||
// w.CustomFormatter = elem
|
formatter, err := GetFormatter(elem)
|
||||||
// }
|
if err != nil {
|
||||||
// }
|
return err
|
||||||
|
}
|
||||||
|
w.customFormatter = formatter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
err := json.Unmarshal([]byte(jsonConfig), w)
|
err := json.Unmarshal([]byte(jsonConfig), w)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -166,8 +169,9 @@ func (w *fileLogWriter) WriteMsg(lm *LogMsg) error {
|
|||||||
}
|
}
|
||||||
hd, d, h := formatTimeHeader(lm.When)
|
hd, d, h := formatTimeHeader(lm.When)
|
||||||
msg := ""
|
msg := ""
|
||||||
if w.UseCustomFormatter {
|
|
||||||
msg = w.CustomFormatter(lm)
|
if w.customFormatter != nil {
|
||||||
|
msg = w.customFormatter(lm)
|
||||||
} else {
|
} else {
|
||||||
msg = w.Format(lm)
|
msg = w.Format(lm)
|
||||||
}
|
}
|
||||||
|
@ -11,14 +11,13 @@ import (
|
|||||||
|
|
||||||
// JLWriter implements beego LoggerInterface and is used to send jiaoliao webhook
|
// JLWriter implements beego LoggerInterface and is used to send jiaoliao webhook
|
||||||
type JLWriter struct {
|
type JLWriter struct {
|
||||||
AuthorName string `json:"authorname"`
|
AuthorName string `json:"authorname"`
|
||||||
Title string `json:"title"`
|
Title string `json:"title"`
|
||||||
WebhookURL string `json:"webhookurl"`
|
WebhookURL string `json:"webhookurl"`
|
||||||
RedirectURL string `json:"redirecturl,omitempty"`
|
RedirectURL string `json:"redirecturl,omitempty"`
|
||||||
ImageURL string `json:"imageurl,omitempty"`
|
ImageURL string `json:"imageurl,omitempty"`
|
||||||
Level int `json:"level"`
|
Level int `json:"level"`
|
||||||
UseCustomFormatter bool
|
customFormatter func(*LogMsg) string
|
||||||
CustomFormatter func(*LogMsg) string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// newJLWriter creates jiaoliao writer.
|
// newJLWriter creates jiaoliao writer.
|
||||||
@ -28,12 +27,15 @@ func newJLWriter() Logger {
|
|||||||
|
|
||||||
// Init JLWriter with json config string
|
// Init JLWriter with json config string
|
||||||
func (s *JLWriter) Init(jsonConfig string, opts ...common.SimpleKV) error {
|
func (s *JLWriter) Init(jsonConfig string, opts ...common.SimpleKV) error {
|
||||||
// for _, elem := range LogFormatter {
|
for _, elem := range opts {
|
||||||
// if elem != nil {
|
if elem.Key == "formatter" {
|
||||||
// s.UseCustomFormatter = true
|
formatter, err := GetFormatter(elem)
|
||||||
// s.CustomFormatter = elem
|
if err != nil {
|
||||||
// }
|
return err
|
||||||
// }
|
}
|
||||||
|
s.customFormatter = formatter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return json.Unmarshal([]byte(jsonConfig), s)
|
return json.Unmarshal([]byte(jsonConfig), s)
|
||||||
}
|
}
|
||||||
@ -49,7 +51,15 @@ func (s *JLWriter) WriteMsg(lm *LogMsg) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
text := fmt.Sprintf("%s %s", lm.When.Format("2006-01-02 15:04:05"), s.Format(lm))
|
text := ""
|
||||||
|
|
||||||
|
if s.customFormatter != nil {
|
||||||
|
text = fmt.Sprintf("%s %s", lm.When.Format("2006-01-02 15:04:05"), s.customFormatter(lm))
|
||||||
|
} else {
|
||||||
|
text = fmt.Sprintf("%s %s", lm.When.Format("2006-01-02 15:04:05"), s.Format(lm))
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
form := url.Values{}
|
form := url.Values{}
|
||||||
form.Add("authorName", s.AuthorName)
|
form.Add("authorName", s.AuthorName)
|
||||||
form.Add("title", s.Title)
|
form.Add("title", s.Title)
|
||||||
|
@ -26,11 +26,10 @@ import (
|
|||||||
// and write the error-level logs to project.error.log and write the debug-level logs to project.debug.log
|
// and write the error-level logs to project.error.log and write the debug-level logs to project.debug.log
|
||||||
// the rotate attribute also acts like fileLogWriter
|
// the rotate attribute also acts like fileLogWriter
|
||||||
type multiFileLogWriter struct {
|
type multiFileLogWriter struct {
|
||||||
writers [LevelDebug + 1 + 1]*fileLogWriter // the last one for fullLogWriter
|
writers [LevelDebug + 1 + 1]*fileLogWriter // the last one for fullLogWriter
|
||||||
fullLogWriter *fileLogWriter
|
fullLogWriter *fileLogWriter
|
||||||
Separate []string `json:"separate"`
|
Separate []string `json:"separate"`
|
||||||
UseCustomFormatter bool
|
customFormatter func(*LogMsg) string
|
||||||
CustomFormatter func(*LogMsg) string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var levelNames = [...]string{"emergency", "alert", "critical", "error", "warning", "notice", "info", "debug"}
|
var levelNames = [...]string{"emergency", "alert", "critical", "error", "warning", "notice", "info", "debug"}
|
||||||
@ -49,12 +48,15 @@ var levelNames = [...]string{"emergency", "alert", "critical", "error", "warning
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
func (f *multiFileLogWriter) Init(jsonConfig string, opts ...common.SimpleKV) error {
|
func (f *multiFileLogWriter) Init(jsonConfig string, opts ...common.SimpleKV) error {
|
||||||
// for _, elem := range LogFormatter {
|
for _, elem := range opts {
|
||||||
// if elem != nil {
|
if elem.Key == "formatter" {
|
||||||
// f.UseCustomFormatter = true
|
formatter, err := GetFormatter(elem)
|
||||||
// f.CustomFormatter = elem
|
if err != nil {
|
||||||
// }
|
return err
|
||||||
// }
|
}
|
||||||
|
f.customFormatter = formatter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
writer := newFileWriter().(*fileLogWriter)
|
writer := newFileWriter().(*fileLogWriter)
|
||||||
err := writer.Init(jsonConfig)
|
err := writer.Init(jsonConfig)
|
||||||
|
@ -34,8 +34,7 @@ type SMTPWriter struct {
|
|||||||
FromAddress string `json:"fromAddress"`
|
FromAddress string `json:"fromAddress"`
|
||||||
RecipientAddresses []string `json:"sendTos"`
|
RecipientAddresses []string `json:"sendTos"`
|
||||||
Level int `json:"level"`
|
Level int `json:"level"`
|
||||||
UseCustomFormatter bool
|
customFormatter func(*LogMsg) string
|
||||||
CustomFormatter func(*LogMsg) string
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewSMTPWriter creates the smtp writer.
|
// NewSMTPWriter creates the smtp writer.
|
||||||
@ -55,12 +54,16 @@ func newSMTPWriter() Logger {
|
|||||||
// "level":LevelError
|
// "level":LevelError
|
||||||
// }
|
// }
|
||||||
func (s *SMTPWriter) Init(jsonConfig string, opts ...common.SimpleKV) error {
|
func (s *SMTPWriter) Init(jsonConfig string, opts ...common.SimpleKV) error {
|
||||||
// for _, elem := range LogFormatter {
|
|
||||||
// if elem != nil {
|
for _, elem := range opts {
|
||||||
// s.UseCustomFormatter = true
|
if elem.Key == "formatter" {
|
||||||
// s.CustomFormatter = elem
|
formatter, err := GetFormatter(elem)
|
||||||
// }
|
if err != nil {
|
||||||
// }
|
return err
|
||||||
|
}
|
||||||
|
s.customFormatter = formatter
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return json.Unmarshal([]byte(jsonConfig), s)
|
return json.Unmarshal([]byte(jsonConfig), s)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user