Cloud Watch Logs hook for Logrus godoc reference

This fork of logrus-cloudwatchlogs:

Use this hook to send your Logrus logs to Amazon's Cloud Watch Logs.


The formatter has options available to it. Please check the godoc.


Look in the examples directory for more examples.

package main

import (


func main() {

	// Define the session - using SharedConfigState which forces file or env creds
    	sess, err := session.NewSessionWithOptions(session.Options{
    		SharedConfigState: session.SharedConfigEnable,
    		Config:            aws.Config{Region: aws.String("us-east-1")},
    	if err != nil {
    		panic("Not going to be able to write to cloud watch if you cant create a session")
    	// Determine if we are authorized to access AWS with the credentials provided. This does not mean you have access to the
    	// services required however.
    	_, err = sts.New(sess).GetCallerIdentity(&sts.GetCallerIdentityInput{})
    	if err != nil {
    		panic("Couldn't Validate our aws credentials")

	hook, err := logrus_cloudwatchlogs.NewHook(group, stream, sess)
	if err != nil {

	l := logrus.New()
	l.Out = ioutil.Discard
	l.Formatter = logrus_cloudwatchlogs.NewProdFormatter()

		"event": "testevent",
		"topic": "testtopic",
		"key":   "testkey",
	}).Fatal("Some fatal event")

Expand ▾ Collapse ▴




This section is empty.


This section is empty.


This section is empty.


type DevFormatter

type DevFormatter struct {
	HTTPRequestKey string

func (*DevFormatter) Format

func (f *DevFormatter) Format(entry *logrus.Entry) ([]byte, error)

type Hook

type Hook struct {
	// contains filtered or unexported fields

func NewHook

func NewHook(groupName, streamName string, sess *session.Session, batchFrequency time.Duration) (*Hook, error)

    NewHook returns a new CloudWatch hook.

    CloudWatch log events are sent in batches on an interval, batchFrequency. Pass 0 to send events synchronously.

    func (*Hook) Fire

    func (h *Hook) Fire(entry *logrus.Entry) error

      Fire sends the given entry to CloudWatch.

      func (*Hook) Levels

      func (h *Hook) Levels() []logrus.Level

      func (*Hook) WithFields

      func (h *Hook) WithFields(fields logrus.Fields) *Hook

        WithFields includes the given fields to log entries sent to CloudWatch.

        func (*Hook) WithFormatter

        func (h *Hook) WithFormatter(formatter logrus.Formatter) *Hook

          WithFormatter uses the given formatter to format log entries sent to CloudWatch.

          func (*Hook) Write

          func (h *Hook) Write(p []byte) (n int, err error)

            Write sends the given bytes to CloudWatch.

            type Marshaler

            type Marshaler interface {
            	MarshalLog() map[string]interface{}

              Marshaler is an interface any type can implement to change its output in our production logs.

              type ProdFormatter

              type ProdFormatter struct {
              	// contains filtered or unexported fields

              func NewProdFormatter

              func NewProdFormatter(options ...ProdFormatterOption) *ProdFormatter

                NewProdFormatter creates a new cloudwatchlogs production formatter. This is opinionated and you can feel free to create your own.

                func (*ProdFormatter) Format

                func (f *ProdFormatter) Format(entry *logrus.Entry) ([]byte, error)

                  Format formats logrus.Entry in the form of: [timestamp] [jsondata]

                  type ProdFormatterOption

                  type ProdFormatterOption func(*ProdFormatter) error

                  func AppName

                  func AppName(name string) ProdFormatterOption

                    AppName is a formatter option that specifies the name of the app. If this is not specified, the default is to use the executable name.

                    func HTTPRequest

                    func HTTPRequest(key string, headerFilter ...string) ProdFormatterOption

                      HTTPRequest is a formatter option that allows you to indicate that a certain key will contain an *http.Request. If it does, it will be formatted in the output. You can provide an optional list of keys to filter out of the serialized header. This is useful so you don't include sensitive information (like the authorization header). Note: if you do not provide this and you pass in an *http.Request, it will fail because encoding/json cannot serialize *http.Request.

                      func Hostname

                      func Hostname(name string) ProdFormatterOption

                        Hostname is a formatter option that specifies the hostname this program is running on. If this is not specified, the system's hostname will be used.


                        Path Synopsis