diff --git a/runtime/factories/chrome/chrome.go b/runtime/factories/chrome/chrome.go
index c34ceae..07cb080 100644
--- a/runtime/factories/chrome/chrome.go
+++ b/runtime/factories/chrome/chrome.go
@@ -34,7 +34,7 @@
 }
 
 func Init(ctx *context.T) (v23.Runtime, *context.T, v23.Shutdown, error) {
-	if err := internal.ParseFlags(commonFlags); err != nil {
+	if err := internal.ParseFlagsAndConfigureGlobalLogger(commonFlags); err != nil {
 		return nil, nil, nil, err
 	}
 
diff --git a/runtime/factories/fake/fake.go b/runtime/factories/fake/fake.go
index 06d139b..f56e40a 100644
--- a/runtime/factories/fake/fake.go
+++ b/runtime/factories/fake/fake.go
@@ -15,6 +15,7 @@
 	"v.io/v23/context"
 	"v.io/v23/rpc"
 
+	"v.io/x/ref/runtime/internal"
 	_ "v.io/x/ref/runtime/internal/flow/protocols/tcp"
 	_ "v.io/x/ref/runtime/internal/flow/protocols/ws"
 	_ "v.io/x/ref/runtime/internal/flow/protocols/wsh"
@@ -41,6 +42,10 @@
 }
 
 func Init(ctx *context.T) (v23.Runtime, *context.T, v23.Shutdown, error) {
+	if err := internal.ConfigureGlobalLoggerFromFlags(); err != nil {
+		return nil, nil, nil, err
+	}
+
 	runtimeInfo.mu.Lock()
 	defer runtimeInfo.mu.Unlock()
 	if runtimeInfo.runtime != nil {
diff --git a/runtime/factories/fake/runtime.go b/runtime/factories/fake/runtime.go
index 1abdae7..8cb7fec 100644
--- a/runtime/factories/fake/runtime.go
+++ b/runtime/factories/fake/runtime.go
@@ -36,11 +36,6 @@
 }
 
 func (r *Runtime) Init(ctx *context.T) error {
-	// nologcall
-	err := logger.Manager(ctx).ConfigureFromFlags()
-	if err != nil && !logger.IsAlreadyConfiguredError(err) {
-		return err
-	}
 	return nil
 }
 
diff --git a/runtime/factories/gce/gce.go b/runtime/factories/gce/gce.go
index 584c823..226449b 100644
--- a/runtime/factories/gce/gce.go
+++ b/runtime/factories/gce/gce.go
@@ -43,12 +43,12 @@
 }
 
 func Init(ctx *context.T) (v23.Runtime, *context.T, v23.Shutdown, error) {
-	if !gce.RunningOnGCE() {
-		return nil, nil, nil, fmt.Errorf("GCE profile used on a non-GCE system")
+	if err := internal.ParseFlagsAndConfigureGlobalLogger(commonFlags); err != nil {
+		return nil, nil, nil, err
 	}
 
-	if err := internal.ParseFlags(commonFlags); err != nil {
-		return nil, nil, nil, err
+	if !gce.RunningOnGCE() {
+		return nil, nil, nil, fmt.Errorf("GCE profile used on a non-GCE system")
 	}
 
 	ac := appcycle.New()
diff --git a/runtime/factories/generic/generic.go b/runtime/factories/generic/generic.go
index 61d58c6..d3a0ac9 100644
--- a/runtime/factories/generic/generic.go
+++ b/runtime/factories/generic/generic.go
@@ -38,7 +38,7 @@
 }
 
 func Init(ctx *context.T) (v23.Runtime, *context.T, v23.Shutdown, error) {
-	if err := internal.ParseFlags(commonFlags); err != nil {
+	if err := internal.ParseFlagsAndConfigureGlobalLogger(commonFlags); err != nil {
 		return nil, nil, nil, err
 	}
 
diff --git a/runtime/factories/roaming/roaming.go b/runtime/factories/roaming/roaming.go
index aca495d..b5f17c6 100644
--- a/runtime/factories/roaming/roaming.go
+++ b/runtime/factories/roaming/roaming.go
@@ -58,7 +58,7 @@
 }
 
 func Init(ctx *context.T) (v23.Runtime, *context.T, v23.Shutdown, error) {
-	if err := internal.ParseFlags(commonFlags); err != nil {
+	if err := internal.ParseFlagsAndConfigureGlobalLogger(commonFlags); err != nil {
 		return nil, nil, nil, err
 	}
 
diff --git a/runtime/factories/static/static.go b/runtime/factories/static/static.go
index 9037f73..b04f6f8 100644
--- a/runtime/factories/static/static.go
+++ b/runtime/factories/static/static.go
@@ -41,7 +41,7 @@
 }
 
 func Init(ctx *context.T) (v23.Runtime, *context.T, v23.Shutdown, error) {
-	if err := internal.ParseFlags(commonFlags); err != nil {
+	if err := internal.ParseFlagsAndConfigureGlobalLogger(commonFlags); err != nil {
 		return nil, nil, nil, err
 	}
 
diff --git a/runtime/internal/rt/runtime.go b/runtime/internal/rt/runtime.go
index 18031ed..37a7d0a 100644
--- a/runtime/internal/rt/runtime.go
+++ b/runtime/internal/rt/runtime.go
@@ -102,11 +102,6 @@
 		ctx = context.WithValue(ctx, reservedNameKey, reservedDispatcher)
 	}
 
-	err := logger.Manager(logger.Global()).ConfigureFromFlags()
-	if err != nil && !logger.IsAlreadyConfiguredError(err) {
-		return nil, nil, nil, err
-	}
-
 	// Configure the context to use the global logger.
 	ctx = context.WithLogger(ctx, logger.Global())
 
@@ -124,7 +119,7 @@
 	}
 
 	// Setup the initial trace.
-	ctx, err = ivtrace.Init(ctx, flags.Vtrace)
+	ctx, err := ivtrace.Init(ctx, flags.Vtrace)
 	if err != nil {
 		return nil, nil, nil, err
 	}
diff --git a/runtime/internal/util.go b/runtime/internal/util.go
index f5f6f6a..f26022c 100644
--- a/runtime/internal/util.go
+++ b/runtime/internal/util.go
@@ -14,6 +14,7 @@
 	"v.io/v23/logging"
 	"v.io/v23/verror"
 
+	"v.io/x/ref/internal/logger"
 	"v.io/x/ref/lib/exec"
 	"v.io/x/ref/lib/flags"
 )
@@ -42,6 +43,28 @@
 	return parseFlagsInternal(f, config)
 }
 
+// ParseFlagsAndConfigurGlobalLogger calls ParseFlags and then
+// ConfigureGlobalLoggerFromFlags.
+func ParseFlagsAndConfigureGlobalLogger(f *flags.Flags) error {
+	if err := ParseFlags(f); err != nil {
+		return err
+	}
+	if err := ConfigureGlobalLoggerFromFlags(); err != nil {
+		return err
+	}
+	return nil
+}
+
+// ConfigureGlobalLoggerFromFlags configures the global logger from command
+// line flags.  Should be called immediately after ParseFlags.
+func ConfigureGlobalLoggerFromFlags() error {
+	err := logger.Manager(logger.Global()).ConfigureFromFlags()
+	if err != nil && !logger.IsAlreadyConfiguredError(err) {
+		return err
+	}
+	return nil
+}
+
 // IPAddressChooser returns the preferred IP address, which is,
 // a public IPv4 address, then any non-loopback IPv4, then a public
 // IPv6 address and finally any non-loopback/link-local IPv6
