commit
0964b40f17
|
@ -29,3 +29,4 @@ config.yaml
|
||||||
bin/*
|
bin/*
|
||||||
.DS_Store
|
.DS_Store
|
||||||
coverage.out
|
coverage.out
|
||||||
|
logs/*
|
||||||
|
|
|
@ -19,3 +19,9 @@ ios:
|
||||||
pem_cert_path: "cert.pem"
|
pem_cert_path: "cert.pem"
|
||||||
pem_key_path: "key.pem"
|
pem_key_path: "key.pem"
|
||||||
production: false
|
production: false
|
||||||
|
|
||||||
|
log:
|
||||||
|
access_log: "stdout"
|
||||||
|
access_level: "debug"
|
||||||
|
error_log: "stderr"
|
||||||
|
error_level: "error"
|
||||||
|
|
|
@ -49,8 +49,15 @@ func main() {
|
||||||
gopush.PushConf.Core.Port = *port
|
gopush.PushConf.Core.Port = *port
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err = gopush.InitLog(); err != nil {
|
||||||
|
log.Println(err)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if err = gopush.CheckPushConf(); err != nil {
|
if err = gopush.CheckPushConf(); err != nil {
|
||||||
log.Printf("Check Conf Error: '%v'", err)
|
log.Println(err)
|
||||||
|
gopush.LogError.Fatal(err)
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ type ConfYaml struct {
|
||||||
Api SectionApi `yaml:"api"`
|
Api SectionApi `yaml:"api"`
|
||||||
Android SectionAndroid `yaml:"android"`
|
Android SectionAndroid `yaml:"android"`
|
||||||
Ios SectionIos `yaml:"ios"`
|
Ios SectionIos `yaml:"ios"`
|
||||||
|
Log SectionLog `yaml:"log"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type SectionCore struct {
|
type SectionCore struct {
|
||||||
|
@ -39,6 +40,13 @@ type SectionIos struct {
|
||||||
Production bool `yaml:"production"`
|
Production bool `yaml:"production"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SectionLog struct {
|
||||||
|
AccessLog string `yaml:"access_log"`
|
||||||
|
AccessLevel string `yaml:"access_level"`
|
||||||
|
ErrorLog string `yaml:"error_log"`
|
||||||
|
ErrorLevel string `yaml:"error_level"`
|
||||||
|
}
|
||||||
|
|
||||||
func BuildDefaultPushConf() ConfYaml {
|
func BuildDefaultPushConf() ConfYaml {
|
||||||
var conf ConfYaml
|
var conf ConfYaml
|
||||||
|
|
||||||
|
@ -64,6 +72,12 @@ func BuildDefaultPushConf() ConfYaml {
|
||||||
conf.Ios.PemKeyPath = "key.pem"
|
conf.Ios.PemKeyPath = "key.pem"
|
||||||
conf.Ios.Production = false
|
conf.Ios.Production = false
|
||||||
|
|
||||||
|
// log
|
||||||
|
conf.Log.AccessLog = "stdout"
|
||||||
|
conf.Log.AccessLevel = "debug"
|
||||||
|
conf.Log.ErrorLog = "stderr"
|
||||||
|
conf.Log.ErrorLevel = "error"
|
||||||
|
|
||||||
return conf
|
return conf
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,7 @@ package gopush
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"crypto/tls"
|
"crypto/tls"
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
apns "github.com/sideshow/apns2"
|
apns "github.com/sideshow/apns2"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -9,4 +10,6 @@ var (
|
||||||
PushConf ConfYaml
|
PushConf ConfYaml
|
||||||
CertificatePemIos tls.Certificate
|
CertificatePemIos tls.Certificate
|
||||||
ApnsClient *apns.Client
|
ApnsClient *apns.Client
|
||||||
|
LogAccess *logrus.Logger
|
||||||
|
LogError *logrus.Logger
|
||||||
)
|
)
|
||||||
|
|
|
@ -0,0 +1,76 @@
|
||||||
|
package gopush
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
func InitLog() error {
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
// init logger
|
||||||
|
LogAccess = logrus.New()
|
||||||
|
LogError = logrus.New()
|
||||||
|
|
||||||
|
LogAccess.Formatter = &logrus.TextFormatter{
|
||||||
|
ForceColors: true,
|
||||||
|
FullTimestamp: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
LogError.Formatter = &logrus.TextFormatter{
|
||||||
|
ForceColors: true,
|
||||||
|
FullTimestamp: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
// set logger
|
||||||
|
if err := SetLogLevel(LogAccess, PushConf.Log.AccessLevel); err != nil {
|
||||||
|
return errors.New("Set access log level error: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := SetLogLevel(LogError, PushConf.Log.ErrorLevel); err != nil {
|
||||||
|
return errors.New("Set error log level error: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = SetLogOut(LogAccess, PushConf.Log.AccessLog); err != nil {
|
||||||
|
return errors.New("Set access log path error: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = SetLogOut(LogError, PushConf.Log.ErrorLog); err != nil {
|
||||||
|
return errors.New("Set error log path error: " + err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetLogOut(log *logrus.Logger, outString string) error {
|
||||||
|
switch outString {
|
||||||
|
case "stdout":
|
||||||
|
log.Out = os.Stdout
|
||||||
|
case "stderr":
|
||||||
|
log.Out = os.Stderr
|
||||||
|
default:
|
||||||
|
f, err := os.OpenFile(outString, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0644)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Out = f
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func SetLogLevel(log *logrus.Logger, levelString string) error {
|
||||||
|
level, err := logrus.ParseLevel(levelString)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Level = level
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
|
@ -0,0 +1,77 @@
|
||||||
|
package gopush
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Sirupsen/logrus"
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestSetLogLevel(t *testing.T) {
|
||||||
|
log := logrus.New()
|
||||||
|
|
||||||
|
err := SetLogLevel(log, "debug")
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
err = SetLogLevel(log, "invalid")
|
||||||
|
assert.Equal(t, "not a valid logrus Level: \"invalid\"", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSetLogOut(t *testing.T) {
|
||||||
|
log := logrus.New()
|
||||||
|
|
||||||
|
err := SetLogOut(log, "stdout")
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
err = SetLogOut(log, "stderr")
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
err = SetLogOut(log, "access.log")
|
||||||
|
assert.Nil(t, err)
|
||||||
|
|
||||||
|
// missing create logs folder.
|
||||||
|
err = SetLogOut(log, "logs/access.log")
|
||||||
|
assert.NotNil(t, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestInitDefaultLog(t *testing.T) {
|
||||||
|
PushConf = BuildDefaultPushConf()
|
||||||
|
|
||||||
|
// no errors on default config
|
||||||
|
assert.Nil(t, InitLog())
|
||||||
|
|
||||||
|
PushConf.Log.AccessLevel = "invalid"
|
||||||
|
|
||||||
|
assert.NotNil(t, InitLog())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAccessLevel(t *testing.T) {
|
||||||
|
PushConf = BuildDefaultPushConf()
|
||||||
|
|
||||||
|
PushConf.Log.AccessLevel = "invalid"
|
||||||
|
|
||||||
|
assert.NotNil(t, InitLog())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestErrorLevel(t *testing.T) {
|
||||||
|
PushConf = BuildDefaultPushConf()
|
||||||
|
|
||||||
|
PushConf.Log.ErrorLevel = "invalid"
|
||||||
|
|
||||||
|
assert.NotNil(t, InitLog())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestAccessLogPath(t *testing.T) {
|
||||||
|
PushConf = BuildDefaultPushConf()
|
||||||
|
|
||||||
|
PushConf.Log.AccessLog = "logs/access.log"
|
||||||
|
|
||||||
|
assert.NotNil(t, InitLog())
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestErrorLogPath(t *testing.T) {
|
||||||
|
PushConf = BuildDefaultPushConf()
|
||||||
|
|
||||||
|
PushConf.Log.ErrorLog = "logs/error.log"
|
||||||
|
|
||||||
|
assert.NotNil(t, InitLog())
|
||||||
|
}
|
Loading…
Reference in New Issue