Repository: kubernetes/release
Pull request #946 (2019-11-28 11:36:58)

Cleanup logging by using logrus
We're switching from go-kit/kit/log to sirupsen/logrus to not have the
need for passing the logger around.

Do you think this makes sense and we should switch to logrus for the rest
of the package, too?

k8s-ci-robot: [APPROVALNOTIFIER] This PR is **NOT APPROVED**

This pull-request has been approved by: *<a href="https://github.com/kubernetes/release/pull/946#" title="Author self-approved">saschagrunert</a>*
To complete the [pull request process](https://git.k8s.io/community/contributors/guide/owners.md#the-code-review-process), please assign **calebamiles**
You can assign the PR to them by writing `/assign @calebamiles` in a comment when ready.

The full list of commands accepted by this bot can be found [here](https://go.k8s.io/bot-commands?repo=kubernetes%2Frelease).

<details open>
Needs approval from an approver in each of these files:

- **[OWNERS](https://github.com/kubernetes/release/blob/master/OWNERS)**

Approvers can indicate their approval by writing `/approve` in a comment
Approvers can cancel approval by writing `/approve cancel` in a comment
</details>
<!-- META={"approvers":["calebamiles"]} -->
k8s-ci-robot: @saschagrunert: PR needs rebase.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
</details>
k8s-ci-robot: @saschagrunert: The following test **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-release-test | d12e4ec1e52e6312279e2fef50ce80d0d8f6c85f | [link](https://prow.k8s.io/view/gcs/kubernetes-jenkins/pr-logs/pull/release/946/pull-release-test/1200053473916227584) | `/test pull-release-test`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes&repo=release&pr=946). [Your PR dashboard](https://gubernator.k8s.io/pr/saschagrunert). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes/release/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @saschagrunert: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-release-test | d12e4ec1e52e6312279e2fef50ce80d0d8f6c85f | [link](https://prow.k8s.io/view/gcs/kubernetes-jenkins/pr-logs/pull/release/946/pull-release-test/1200053473916227584) | `/test pull-release-test`
pull-release-cluster-up | d12e4ec1e52e6312279e2fef50ce80d0d8f6c85f | [link](https://prow.k8s.io/view/gcs/kubernetes-jenkins/pr-logs/pull/release/946/pull-release-cluster-up/1200053473912033280/) | `/test pull-release-cluster-up`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes&repo=release&pr=946). [Your PR dashboard](https://gubernator.k8s.io/pr/saschagrunert). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes/release/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
k8s-ci-robot: @saschagrunert: The following tests **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-release-cluster-up | d12e4ec1e52e6312279e2fef50ce80d0d8f6c85f | [link](https://prow.k8s.io/view/gcs/kubernetes-jenkins/pr-logs/pull/release/946/pull-release-cluster-up/1200053473912033280/) | `/test pull-release-cluster-up`
pull-release-test | 1ce545d387194005beef92a58dbf070415452dcb | [link](https://prow.k8s.io/view/gcs/kubernetes-jenkins/pr-logs/pull/release/946/pull-release-test/1200054604239212545) | `/test pull-release-test`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes&repo=release&pr=946). [Your PR dashboard](https://gubernator.k8s.io/pr/saschagrunert). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes/release/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
saschagrunert: /retest
justaugustus: @saschagrunert -- Can you add a topic on one of the Release Engineering meetings to discuss?

I'd love us to use a consistent logging package across the repo, instead of per tool, which merits some discussion.

/hold
saschagrunert: > @saschagrunert -- Can you add a topic on one of the Release Engineering meetings to discuss?
> 
> I'd love us to use a consistent logging package across the repo, instead of per tool, which merits some discussion.
> 
> /hold

Yes sure, I added it to the agenda. :+1: 
saschagrunert: As discussed in the [meeting](https://docs.google.com/document/d/16GqCjnEh86w8yADcrUylNoE1y1sqjIMYNC_gdk5WPSQ) yesterday, I did a short research regarding logging possibilities:

| Framework | Pro | Contra |
| - | - | - |
| log | a standard package | no log levels, no structured logging |
| [golang/glog](https://github.com/golang/glog) | simple, used by a lot of k8s projects: `k8s.io/autoscaler`, `k8s.io/cloud-provider-alibaba-cloud`, `k8s.io/contrib`, `k8s.io/dns`, `k8s.io/heapster`, `k8s.io/kube-deploy`, `k8s.io/minikube`, `k8s.io/node-problem-detector`, `k8s.io/publishing-bot`, `k8s.io/test-infra`, `sigs.k8s.io/aws-encryption-provider`, `sigs.k8s.io/descheduler`, `sigs.k8s.io/krew`, `sigs.k8s.io/kubebuilder-declarative-pattern` | no structured logging, no logging interception (like printing the line number) |
| [k8s.io/klog](https://github.com/kubernetes/klog) | seems standard in k8s, maintained fork of glog | ? |
| [sirupsen/logrus](https://github.com/sirupsen/logrus) | probably the most used logger out there, nice features like logging interception to add context to the logs (like `file:line`), used for example by: `k8s.io/kompose`, `k8s.io/kubeadm`, `k8s.io/test-infra` | ? |
| [k8s.io/klog](https://github.com/kubernetes/klog) | seems standard in k8s, maintained fork of glog | ? |
| [go-kit/kit/log](https://github.com/go-kit/kit/tree/master/log) | already a dependency in this repository | ? |

k8s-ci-robot: @saschagrunert: PR needs rebase.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository.
</details>
justaugustus: @saschagrunert -- My vote is for `logrus`. The projects using it today are closest in function to the utilities we're building in this repo.
onlydole: +1 for `logrus` - I've worked on a few projects with that as one of the dependencies and it worked quite well! 
saschagrunert: Rebased on top of the latest mater branch. PTAL :)
k8s-ci-robot: @saschagrunert: The following test **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-release-test | d706a51d458c641f8afcf2560a5a16ae7c4da451 | [link](https://prow.k8s.io/view/gcs/kubernetes-jenkins/pr-logs/pull/release/946/pull-release-test/1204680594097704960) | `/test pull-release-test`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes&repo=release&pr=946). [Your PR dashboard](https://gubernator.k8s.io/pr/saschagrunert). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes/release/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->
saschagrunert: /retest
k8s-ci-robot: @saschagrunert: The following test **failed**, say `/retest` to rerun them all:

Test name | Commit | Details | Rerun command
--- | --- | --- | ---
pull-release-test | d706a51d458c641f8afcf2560a5a16ae7c4da451 | [link](https://prow.k8s.io/view/gcs/kubernetes-jenkins/pr-logs/pull/release/946/pull-release-test/1204681476172419076) | `/test pull-release-test`

[Full PR test history](https://prow.k8s.io/pr-history?org=kubernetes&repo=release&pr=946). [Your PR dashboard](https://gubernator.k8s.io/pr/saschagrunert). Please help us cut down on flakes by [linking to](https://git.k8s.io/community/contributors/devel/sig-testing/flaky-tests.md#filing-issues-for-flaky-tests) an [open issue](https://github.com/kubernetes/release/issues?q=is:issue+is:open) when you hit one in your PR.

<details>

Instructions for interacting with me using PR comments are available [here](https://git.k8s.io/community/contributors/guide/pull-requests.md).  If you have questions or suggestions related to my behavior, please file an issue against the [kubernetes/test-infra](https://github.com/kubernetes/test-infra/issues/new?title=Prow%20issue:) repository. I understand the commands that are listed [here](https://go.k8s.io/bot-commands).
</details>
<!-- test report -->

Patch:
diff --git a/.errcheck-excludes b/.errcheck-excludes
deleted file mode 100644
index 97b97714..00000000
--- a/.errcheck-excludes
+++ /dev/null
@@ -1,1 +0,0 @@
-(github.com/go-kit/kit/log.Logger).Log
diff --git a/.golangci.yml b/.golangci.yml
index 2df76ada..6778d357 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -47,7 +47,6 @@ linters-settings:
   errcheck:
     check-type-assertions: true
     check-blank: true
-    exclude: .errcheck-excludes
   gocritic:
     enabled-checks:
       # Diagnostic
diff --git a/cmd/release-notes/BUILD.bazel b/cmd/release-notes/BUILD.bazel
index 726c4701..515def9f 100644
--- a/cmd/release-notes/BUILD.bazel
+++ b/cmd/release-notes/BUILD.bazel
@@ -8,10 +8,8 @@ go_library(
     deps = [
         "//pkg/git:go_default_library",
         "//pkg/notes:go_default_library",
-        "@com_github_go_kit_kit//log:go_default_library",
-        "@com_github_go_kit_kit//log/level:go_default_library",
         "@com_github_google_go_github_v28//github:go_default_library",
-        "@com_github_kolide_kit//env:go_default_library",
+        "@com_github_sirupsen_logrus//:go_default_library",
         "@org_golang_x_oauth2//:go_default_library",
     ],
 )
diff --git a/cmd/release-notes/main.go b/cmd/release-notes/main.go
index 122036a5..9b26cc4f 100644
--- a/cmd/release-notes/main.go
+++ b/cmd/release-notes/main.go
@@ -24,11 +24,10 @@ import (
 	"fmt"
 	"io/ioutil"
 	"os"
+	"strconv"
 
-	"github.com/go-kit/kit/log"
-	"github.com/go-kit/kit/log/level"
 	"github.com/google/go-github/v28/github"
-	"github.com/kolide/kit/env"
+	"github.com/sirupsen/logrus"
 	"golang.org/x/oauth2"
 
 	"k8s.io/release/pkg/git"
@@ -51,7 +50,6 @@ type options struct {
 	requiredAuthor string
 	debug          bool
 	discoverMode   string
-	logger         log.Logger
 }
 
 const (
@@ -66,7 +64,7 @@ func (o *options) BindFlags() *flag.FlagSet {
 	flags.StringVar(
 		&o.githubToken,
 		"github-token",
-		env.String("GITHUB_TOKEN", ""),
+		envDefault("GITHUB_TOKEN", ""),
 		"A personal GitHub access token (required)",
 	)
 
@@ -74,7 +72,7 @@ func (o *options) BindFlags() *flag.FlagSet {
 	flags.StringVar(
 		&o.githubOrg,
 		"github-org",
-		env.String("GITHUB_ORG", "kubernetes"),
+		envDefault("GITHUB_ORG", "kubernetes"),
 		"Name of github organization",
 	)
 
@@ -82,7 +80,7 @@ func (o *options) BindFlags() *flag.FlagSet {
 	flags.StringVar(
 		&o.githubRepo,
 		"github-repo",
-		env.String("GITHUB_REPO", "kubernetes"),
+		envDefault("GITHUB_REPO", "kubernetes"),
 		"Name of github repository",
 	)
 
@@ -91,7 +89,7 @@ func (o *options) BindFlags() *flag.FlagSet {
 	flags.StringVar(
 		&o.output,
 		"output",
-		env.String("OUTPUT", ""),
+		envDefault("OUTPUT", ""),
 		"The path to the where the release notes will be printed",
 	)
 
@@ -99,7 +97,7 @@ func (o *options) BindFlags() *flag.FlagSet {
 	flags.StringVar(
 		&o.branch,
 		"branch",
-		env.String("BRANCH", "master"),
+		envDefault("BRANCH", "master"),
 		"Select which branch to scrape. Defaults to `master`",
 	)
 
@@ -108,7 +106,7 @@ func (o *options) BindFlags() *flag.FlagSet {
 	flags.StringVar(
 		&o.startSHA,
 		"start-sha",
-		env.String("START_SHA", ""),
+		envDefault("START_SHA", ""),
 		"The commit hash to start at",
 	)
 
@@ -116,7 +114,7 @@ func (o *options) BindFlags() *flag.FlagSet {
 	flags.StringVar(
 		&o.endSHA,
 		"end-sha",
-		env.String("END_SHA", ""),
+		envDefault("END_SHA", ""),
 		"The commit hash to end at",
 	)
 
@@ -125,7 +123,7 @@ func (o *options) BindFlags() *flag.FlagSet {
 	flags.StringVar(
 		&o.startRev,
 		"start-rev",
-		env.String("START_REV", ""),
+		envDefault("START_REV", ""),
 		"The git revision to start at. Can be used as alternative to start-sha.",
 	)
 
@@ -134,7 +132,7 @@ func (o *options) BindFlags() *flag.FlagSet {
 	flags.StringVar(
 		&o.endRev,
 		"end-rev",
-		env.String("END_REV", ""),
+		envDefault("END_REV", ""),
 		"The git revision to end at. Can be used as alternative to end-sha.",
 	)
 
@@ -143,7 +141,7 @@ func (o *options) BindFlags() *flag.FlagSet {
 	flags.StringVar(
 		&o.repoPath,
 		"repo-path",
-		env.String("REPO_PATH", ""),
+		envDefault("REPO_PATH", ""),
 		"Path to a the local Kubernetes repository",
 	)
 
@@ -151,7 +149,7 @@ func (o *options) BindFlags() *flag.FlagSet {
 	flags.StringVar(
 		&o.releaseVersion,
 		"release-version",
-		env.String("RELEASE_VERSION", ""),
+		envDefault("RELEASE_VERSION", ""),
 		"Which release version to tag the entries as.",
 	)
 
@@ -159,28 +157,29 @@ func (o *options) BindFlags() *flag.FlagSet {
 	flags.StringVar(
 		&o.format,
 		"format",
-		env.String("FORMAT", "markdown"),
+		envDefault("FORMAT", "markdown"),
 		"The format for notes output (options: markdown, json)",
 	)
 
 	flags.StringVar(
 		&o.requiredAuthor,
 		"requiredAuthor",
-		env.String("REQUIRED_AUTHOR", "k8s-ci-robot"),
+		envDefault("REQUIRED_AUTHOR", "k8s-ci-robot"),
 		"Only commits from this GitHub user are considered. Set to empty string to include all users",
 	)
 
+	debug, _ := strconv.ParseBool(envDefault("DEBUG", "false"))
 	flags.BoolVar(
 		&o.debug,
 		"debug",
-		env.Bool("DEBUG", false),
+		debug,
 		"Enable debug logging",
 	)
 
 	flags.StringVar(
 		&o.discoverMode,
 		"discover",
-		env.String("DISCOVER", revisionDiscoveryModeNONE),
+		envDefault("DISCOVER", revisionDiscoveryModeNONE),
 		fmt.Sprintf("The revision discovery mode for automatic revision retrieval (options: %s, %s)",
 			revisionDiscoveryModeNONE,
 			revisionDiscoveryModeMinorToLatest),
@@ -189,6 +188,14 @@ func (o *options) BindFlags() *flag.FlagSet {
 	return flags
 }
 
+func envDefault(key, def string) string {
+	value, ok := os.LookupEnv(key)
+	if !ok {
+		return def
+	}
+	return value
+}
+
 func (o *options) GetReleaseNotes() (notes.ReleaseNotes, notes.ReleaseNotesHistory, error) {
 	// Create the GitHub API client
 	ctx := context.Background()
@@ -198,7 +205,7 @@ func (o *options) GetReleaseNotes() (notes.ReleaseNotes, notes.ReleaseNotesHisto
 	githubClient := github.NewClient(httpClient)
 
 	// Fetch a list of fully-contextualized release notes
-	level.Info(o.logger).Log("msg", "fetching all commits. this might take a while...")
+	logrus.Info("fetching all commits. this might take a while...")
 
 	opts := []notes.GitHubAPIOption{notes.WithContext(ctx)}
 	if o.githubOrg != "" {
@@ -209,10 +216,10 @@ func (o *options) GetReleaseNotes() (notes.ReleaseNotes, notes.ReleaseNotesHisto
 	}
 
 	releaseNotes, history, err := notes.ListReleaseNotes(
-		githubClient, o.logger, o.branch, o.startSHA, o.endSHA,
+		githubClient, o.branch, o.startSHA, o.endSHA,
 		o.requiredAuthor, o.releaseVersion, opts...)
 	if err != nil {
-		level.Error(o.logger).Log("msg", "error generating release notes", "err", err)
+		logrus.Errorf("generating release notes: %v", err)
 		return nil, nil, err
 	}
 
@@ -220,7 +227,7 @@ func (o *options) GetReleaseNotes() (notes.ReleaseNotes, notes.ReleaseNotesHisto
 }
 
 func (o *options) WriteReleaseNotes(releaseNotes notes.ReleaseNotes, history notes.ReleaseNotesHistory) error {
-	level.Info(o.logger).Log("msg", "got the commits, performing rendering")
+	logrus.Info("got the commits, performing rendering")
 
 	// Open a handle to the file which will contain the release notes output
 	var output *os.File
@@ -230,13 +237,13 @@ func (o *options) WriteReleaseNotes(releaseNotes notes.ReleaseNotes, history not
 	if o.output != "" {
 		output, err = os.OpenFile(o.output, os.O_RDWR|os.O_CREATE, 0644)
 		if err != nil {
-			level.Error(o.logger).Log("msg", "error opening the supplied output file", "err", err)
+			logrus.Errorf("opening the supplied output file: %v", err)
 			return err
 		}
 	} else {
 		output, err = ioutil.TempFile("", "release-notes-")
 		if err != nil {
-			level.Error(o.logger).Log("msg", "error creating a temporary file to write the release notes to", "err", err)
+			logrus.Errorf("creating a temporary file to write the release notes to: %v", err)
 			return err
 		}
 	}
@@ -251,7 +258,7 @@ func (o *options) WriteReleaseNotes(releaseNotes notes.ReleaseNotes, history not
 
 		if len(byteValue) > 0 {
 			if err := json.Unmarshal(byteValue, &existingNotes); err != nil {
-				level.Error(o.logger).Log("msg", "error unmarshalling existing notes", "err", err)
+				logrus.Errorf("unmarshalling existing notes: %v", err)
 				return err
 			}
 		}
@@ -275,36 +282,35 @@ func (o *options) WriteReleaseNotes(releaseNotes notes.ReleaseNotes, history not
 		enc := json.NewEncoder(output)
 		enc.SetIndent("", "  ")
 		if err := enc.Encode(releaseNotes); err != nil {
-			level.Error(o.logger).Log("msg", "error encoding JSON output", "err", err)
+			logrus.Errorf("encoding JSON output: %v", err)
 			os.Exit(1)
 		}
 	case "markdown":
 		doc, err := notes.CreateDocument(releaseNotes, history)
 		if err != nil {
-			level.Error(o.logger).Log("msg", "error creating release note document", "err", err)
+			logrus.Errorf("creating release note document: %v", err)
 			return err
 		}
 
 		if err := notes.RenderMarkdown(doc, output); err != nil {
-			level.Error(o.logger).Log("msg", "error rendering release note document to markdown", "err", err)
+			logrus.Errorf("rendering release note document to markdown: %v", err)
 			return err
 		}
 
 	default:
 		errString := fmt.Sprintf("%q is an unsupported format", o.format)
-		level.Error(o.logger).Log("msg", errString)
+		logrus.Error(errString)
 		return errors.New(errString)
 	}
 
-	level.Info(o.logger).Log(
-		"msg", "release notes written to file",
-		"path", output.Name(),
-		"format", o.format,
-	)
+	logrus.
+		WithField("path", output.Name()).
+		WithField("format", o.format).
+		Info("release notes written to file")
 	return nil
 }
 
-func parseOptions(args []string, logger log.Logger) (*options, error) {
+func parseOptions(args []string) (*options, error) {
 	opts := &options{}
 	flags := opts.BindFlags()
 
@@ -335,8 +341,8 @@ func parseOptions(args []string, logger log.Logger) (*options, error) {
 		}
 		opts.startSHA = start
 		opts.endSHA = end
-		level.Info(logger).Log("msg", "discovered start SHA "+start)
-		level.Info(logger).Log("msg", "discovered end SHA "+end)
+		logrus.Infof("discovered start SHA %s", start)
+		logrus.Infof("discovered end SHA %s", end)
 	}
 
 	// The start SHA is required.
@@ -351,7 +357,7 @@ func parseOptions(args []string, logger log.Logger) (*options, error) {
 
 	// Check if we have to parse a revision
 	if opts.startRev != "" || opts.endRev != "" {
-		level.Info(logger).Log("msg", "cloning/updating repository to discover start or end sha")
+		logrus.Info("cloning/updating repository to discover start or end sha")
 		repo, err := git.CloneOrOpenGitHubRepo(
 			opts.repoPath,
 			opts.githubOrg,
@@ -366,7 +372,7 @@ func parseOptions(args []string, logger log.Logger) (*options, error) {
 			if err != nil {
 				return nil, err
 			}
-			level.Info(logger).Log("msg", "using found start SHA: "+sha)
+			logrus.Infof("using found start SHA: %s", sha)
 			opts.startSHA = sha
 		}
 		if opts.endRev != "" {
@@ -374,31 +380,26 @@ func parseOptions(args []string, logger log.Logger) (*options, error) {
 			if err != nil {
 				return nil, err
 			}
-			level.Info(logger).Log("msg", "using found end SHA: "+sha)
+			logrus.Infof("using found end SHA: %s", sha)
 			opts.endSHA = sha
 		}
 	}
 
 	// Add appropriate log filtering
 	if opts.debug {
-		logger = level.NewFilter(logger, level.AllowDebug())
-	} else {
-		logger = level.NewFilter(logger, level.AllowInfo())
+		logrus.SetLevel(logrus.DebugLevel)
 	}
-	logger = log.With(logger, "timestamp", log.DefaultTimestamp, "caller", log.DefaultCaller)
-	opts.logger = logger
 
 	return opts, nil
 }
 
-func run(logger log.Logger, args []string) error {
+func run(args []string) error {
 	// Parse the CLI options and enforce required defaults
-	opts, err := parseOptions(args, logger)
+	opts, err := parseOptions(args)
 	if err != nil {
-		level.Error(logger).Log("msg", "error parsing options", "err", err)
+		logrus.Errorf("parsing options: %v", err)
 		return err
 	}
-	logger = opts.logger
 
 	// get the release notes
 	releaseNotes, history, err := opts.GetReleaseNotes()
@@ -408,7 +409,7 @@ func run(logger log.Logger, args []string) error {
 
 	err = opts.WriteReleaseNotes(releaseNotes, history)
 	if err != nil {
-		level.Error(logger).Log("msg", "error writing to file", "err", err)
+		logrus.Errorf("writing to file: %v", err)
 		return err
 	}
 
@@ -416,12 +417,8 @@ func run(logger log.Logger, args []string) error {
 }
 
 func main() {
-	// Use the go-kit structured logger for logging. To learn more about structured
-	// logging see: https://github.com/go-kit/kit/tree/master/log#structured-logging
-	// https://godoc.org/github.com/go-kit/kit/log/level
-	logger := log.NewLogfmtLogger(log.NewSyncWriter(os.Stderr))
-
-	if err := run(logger, os.Args[1:]); err != nil {
+	logrus.SetFormatter(&logrus.TextFormatter{DisableTimestamp: true})
+	if err := run(os.Args[1:]); err != nil {
 		os.Exit(-1)
 	}
 }
diff --git a/go.mod b/go.mod
index 56df8bb5..c770b796 100644
--- a/go.mod
+++ b/go.mod
@@ -5,12 +5,11 @@ go 1.13
 require (
 	cloud.google.com/go v0.38.0 // indirect
 	github.com/blang/semver v3.5.1+incompatible
-	github.com/go-kit/kit v0.9.0
 	github.com/golangci/golangci-lint v1.21.0
 	github.com/google/go-github/v28 v28.1.1
-	github.com/kolide/kit v0.0.0-20190123023048-c155a91098e3
 	github.com/pkg/errors v0.8.1
 	github.com/psampaz/go-mod-outdated v0.4.0
+	github.com/sirupsen/logrus v1.4.2
 	github.com/spf13/cobra v0.0.5
 	github.com/stretchr/testify v1.4.0
 	golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45
diff --git a/go.sum b/go.sum
index 1c340287..6c35daba 100644
--- a/go.sum
+++ b/go.sum
@@ -98,10 +98,8 @@ github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0=
 github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
 github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db h1:GYXWx7Vr3+zv833u+8IoXbNnQY0AdXsxAgI0kX7xcwA=
 github.com/go-critic/go-critic v0.3.5-0.20190904082202-d79a9f0c64db/go.mod h1:+sE8vrLDS2M0pZkBk0wy6+nLdKexVDrl/jBqQOTDThA=
-github.com/go-kit/kit v0.7.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
+github.com/go-kit/kit v0.8.0 h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=
 github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
-github.com/go-kit/kit v0.9.0 h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk=
-github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
 github.com/go-lintpack/lintpack v0.5.2 h1:DI5mA3+eKdWeJ40nU4d6Wc26qmdG8RCi/btYq0TuRN0=
 github.com/go-lintpack/lintpack v0.5.2/go.mod h1:NwZuYi2nUHho8XEIZ6SIxihrnPoqBTDqfpXvXAN0sXM=
 github.com/go-logfmt/logfmt v0.3.0 h1:8HUsc87TaSWLKwrnumgC8/YconD2fJQsRJAsWaPg2ic=
@@ -117,8 +115,6 @@ github.com/go-openapi/jsonreference v0.0.0-20161105162150-36d33bfe519e/go.mod h1
 github.com/go-openapi/spec v0.0.0-20171219195406-fa03337d7da5/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc=
 github.com/go-openapi/swag v0.0.0-20171111214437-cf0bdb963811/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I=
 github.com/go-sql-driver/mysql v0.0.0-20160411075031-7ebe0a500653/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
-github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
-github.com/go-stack/stack v1.7.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk=
 github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
 github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g=
@@ -220,7 +216,6 @@ github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPg
 github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
 github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
 github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
-github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/googleapis/gax-go v2.0.0+incompatible h1:j0GKcs05QVmm7yesiZq2+9cxHkNK9YM6zKx4D2qucQU=
 github.com/googleapis/gax-go v2.0.0+incompatible/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY=
@@ -243,7 +238,6 @@ github.com/gregjones/httpcache v0.0.0-20190212212710-3befbb6ad0cc/go.mod h1:Fecb
 github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
 github.com/grpc-ecosystem/grpc-gateway v1.4.1/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
-github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
 github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
 github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
 github.com/hashicorp/go-multierror v0.0.0-20171204182908-b7773ae21874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I=
@@ -267,7 +261,6 @@ github.com/jinzhu/gorm v0.0.0-20170316141641-572d0a0ab1eb/go.mod h1:Vla75njaFJ8c
 github.com/jinzhu/inflection v0.0.0-20190603042836-f5c5f50e6090/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
 github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
 github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
-github.com/jmoiron/sqlx v0.0.0-20180406164412-2aeb6a910c2b/go.mod h1:IiEW3SEiiErVyFdH8NTuWjSifiEQKUoyK3LNqr2kCHU=
 github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
 github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
 github.com/json-iterator/go v1.1.5/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU=
@@ -289,8 +282,6 @@ github.com/klauspost/pgzip v1.2.1/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQ
 github.com/knative/build v0.1.2/go.mod h1:/sU74ZQkwlYA5FwYDJhYTy61i/Kn+5eWfln2jDbw3Qo=
 github.com/knative/build v0.3.1-0.20190330033454-38ace00371c7/go.mod h1:/sU74ZQkwlYA5FwYDJhYTy61i/Kn+5eWfln2jDbw3Qo=
 github.com/knative/pkg v0.0.0-20190330034653-916205998db9/go.mod h1:7Ijfhw7rfB+H9VtosIsDYvZQ+qYTz7auK3fHW/5z4ww=
-github.com/kolide/kit v0.0.0-20190123023048-c155a91098e3 h1:Ii9fpYpVTsnibfXFHctbDJ78azLTz5Qiph4o6zpIj4o=
-github.com/kolide/kit v0.0.0-20190123023048-c155a91098e3/go.mod h1:wdtviHFxzZ59XeVE7KnsKbj/F+g9J5Cbx1mcXEdLKgY=
 github.com/konsorten/go-windows-terminal-sequences v0.0.0-20180402223658-b729f2633dfe/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
 github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s=
@@ -327,7 +318,6 @@ github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp
 github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y=
 github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
 github.com/mattn/go-sqlite3 v0.0.0-20160514122348-38ee283dabf1/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
-github.com/mattn/go-sqlite3 v1.10.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
 github.com/mattn/go-zglob v0.0.1/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo=
 github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw=
 github.com/matttproud/golang_protobuf_extensions v1.0.0/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
@@ -346,7 +336,6 @@ github.com/mozilla/tls-observatory v0.0.0-20190404164649-a3c1b6cfecfd/go.mod h1:
 github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
 github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1ORQBMvzfzBgpsctsbQikCVpvC+tX285E=
 github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU=
-github.com/oklog/ulid v0.3.0/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
 github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
 github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
 github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88=
@@ -359,7 +348,6 @@ github.com/onsi/gomega v1.4.2/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
 github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
 github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=
 github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
-github.com/opencensus-integrations/ocsql v0.1.1/go.mod h1:ozPYpNVBHZsX33jfoQPO5TlI5lqh0/3R36kirEqJKAM=
 github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
 github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
 github.com/openzipkin/zipkin-go v0.1.1/go.mod h1:NtoC/o8u3JlF1lSlyPNswIbeQH9bJTmOf0Erfk+hxe8=
@@ -458,7 +446,6 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+
 github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
 github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
-github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
 github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
@@ -494,7 +481,6 @@ go.etcd.io/bbolt v1.3.1-etcd.7/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XK
 go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
 go.etcd.io/etcd v0.0.0-20181031231232-83304cfc808c/go.mod h1:weASp41xM3dk0YHg1s/W8ecdGP5G4teSTMBPpYAaUgA=
 go.opencensus.io v0.17.0/go.mod h1:mp1VrMQxhlqqDpKvH4UcQUa4YwlzNmymAjPrDdfxNpI=
-go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA=
 go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
 go.opencensus.io v0.20.2 h1:NAfh7zF0/3/HqtMvJNZ/RFrSlCE6ZTlHmKfhL/Dm1Jk=
 go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk=
@@ -614,7 +600,6 @@ google.golang.org/api v0.4.0 h1:KKgc1aqhV8wDPbDzlDtpvyjZFY3vjz85FP7p4wcQUyI=
 google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
 google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
 google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
diff --git a/pkg/notes/BUILD.bazel b/pkg/notes/BUILD.bazel
index b5b94cbc..4240e2c1 100644
--- a/pkg/notes/BUILD.bazel
+++ b/pkg/notes/BUILD.bazel
@@ -9,10 +9,9 @@ go_library(
     importpath = "k8s.io/release/pkg/notes",
     visibility = ["//visibility:public"],
     deps = [
-        "@com_github_go_kit_kit//log:go_default_library",
-        "@com_github_go_kit_kit//log/level:go_default_library",
         "@com_github_google_go_github_v28//github:go_default_library",
         "@com_github_pkg_errors//:go_default_library",
+        "@com_github_sirupsen_logrus//:go_default_library",
     ],
 )
 
diff --git a/pkg/notes/notes.go b/pkg/notes/notes.go
index 2106dcbb..7e3d0eaa 100644
--- a/pkg/notes/notes.go
+++ b/pkg/notes/notes.go
@@ -25,10 +25,9 @@ import (
 	"strconv"
 	"strings"
 
-	"github.com/go-kit/kit/log"
-	"github.com/go-kit/kit/log/level"
 	"github.com/google/go-github/v28/github"
 	"github.com/pkg/errors"
+	"github.com/sirupsen/logrus"
 )
 
 // ReleaseNote is the type that represents the total sum of all the information
@@ -166,7 +165,6 @@ type Result struct {
 // starting from a given commit SHA and ending at starting a given commit SHA.
 func ListReleaseNotes(
 	client *github.Client,
-	logger log.Logger,
 	branch,
 	start,
 	end,
@@ -174,7 +172,7 @@ func ListReleaseNotes(
 	relVer string,
 	opts ...GitHubAPIOption,
 ) (ReleaseNotes, ReleaseNotesHistory, error) {
-	results, err := ListCommitsWithNotes(client, logger, branch, start, end, opts...)
+	results, err := ListCommitsWithNotes(client, branch, start, end, opts...)
 	if err != nil {
 		return nil, nil, err
 	}
@@ -191,11 +189,10 @@ func ListReleaseNotes(
 
 		note, err := ReleaseNoteFromCommit(result, client, relVer, opts...)
 		if err != nil {
-			level.Error(logger).Log(
-				"err", err,
-				"msg", "error getting the release note from commit while listing release notes",
-				"sha", result.commit.GetSHA(),
-			)
+			logrus.
+				WithField("err", err).
+				WithField("sha", result.commit.GetSHA()).
+				Error("getting the release note from commit while listing release notes")
 			continue
 		}
 
@@ -212,12 +209,11 @@ func ListReleaseNotes(
 			}
 			if match {
 				excluded = true
-				level.Debug(logger).Log(
-					"msg", "Excluding notes that are deemed to have no content based on filter, and should NOT be added to release notes.",
-					"sha", result.commit.GetSHA(),
-					"func", "ListReleaseNotes",
-					"filter", filter,
-				)
+				logrus.
+					WithField("sha", result.commit.GetSHA()).
+					WithField("func", "ListReleaseNotes").
+					WithField("filter", filter).
+					Debug("Excluding notes that are deemed to have no content based on filter, and should NOT be added to release notes.")
 				break
 			}
 		}
@@ -435,7 +431,6 @@ func ListCommits(client *github.Client, branch, start, end string, opts ...GitHu
 // returned.
 func ListCommitsWithNotes(
 	client *github.Client,
-	logger log.Logger,
 	branch,
 	start,
 	end string,
@@ -447,32 +442,28 @@ func ListCommitsWithNotes(
 	}
 
 	for i, commit := range commits {
-		level.Debug(logger).Log("msg", "################################################")
-		level.Info(logger).Log("msg", fmt.Sprintf("[%d/%d - %0.2f%%]", i+1, len(commits), (float64(i+1)/float64(len(commits)))*100.0))
-		level.Debug(logger).Log(
-			"msg", "Processing commit",
-			"func", "ListCommitsWithNotes",
-			"sha", commit.GetSHA(),
+		logrus.Infof(
+			"[%d/%d - %0.2f%%]: %s",
+			i+1, len(commits), (float64(i+1)/float64(len(commits)))*100.0,
+			commit.GetSHA(),
 		)
 
-		prs, err := PRsFromCommit(client, logger, commit, opts...)
+		prs, err := PRsFromCommit(client, commit, opts...)
 		if err != nil {
 			if err.Error() == "no matches found when parsing PR from commit" {
-				level.Debug(logger).Log(
-					"msg", fmt.Sprintf("No matches found when parsing PR from commit sha '%s'.", commit.GetSHA()),
-					"func", "ListCommitsWithNotes",
-				)
+				logrus.
+					WithField("func", "ListCommitsWithNotes").
+					Debugf("No matches found when parsing PR from commit sha %q", commit.GetSHA())
 				continue
 			}
 		}
 
 		for _, pr := range prs {
-			level.Debug(logger).Log(
-				"msg", fmt.Sprintf("Obtaining PR associated with commit sha '%s'.", commit.GetSHA()),
-				"func", "ListCommitsWithNotes",
-				"pr no", pr.GetNumber(),
-				"pr body", pr.GetBody(),
-			)
+			logrus.
+				WithField("func", "ListCommitsWithNotes").
+				WithField("pr no", pr.GetNumber()).
+				WithField("pr body", pr.GetBody()).
+				Debugf("Obtaining PR associated with commit sha %q", commit.GetSHA())
 
 			// exclusionFilters is a list of regular expressions that match commits that
 			// do NOT contain release notes. Notably, this is all of the variations of
@@ -501,11 +492,10 @@ func ListCommitsWithNotes(
 				}
 				if match {
 					excluded = true
-					level.Debug(logger).Log(
-						"msg", "Excluding notes for PR based on the exclusion filter.",
-						"func", "ListCommitsWithNotes",
-						"filter", filter,
-					)
+					logrus.
+						WithField("func", "ListCommitsWithNotes").
+						WithField("filter", filter).
+						Debug("Excluding notes for PR based on the exclusion filter.")
 					break
 				}
 			}
@@ -530,11 +520,10 @@ func ListCommitsWithNotes(
 				if match {
 					matched = true
 					filtered = append(filtered, &Result{commit: commit, pullRequest: pr})
-					level.Debug(logger).Log(
-						"msg", "Including notes for PR based on the inclusion filter.",
-						"func", "ListCommitsWithNotes",
-						"filter", filter,
-					)
+					logrus.
+						WithField("func", "ListCommitsWithNotes").
+						WithField("filter", filter).
+						Debug("Including notes for PR based on the inclusion filter.")
 				}
 			}
 
@@ -551,16 +540,15 @@ func ListCommitsWithNotes(
 // PRsFromCommit return an API Pull Request struct given a commit struct. This is
 // useful for going from a commit log to the PR (which contains useful info such
 // as labels).
-func PRsFromCommit(client *github.Client, logger log.Logger, commit *github.RepositoryCommit, opts ...GitHubAPIOption) (
+func PRsFromCommit(client *github.Client, commit *github.RepositoryCommit, opts ...GitHubAPIOption) (
 	[]*github.PullRequest, error,
 ) {
 	githubPRs, err := prsForCommitFromMessage(client, *commit.Commit.Message, opts...)
 	if err != nil {
-		level.Debug(logger).Log(
-			"err", err,
-			"msg", "error getting the pr numbers from commit message",
-			"sha", commit.GetSHA(),
-		)
+		logrus.
+			WithField("err", err).
+			WithField("sha", commit.GetSHA()).
+			Debug("getting the pr numbers from commit message")
 		return prsForCommitFromSHA(client, *commit.SHA, opts...)
 	}
 	return githubPRs, err
diff --git a/repos.bzl b/repos.bzl
index 2d8b8c7d..2580ffc1 100644
--- a/repos.bzl
+++ b/repos.bzl
@@ -39,8 +39,8 @@ def go_repositories():
         build_file_generation = "on",
         build_file_proto_mode = "disable",
         importpath = "github.com/go-kit/kit",
-        sum = "h1:wDJmvq38kDhkVxi50ni9ykkdUr1PKgqKOoi01fa0Mdk=",
-        version = "v0.9.0",
+        sum = "h1:Wz+5lgoB0kkuqLEc6NVmwRknTKP6dTGbSqvhZtBI/j0=",
+        version = "v0.8.0",
     )
 
     go_repository(
@@ -79,15 +79,6 @@ def go_repositories():
         version = "v1.0.0",
     )
 
-    go_repository(
-        name = "com_github_kolide_kit",
-        build_file_generation = "on",
-        build_file_proto_mode = "disable",
-        importpath = "github.com/kolide/kit",
-        sum = "h1:Ii9fpYpVTsnibfXFHctbDJ78azLTz5Qiph4o6zpIj4o=",
-        version = "v0.0.0-20190123023048-c155a91098e3",
-    )
-
     go_repository(
         name = "com_github_kr_logfmt",
         build_file_generation = "on",
@@ -611,8 +602,8 @@ def go_repositories():
         build_file_generation = "on",
         build_file_proto_mode = "disable",
         importpath = "github.com/go-sql-driver/mysql",
-        sum = "h1:g24URVg0OFbNUTx9qqY1IRZ9D9z3iPyi5zKhQZpNwpA=",
-        version = "v1.4.1",
+        sum = "h1:cRYCw9putX9pmpNdGkE/rWrY6gNGqZvdgGT1RPl6K18=",
+        version = "v0.0.0-20160411075031-7ebe0a500653",
     )
     go_repository(
         name = "com_github_go_stack_stack",
@@ -975,14 +966,7 @@ def go_repositories():
         sum = "h1:pmfjZENx5imkbgOkpRUYLnmbU7UEFbjtDA2hxJ1ichM=",
         version = "v0.0.0-20180206201540-c2b33e8439af",
     )
-    go_repository(
-        name = "com_github_jmoiron_sqlx",
-        build_file_generation = "on",
-        build_file_proto_mode = "disable",
-        importpath = "github.com/jmoiron/sqlx",
-        sum = "h1:eR1qlND4ShQ9W/Q56oy9c/Jj6hpqS5heEruKQVbJGNo=",
-        version = "v0.0.0-20180406164412-2aeb6a910c2b",
-    )
+
     go_repository(
         name = "com_github_joho_godotenv",
         build_file_generation = "on",
@@ -1188,8 +1172,8 @@ def go_repositories():
         build_file_generation = "on",
         build_file_proto_mode = "disable",
         importpath = "github.com/mattn/go-sqlite3",
-        sum = "h1:jbhqpg7tQe4SupckyijYiy0mJJ/pRyHvXf7JdWK860o=",
-        version = "v1.10.0",
+        sum = "h1:LeyN6zuPxHQrv7ZGHbo2Ymtj+BfpbG02+5iAgKds/zU=",
+        version = "v0.0.0-20160514122348-38ee283dabf1",
     )
     go_repository(
         name = "com_github_mattn_go_zglob",
@@ -1279,6 +1263,7 @@ def go_repositories():
         sum = "h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4=",
         version = "v1.3.1",
     )
+
     go_repository(
         name = "com_github_olekukonko_tablewriter",
         build_file_generation = "on",
@@ -1303,14 +1288,7 @@ def go_repositories():
         sum = "h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME=",
         version = "v1.7.0",
     )
-    go_repository(
-        name = "com_github_opencensus_integrations_ocsql",
-        build_file_generation = "on",
-        build_file_proto_mode = "disable",
-        importpath = "github.com/opencensus-integrations/ocsql",
-        sum = "h1:+J5BmLX1kNWCH9/5wJdleej2oRyJrhVEt+FAjq1VqaI=",
-        version = "v0.1.1",
-    )
+
     go_repository(
         name = "com_github_opencontainers_go_digest",
         build_file_generation = "on",


Test patch:
diff --git a/pkg/notes/notes_test.go b/pkg/notes/notes_test.go
index d63b8a01..a0e77fa8 100644
--- a/pkg/notes/notes_test.go
+++ b/pkg/notes/notes_test.go
@@ -88,7 +88,7 @@ func TestReleaseNoteParsing(t *testing.T) {
 		fmt.Println(sha)
 		commit, _, err := client.Repositories.GetCommit(ctx, "kubernetes", "kubernetes", sha)
 		require.NoError(t, err)
-		prs, err := PRsFromCommit(client, nil, commit)
+		prs, err := PRsFromCommit(client, commit)
 		require.NoError(t, err)
 		_, err = ReleaseNoteFromCommit(&Result{commit: commit, pullRequest: prs[0]}, client, "0.1")
 		require.NoError(t, err)