mirror of
https://github.com/minio/minio.git
synced 2024-12-27 15:45:55 -05:00
commit
8be09ce1cf
66
logger.go
Normal file
66
logger.go
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* Minio Cloud Storage, (C) 2015 Minio, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/minio/minio/pkg/probe"
|
||||||
|
"github.com/weekface/mgorus"
|
||||||
|
)
|
||||||
|
|
||||||
|
type fields map[string]interface{}
|
||||||
|
|
||||||
|
var log = logrus.New() // Default console logger.
|
||||||
|
|
||||||
|
// log2Mongo enables logging to mongodb. Use capped collection to
|
||||||
|
func log2Mongo(url, db, collection string) *probe.Error {
|
||||||
|
hooker, e := mgorus.NewHooker(url, db, collection)
|
||||||
|
if e != nil {
|
||||||
|
return probe.NewError(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Hooks.Add(hooker) // Add mongodb hook.
|
||||||
|
log.Formatter = &logrus.JSONFormatter{} // JSON formatted log.
|
||||||
|
log.Level = logrus.InfoLevel // Minimum log level.
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func errorIf(err *probe.Error, msg string, fields map[string]interface{}) {
|
||||||
|
if err == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if fields == nil {
|
||||||
|
fields = make(map[string]interface{})
|
||||||
|
}
|
||||||
|
|
||||||
|
fields["error"] = err.ToGoError()
|
||||||
|
if jsonErr, e := json.Marshal(err); e == nil {
|
||||||
|
fields["probe"] = string(jsonErr)
|
||||||
|
}
|
||||||
|
log.WithFields(fields).Error(msg)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func audit(msg string, fields logrus.Fields) {
|
||||||
|
if fields == nil {
|
||||||
|
fields = make(map[string]interface{})
|
||||||
|
}
|
||||||
|
|
||||||
|
log.WithFields(fields).Info(msg)
|
||||||
|
}
|
23
logger_test.go
Normal file
23
logger_test.go
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/*
|
||||||
|
* Minio Cloud Storage (C) 2015 Minio, Inc.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import . "gopkg.in/check.v1"
|
||||||
|
|
||||||
|
func (s *CmdTestSuite) TestLogger(c *C) {
|
||||||
|
|
||||||
|
}
|
@ -17,14 +17,17 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"github.com/minio/cli"
|
"github.com/minio/cli"
|
||||||
|
"github.com/minio/minio/pkg/probe"
|
||||||
"github.com/minio/minio/pkg/server"
|
"github.com/minio/minio/pkg/server"
|
||||||
"github.com/minio/minio/pkg/server/api"
|
"github.com/minio/minio/pkg/server/api"
|
||||||
)
|
)
|
||||||
|
|
||||||
var serverCmd = cli.Command{
|
var serverCmd = cli.Command{
|
||||||
Name: "server",
|
Name: "server",
|
||||||
Usage: "Start minio server",
|
Usage: "Start minio server.",
|
||||||
Action: serverMain,
|
Action: serverMain,
|
||||||
CustomHelpTemplate: `NAME:
|
CustomHelpTemplate: `NAME:
|
||||||
minio {{.Name}} - {{.Description}}
|
minio {{.Name}} - {{.Description}}
|
||||||
@ -60,7 +63,9 @@ func serverMain(c *cli.Context) {
|
|||||||
cli.ShowCommandHelpAndExit(c, "server", 1)
|
cli.ShowCommandHelpAndExit(c, "server", 1)
|
||||||
}
|
}
|
||||||
apiServerConfig := getServerConfig(c)
|
apiServerConfig := getServerConfig(c)
|
||||||
if err := server.Start(apiServerConfig); err != nil {
|
|
||||||
Fatalln(err.Trace())
|
err := server.Start(apiServerConfig)
|
||||||
}
|
err = probe.NewError(fmt.Errorf("Fake error."))
|
||||||
|
errorIf(err.Trace(), "Failed to start the server.", nil)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -86,6 +86,13 @@
|
|||||||
"revision": "eb527c8097e0f19a3ff7b253a3fe70545070f420",
|
"revision": "eb527c8097e0f19a3ff7b253a3fe70545070f420",
|
||||||
"revisionTime": "2015-08-29T22:34:20-07:00"
|
"revisionTime": "2015-08-29T22:34:20-07:00"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"canonical": "github.com/weekface/mgorus",
|
||||||
|
"comment": "",
|
||||||
|
"local": "vendor/github.com/weekface/mgorus",
|
||||||
|
"revision": "9a3ff865bf11d949ab7084198479139d9746c68f",
|
||||||
|
"revisionTime": "2015-09-01T11:57:24+08:00"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"canonical": "gopkg.in/check.v1",
|
"canonical": "gopkg.in/check.v1",
|
||||||
"comment": "",
|
"comment": "",
|
||||||
|
22
vendor/github.com/weekface/mgorus/LICENSE
generated
vendored
Normal file
22
vendor/github.com/weekface/mgorus/LICENSE
generated
vendored
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2015
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
34
vendor/github.com/weekface/mgorus/README.md
generated
vendored
Normal file
34
vendor/github.com/weekface/mgorus/README.md
generated
vendored
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
# Mongodb Hooks for [Logrus](https://github.com/Sirupsen/logrus) <img src="http://i.imgur.com/hTeVwmJ.png" width="40" height="40" alt=":walrus:" class="emoji" title=":walrus:"/>
|
||||||
|
|
||||||
|
## Install
|
||||||
|
|
||||||
|
```shell
|
||||||
|
$ go get github.com/weekface/mgorus
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```go
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/weekface/mgorus"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
log := logrus.New()
|
||||||
|
hooker, err := mgorus.NewHooker("localhost:27017", "db", "collection")
|
||||||
|
if err == nil {
|
||||||
|
log.Hooks.Add(hooker)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.WithFields(logrus.Fields{
|
||||||
|
"name": "zhangsan",
|
||||||
|
"age": 28,
|
||||||
|
}).Error("Hello world!")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## License
|
||||||
|
*MIT*
|
47
vendor/github.com/weekface/mgorus/mgorus.go
generated
vendored
Normal file
47
vendor/github.com/weekface/mgorus/mgorus.go
generated
vendored
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
package mgorus
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"gopkg.in/mgo.v2"
|
||||||
|
"gopkg.in/mgo.v2/bson"
|
||||||
|
)
|
||||||
|
|
||||||
|
type hooker struct {
|
||||||
|
c *mgo.Collection
|
||||||
|
}
|
||||||
|
|
||||||
|
type M bson.M
|
||||||
|
|
||||||
|
func NewHooker(mgoUrl, db, collection string) (*hooker, error) {
|
||||||
|
session, err := mgo.Dial(mgoUrl)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &hooker{c: session.DB(db).C(collection)}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *hooker) Fire(entry *logrus.Entry) error {
|
||||||
|
entry.Data["Level"] = entry.Level.String()
|
||||||
|
entry.Data["Time"] = entry.Time
|
||||||
|
entry.Data["Message"] = entry.Message
|
||||||
|
mgoErr := h.c.Insert(M(entry.Data))
|
||||||
|
if mgoErr != nil {
|
||||||
|
return fmt.Errorf("Failed to send log entry to mongodb: %s", mgoErr)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h *hooker) Levels() []logrus.Level {
|
||||||
|
return []logrus.Level{
|
||||||
|
logrus.PanicLevel,
|
||||||
|
logrus.FatalLevel,
|
||||||
|
logrus.ErrorLevel,
|
||||||
|
logrus.WarnLevel,
|
||||||
|
logrus.InfoLevel,
|
||||||
|
logrus.DebugLevel,
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user