|
|
- package logger
-
- import (
- "context"
- "fmt"
- "go.mongodb.org/mongo-driver/mongo"
- "go.mongodb.org/mongo-driver/mongo/options"
- "strconv"
- "time"
- )
-
- var (
- collectionMap map[string]*mongo.Collection
- )
-
- func NewMongoDriver(config db, level int) (driver, error) {
- if collectionMap == nil {
- collectionMap = make(map[string]*mongo.Collection)
- }
- var collection *mongo.Collection
- mKey := config.Host + strconv.Itoa(config.Port) + config.Database + config.Table
- collection = collectionMap[mKey]
- if collection == nil {
- ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
- client, err := mongo.Connect(ctx, options.Client().ApplyURI(fmt.Sprintf("mongodb://%s:%d", config.Host, config.Port)))
- if err != nil {
- return nil, err
- }
- err = client.Ping(ctx, nil)
- if err != nil {
- return nil, err
- }
- collection = client.Database(config.Database).Collection(config.Table)
- collectionMap[mKey] = collection
- }
-
- return &mongoLogger{
- level: level,
- collection: collection,
- }, nil
- }
-
- type mongoLogger struct {
- level int
- collection *mongo.Collection
- }
-
- func (m *mongoLogger) Record(message message) {
- if (message.Level == debugLevel || message.Level == DebugLevel) && m.level > debugLevelInt {
- return
- }
- if (message.Level == infoLevel || message.Level == InfoLevel) && m.level > infoLevelInt {
- return
- }
- if (message.Level == warnLevel || message.Level == WarnLevel) && m.level > warnLevelInt {
- return
- }
- if (message.Level == errorLevel || message.Level == ErrorLevel) && m.level > errorLevelInt {
- return
- }
- if (message.Level == fatalLevel || message.Level == FatalLevel) && m.level > fatalLevelInt {
- return
- }
- _, _ = m.collection.InsertOne(context.TODO(), message)
- }
|