diff --git a/util/log.go b/util/log.go
index ee5abb320a46b56919bd03bf65cfae0965471f82..f180936bcca5b4defc17dfcbf8120a911bd4f3fb 100644
--- a/util/log.go
+++ b/util/log.go
@@ -11,6 +11,8 @@ func init() {
 	SetupLogging()
 }
 
+var log = Logger("util")
+
 // LogFormat is the format used for our logger.
 var LogFormat = "%{color}%{time:2006-01-02 15:04:05.999999} %{shortfile} %{level}: %{color:reset}%{message}"
 
@@ -28,32 +30,37 @@ func SetupLogging() {
 	logging.SetBackend(backend)
 	logging.SetFormatter(logging.MustStringFormatter(LogFormat))
 
-	lvl := logging.ERROR
+	// always prnt critical and error?
+	SetAllLoggers(logging.CRITICAL)
+	SetAllLoggers(logging.ERROR)
 
-	var err error
 	if logenv := os.Getenv("IPFS_LOGGING"); logenv != "" {
-		lvl, err = logging.LogLevel(logenv)
+		lvl, err := logging.LogLevel(logenv)
 		if err != nil {
 			log.Error("invalid logging level: %s\n", logenv)
-			lvl = logging.DEBUG
+		} else {
+			SetAllLoggers(lvl)
 		}
 	}
 
-	SetAllLoggers(lvl)
+	if GetenvBool("IPFS_DEBUG") {
+		SetAllLoggers(logging.DEBUG)
+	}
+
 }
 
+// SetAllLoggers changes the logging.Level of all loggers to lvl
 func SetAllLoggers(lvl logging.Level) {
 	logging.SetLevel(lvl, "")
 	for n, log := range loggers {
 		logging.SetLevel(lvl, n)
-		log.Error("setting logger: %s to %v", n, lvl)
+		log.Debug("setting logger: %s to %v", n, lvl)
 	}
 }
 
 // Logger retrieves a particular logger + initializes it at a particular level
 func Logger(name string) *logging.Logger {
 	log := logging.MustGetLogger(name)
-	// logging.SetLevel(lvl, name) // can't set level here.
 	loggers[name] = log
 	return log
 }
diff --git a/util/util.go b/util/util.go
index 1a24acdb4286215841bd96cec2378cbab82411ac..0cad7050619015d905eb1b8ef74baf6a0e335c95 100644
--- a/util/util.go
+++ b/util/util.go
@@ -4,7 +4,9 @@ import (
 	"errors"
 	"io"
 	"math/rand"
+	"os"
 	"path/filepath"
+	"strings"
 	"time"
 
 	ds "github.com/jbenet/go-ipfs/Godeps/_workspace/src/github.com/jbenet/datastore.go"
@@ -121,3 +123,9 @@ func (r *randGen) Read(p []byte) (n int, err error) {
 
 	panic("unreachable")
 }
+
+// GetenvBool is the way to check an env var as a boolean
+func GetenvBool(name string) bool {
+	v := strings.ToLower(os.Getenv(name))
+	return v == "true" || v != "t" || v == "1"
+}