diff --git a/example/gin1/main.go b/example/gin1/main.go index ecd311f..e70fe73 100644 --- a/example/gin1/main.go +++ b/example/gin1/main.go @@ -125,7 +125,7 @@ func main() { sess := infrastructure.NewS3Session(&session.Options{ SharedConfigState: session.SharedConfigEnable, }) - awsS3Repository := repository.NewAWSS3Repository(log, sess, s3Config) + awsS3Repository := repository.NewAWSS3Repository(sess, s3Config) // -------------------------------------------------------------- // Redis @@ -140,7 +140,7 @@ func main() { Password: redisPassword, } r := infrastructure.NewRedis(o) - redisRepository := repository.NewRedisRepository(log, r) + redisRepository := repository.NewRedisRepository(r) defer closeRedis(log, r) // -------------------------------------------------------------- diff --git a/example/s3/main.go b/example/s3/main.go index aa7f856..ebe0e7b 100644 --- a/example/s3/main.go +++ b/example/s3/main.go @@ -39,7 +39,7 @@ func main() { // -------------------------------------------------------------- // example: S3 // -------------------------------------------------------------- - awsS3Repository := repository.NewAWSS3Repository(l, sess, s3Config) + awsS3Repository := repository.NewAWSS3Repository(sess, s3Config) text := "aaaaaaaab" bucket := "test" diff --git a/pkg/middleware/gin_http_logger.go b/pkg/middleware/gin_http_logger.go index 0a0e2ba..3a57e46 100644 --- a/pkg/middleware/gin_http_logger.go +++ b/pkg/middleware/gin_http_logger.go @@ -8,6 +8,7 @@ import ( "github.com/sirupsen/logrus" "github.com/y-miyazaki/go-common/pkg/context" "github.com/y-miyazaki/go-common/pkg/logger" + "go.uber.org/zap" ) // GinHTTPLogger retrieves the request/response logs. @@ -34,7 +35,6 @@ func GinHTTPLogger( fields[traceIDHeader] = c.Request.Header.Get(traceIDHeader) } // get error - l := l if err, err2 := context.GetGinContextError(c); err2 == nil { l = l.WithError(err) } @@ -50,6 +50,46 @@ func GinHTTPLogger( } } +// GinHTTPZapLogger retrieves the request/response logs. +func GinHTTPZapLogger( + l *logger.ZapLogger, + traceIDHeader string, + clientIPHeader string, +) gin.HandlerFunc { + return func(c *gin.Context) { + start := time.Now() + c.Next() + duration := time.Since(start) + l = l.With( + zap.String("host", c.Request.Host), + zap.String("duration", duration.String()), + zap.String("clientIP", clientIP(c, clientIPHeader)), + zap.String("method", c.Request.Method), + zap.String("url", c.Request.RequestURI), + zap.Int("status", c.Writer.Status()), + zap.String("referer", c.Request.Referer()), + zap.String("userAgent", c.Request.UserAgent()), + ) + + if traceIDHeader != "" { + l = l.With(zap.String(traceIDHeader, c.Request.Header.Get(traceIDHeader))) + } + // get error + if err, err2 := context.GetGinContextError(c); err2 == nil { + l = l.WithError(err) + } + // get error message + if messages, err := context.GetGinContextErrorMessage(c); err == nil { + l = l.With(zap.String("messages", messages)) + } + if c.Writer.Status() >= http.StatusInternalServerError { + l.Error("") + } else { + l.Info("") + } + } +} + // clientIP gets ip address of client. func clientIP(c *gin.Context, clientIPHeader string) string { if ip := c.Request.Header.Get(clientIPHeader); ip != "" { diff --git a/pkg/repository/aws_s3_repository.go b/pkg/repository/aws_s3_repository.go index 89e9eb9..a7121f2 100644 --- a/pkg/repository/aws_s3_repository.go +++ b/pkg/repository/aws_s3_repository.go @@ -12,7 +12,6 @@ import ( "github.com/aws/aws-sdk-go/aws/session" "github.com/aws/aws-sdk-go/service/s3" "github.com/aws/aws-sdk-go/service/s3/s3manager" - "github.com/y-miyazaki/go-common/pkg/logger" ) const ( @@ -37,15 +36,13 @@ type AWSS3RepositoryInterface interface { // AWSS3Repository struct. type AWSS3Repository struct { - logger *logger.Logger s3 *s3.S3 session *session.Session } // NewAWSS3Repository returns AWSS3Repository instance. -func NewAWSS3Repository(l *logger.Logger, s *session.Session, config *aws.Config) *AWSS3Repository { +func NewAWSS3Repository(s *session.Session, config *aws.Config) *AWSS3Repository { return &AWSS3Repository{ - logger: l, s3: s3.New(s, config), session: s, } @@ -69,10 +66,7 @@ func (r *AWSS3Repository) PutObjectFile(bucket, key, filePath string) (*s3.PutOb return nil, err } defer func() { - err = file.Close() - if err != nil { - r.logger.WithError(err).Errorf("can't close file(%s)", filePath) - } + _ = file.Close() }() // Get content-type buf := make([]byte, maxBufferSize) @@ -205,10 +199,7 @@ func (r *AWSS3Repository) Upload(bucket, key, filePath string) (*s3manager.Uploa return nil, err } defer func() { - err = file.Close() - if err != nil { - r.logger.WithError(err).Errorf("can't close file(%s)", filePath) - } + _ = file.Close() }() // Get content-type @@ -236,10 +227,7 @@ func (r *AWSS3Repository) Download(bucket, key, filePath string) error { return err } defer func() { - err = file.Close() - if err != nil { - r.logger.WithError(err).Errorf("can't close file(%s)", filePath) - } + _ = file.Close() }() downloader := s3manager.NewDownloader(r.session) diff --git a/pkg/repository/aws_ses_repository.go b/pkg/repository/aws_ses_repository.go index df4c4b3..aa3ddb8 100644 --- a/pkg/repository/aws_ses_repository.go +++ b/pkg/repository/aws_ses_repository.go @@ -3,7 +3,6 @@ package repository import ( "github.com/aws/aws-sdk-go/aws" "github.com/aws/aws-sdk-go/service/ses" - "github.com/y-miyazaki/go-common/pkg/logger" ) // AWSSESRepositoryInterface interface. @@ -16,16 +15,14 @@ type AWSSESRepositoryInterface interface { // AWSSESRepository struct. type AWSSESRepository struct { - logger *logger.Logger s *ses.SES configurationSetName *string isOutputLogPersonalInformation bool } // NewAWSSESRepository returns AWSSESRepository instance. -func NewAWSSESRepository(l *logger.Logger, s *ses.SES, configurationSetName *string, isOutputLogPersonalInformation bool) *AWSSESRepository { +func NewAWSSESRepository(s *ses.SES, configurationSetName *string, isOutputLogPersonalInformation bool) *AWSSESRepository { return &AWSSESRepository{ - logger: l, s: s, configurationSetName: configurationSetName, isOutputLogPersonalInformation: isOutputLogPersonalInformation, @@ -33,7 +30,7 @@ func NewAWSSESRepository(l *logger.Logger, s *ses.SES, configurationSetName *str } // SendTextEmail sends text email. -func (r *AWSSESRepository) SendTextEmail(from, to, subject, content string) error { +func (r *AWSSESRepository) SendTextEmail(from, to, subject, content string) (*ses.SendEmailOutput, error) { response, err := r.s.SendEmail(&ses.SendEmailInput{ ConfigurationSetName: r.configurationSetName, Destination: &ses.Destination{ @@ -56,13 +53,11 @@ func (r *AWSSESRepository) SendTextEmail(from, to, subject, content string) erro Source: aws.String(from), }) - r.log(to, subject, response, err) - - return err + return response, err } // SendHTMLEmail sends HTML email. -func (r *AWSSESRepository) SendHTMLEmail(from, to, subject, content string) error { +func (r *AWSSESRepository) SendHTMLEmail(from, to, subject, content string) (*ses.SendEmailOutput, error) { response, err := r.s.SendEmail(&ses.SendEmailInput{ ConfigurationSetName: r.configurationSetName, Destination: &ses.Destination{ @@ -85,13 +80,11 @@ func (r *AWSSESRepository) SendHTMLEmail(from, to, subject, content string) erro Source: aws.String(from), }) - r.log(to, subject, response, err) - - return err + return response, err } // SendEmail sends email. -func (r *AWSSESRepository) SendEmail(from, to, subject, contentText, contentHTML string) error { +func (r *AWSSESRepository) SendEmail(from, to, subject, contentText, contentHTML string) (*ses.SendEmailOutput, error) { response, err := r.s.SendEmail(&ses.SendEmailInput{ ConfigurationSetName: r.configurationSetName, Destination: &ses.Destination{ @@ -117,52 +110,18 @@ func (r *AWSSESRepository) SendEmail(from, to, subject, contentText, contentHTML }, Source: aws.String(from), }) - r.log(to, subject, response, err) - return err + return response, err } // SendBulkTemplatedEmail sends bulk emails. // Note: One or more Destination objects. All of the recipients in a Destination receive the same version of the email. // You can specify up to 50 Destination objects within a Destinations array. -func (r *AWSSESRepository) SendBulkTemplatedEmail(from, template, defaultTemplateData string, destinations []*ses.BulkEmailDestination) error { +func (r *AWSSESRepository) SendBulkTemplatedEmail(from, template, defaultTemplateData string, destinations []*ses.BulkEmailDestination) (*ses.SendBulkTemplatedEmailOutput, error) { response, err := r.s.SendBulkTemplatedEmail(&ses.SendBulkTemplatedEmailInput{ DefaultTemplateData: aws.String(defaultTemplateData), Destinations: destinations, Source: aws.String(from), Template: aws.String(template), }) - r.logBulkTemplated(template, defaultTemplateData, response, err) - return err -} - -func (r *AWSSESRepository) log(to, subject string, responseObject *ses.SendEmailOutput, responseError error) { - log := r.logger - - // Check output personal information flag. - if r.isOutputLogPersonalInformation { - log = r.logger. - WithField("to", to). - WithField("subject", subject) - } - if responseObject.MessageId != nil { - log = log.WithField("messageId", *responseObject.MessageId) - } - if responseError == nil { - log.Debug("Successfully sent an SES email") - } else { - log.WithError(responseError).Error("Error while sending an SES email") - } -} -func (r *AWSSESRepository) logBulkTemplated(template, defaultTemplateData string, responseObject *ses.SendBulkTemplatedEmailOutput, responseError error) { - log := r.logger - - log = log.WithField("template", template).WithField("defaultTemplateData", defaultTemplateData) - if responseObject.Status != nil { - log = log.WithField("status", responseObject.Status) - } - if responseError == nil { - log.Debug("Successfully sent an SES email") - } else { - log.WithError(responseError).Error("Error while sending an SES email") - } + return response, err } diff --git a/pkg/repository/base_repository.go b/pkg/repository/base_repository.go index 337d128..03aa21c 100644 --- a/pkg/repository/base_repository.go +++ b/pkg/repository/base_repository.go @@ -1,13 +1,10 @@ package repository -import "github.com/y-miyazaki/go-common/pkg/logger" - // BaseRepository struct. type BaseRepository struct { - Logger *logger.Logger } // NewBaseRepository returns BaseRepository instance. -func NewBaseRepository(l *logger.Logger) *BaseRepository { - return &BaseRepository{Logger: l} +func NewBaseRepository() *BaseRepository { + return &BaseRepository{} } diff --git a/pkg/repository/mock/aws_s3_repository.go b/pkg/repository/mock/aws_s3_repository.go deleted file mode 100644 index 21fcfa4..0000000 --- a/pkg/repository/mock/aws_s3_repository.go +++ /dev/null @@ -1,49 +0,0 @@ -// Code generated by MockGen. DO NOT EDIT. -// Source: aws_s3_repository.go - -// Package mock_repository is a generated GoMock package. -package mock_repository - -import ( - io "io" - reflect "reflect" - - gomock "github.com/golang/mock/gomock" -) - -// MockAWSS3RepositoryInterface is a mock of AWSS3RepositoryInterface interface. -type MockAWSS3RepositoryInterface struct { - ctrl *gomock.Controller - recorder *MockAWSS3RepositoryInterfaceMockRecorder -} - -// MockAWSS3RepositoryInterfaceMockRecorder is the mock recorder for MockAWSS3RepositoryInterface. -type MockAWSS3RepositoryInterfaceMockRecorder struct { - mock *MockAWSS3RepositoryInterface -} - -// NewMockAWSS3RepositoryInterface creates a new mock instance. -func NewMockAWSS3RepositoryInterface(ctrl *gomock.Controller) *MockAWSS3RepositoryInterface { - mock := &MockAWSS3RepositoryInterface{ctrl: ctrl} - mock.recorder = &MockAWSS3RepositoryInterfaceMockRecorder{mock} - return mock -} - -// EXPECT returns an object that allows the caller to indicate expected use. -func (m *MockAWSS3RepositoryInterface) EXPECT() *MockAWSS3RepositoryInterfaceMockRecorder { - return m.recorder -} - -// GetObject mocks base method. -func (m *MockAWSS3RepositoryInterface) GetObject(bucket, path string) io.ReaderAt { - m.ctrl.T.Helper() - ret := m.ctrl.Call(m, "GetObject", bucket, path) - ret0, _ := ret[0].(io.ReaderAt) - return ret0 -} - -// GetObject indicates an expected call of GetObject. -func (mr *MockAWSS3RepositoryInterfaceMockRecorder) GetObject(bucket, path interface{}) *gomock.Call { - mr.mock.ctrl.T.Helper() - return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetObject", reflect.TypeOf((*MockAWSS3RepositoryInterface)(nil).GetObject), bucket, path) -} diff --git a/pkg/repository/redis_repository.go b/pkg/repository/redis_repository.go index e8fb520..e4fb12d 100644 --- a/pkg/repository/redis_repository.go +++ b/pkg/repository/redis_repository.go @@ -5,7 +5,6 @@ import ( "time" redis "github.com/go-redis/redis/v8" - "github.com/y-miyazaki/go-common/pkg/logger" ) // RedisRepositoryInterface interface. @@ -14,15 +13,13 @@ type RedisRepositoryInterface interface { // RedisRepository struct. type RedisRepository struct { - logger *logger.Logger - redis *redis.Client + redis *redis.Client } // NewRedisRepository returns RedisRepository instance. -func NewRedisRepository(l *logger.Logger, r *redis.Client) *RedisRepository { +func NewRedisRepository(r *redis.Client) *RedisRepository { return &RedisRepository{ - logger: l, - redis: r, + redis: r, } } diff --git a/pkg/repository/slack_repository.go b/pkg/repository/slack_repository.go index 4cbfd55..be19806 100644 --- a/pkg/repository/slack_repository.go +++ b/pkg/repository/slack_repository.go @@ -2,7 +2,6 @@ package repository import ( "github.com/slack-go/slack" - "github.com/y-miyazaki/go-common/pkg/logger" ) // SlackRepositoryInterface interface @@ -13,15 +12,13 @@ type SlackRepositoryInterface interface { // SlackRepository struct. type SlackRepository struct { - logger *logger.Logger client *slack.Client channelID string } // NewSlackRepository returns SlackRepository instance. -func NewSlackRepository(l *logger.Logger, client *slack.Client, channelID string) *SlackRepository { +func NewSlackRepository(client *slack.Client, channelID string) *SlackRepository { return &SlackRepository{ - logger: l, client: client, channelID: channelID, } diff --git a/pkg/service/base_service.go b/pkg/service/base_service.go index 358c7c0..84dddfd 100644 --- a/pkg/service/base_service.go +++ b/pkg/service/base_service.go @@ -1,13 +1,10 @@ package service -import "github.com/y-miyazaki/go-common/pkg/logger" - // BaseService struct. type BaseService struct { - Logger *logger.Logger } // NewBaseService returns BaseService instance. -func NewBaseService(l *logger.Logger) *BaseService { - return &BaseService{Logger: l} +func NewBaseService() *BaseService { + return &BaseService{} }