diff --git a/runtime/factories/fake/runtime.go b/runtime/factories/fake/runtime.go
index 2812aaf..16ee8a4 100644
--- a/runtime/factories/fake/runtime.go
+++ b/runtime/factories/fake/runtime.go
@@ -9,7 +9,7 @@
 	"v.io/v23/context"
 	"v.io/v23/rpc"
 	"v.io/v23/security"
-	"v.io/x/ref/lib/apilog"
+
 	vsecurity "v.io/x/ref/lib/security"
 )
 
@@ -34,28 +34,28 @@
 }
 
 func (r *Runtime) Init(ctx *context.T) error {
-	defer apilog.LogCall(ctx)(ctx) // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	// nologcall
 	return nil
 }
 
 func (r *Runtime) WithPrincipal(ctx *context.T, principal security.Principal) (*context.T, error) {
-	defer apilog.LogCallf(ctx, "principal=")(ctx, "") // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	// nologcall
 	return context.WithValue(ctx, principalKey, principal), nil
 }
 
 func (r *Runtime) GetPrincipal(ctx *context.T) security.Principal {
-	defer apilog.LogCall(ctx)(ctx) // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	// nologcall
 	p, _ := ctx.Value(principalKey).(security.Principal)
 	return p
 }
 
 func (r *Runtime) GetAppCycle(ctx *context.T) v23.AppCycle {
-	defer apilog.LogCall(ctx)(ctx) // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	// nologcall
 	panic("unimplemented")
 }
 
 func (r *Runtime) WithBackgroundContext(ctx *context.T) *context.T {
-	defer apilog.LogCall(ctx)(ctx) // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	// nologcall
 	// Note we add an extra context with a nil value here.
 	// This prevents users from travelling back through the
 	// chain of background contexts.
@@ -64,7 +64,7 @@
 }
 
 func (r *Runtime) GetBackgroundContext(ctx *context.T) *context.T {
-	defer apilog.LogCall(ctx)(ctx) // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	// nologcall
 	bctx, _ := ctx.Value(backgroundKey).(*context.T)
 	if bctx == nil {
 		// There should always be a background context.  If we don't find
@@ -77,11 +77,11 @@
 }
 
 func (*Runtime) WithReservedNameDispatcher(ctx *context.T, d rpc.Dispatcher) *context.T {
-	defer apilog.LogCallf(ctx, "d=")(ctx, "") // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	// nologcall
 	panic("unimplemented")
 }
 
 func (*Runtime) GetReservedNameDispatcher(ctx *context.T) rpc.Dispatcher {
-	defer apilog.LogCall(ctx)(ctx) // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	// nologcall
 	panic("unimplmeneted")
 }
diff --git a/runtime/factories/roaming/roaming.go b/runtime/factories/roaming/roaming.go
index 9f6c8ef..40d82e0 100644
--- a/runtime/factories/roaming/roaming.go
+++ b/runtime/factories/roaming/roaming.go
@@ -26,6 +26,7 @@
 	"v.io/v23/context"
 	"v.io/v23/rpc"
 
+	"v.io/x/ref/internal/logger"
 	"v.io/x/ref/lib/flags"
 	"v.io/x/ref/lib/security/securityflag"
 	"v.io/x/ref/runtime/internal"
@@ -62,14 +63,14 @@
 		Addrs: rpc.ListenAddrs(lf.Addrs),
 		Proxy: lf.ListenProxy,
 	}
-	reservedDispatcher := debuglib.NewDispatcher(vlog.Log.LogDir, securityflag.NewAuthorizerOrDie())
+	reservedDispatcher := debuglib.NewDispatcher(logger.Manager(logger.Global()).LogDir, securityflag.NewAuthorizerOrDie())
 
 	ac := appcycle.New()
 
 	// Our address is private, so we test for running on GCE and for its
 	// 1:1 NAT configuration.
-	if !internal.HasPublicIP(vlog.Log) {
-		if addr := internal.GCEPublicAddress(vlog.Log); addr != nil {
+	if !internal.HasPublicIP(logger.Global()) {
+		if addr := internal.GCEPublicAddress(logger.Global()); addr != nil {
 			listenSpec.AddressChooser = func(string, []net.Addr) ([]net.Addr, error) {
 				// TODO(cnicolaou): the protocol at least should
 				// be configurable, or maybe there's a RuntimeFactory specific
diff --git a/runtime/factories/static/static.go b/runtime/factories/static/static.go
index c49bd32..c0873bb 100644
--- a/runtime/factories/static/static.go
+++ b/runtime/factories/static/static.go
@@ -9,12 +9,11 @@
 	"flag"
 	"net"
 
-	"v.io/x/lib/vlog"
-
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/rpc"
 
+	"v.io/x/ref/internal/logger"
 	"v.io/x/ref/lib/flags"
 	"v.io/x/ref/lib/security/securityflag"
 	"v.io/x/ref/runtime/internal"
@@ -45,15 +44,15 @@
 		Addrs: rpc.ListenAddrs(lf.Addrs),
 		Proxy: lf.ListenProxy,
 	}
-	reservedDispatcher := debuglib.NewDispatcher(vlog.Log.LogDir, securityflag.NewAuthorizerOrDie())
+	reservedDispatcher := debuglib.NewDispatcher(logger.Manager(logger.Global()).LogDir, securityflag.NewAuthorizerOrDie())
 
 	ac := appcycle.New()
 
 	// Our address is private, so we test for running on GCE and for its 1:1 NAT
 	// configuration. GCEPublicAddress returns a non-nil addr if we are
 	// running on GCE.
-	if !internal.HasPublicIP(vlog.Log) {
-		if addr := internal.GCEPublicAddress(vlog.Log); addr != nil {
+	if !internal.HasPublicIP(logger.Global()) {
+		if addr := internal.GCEPublicAddress(logger.Global()); addr != nil {
 			listenSpec.AddressChooser = func(string, []net.Addr) ([]net.Addr, error) {
 				return []net.Addr{addr}, nil
 			}
diff --git a/runtime/internal/gce_linux.go b/runtime/internal/gce_linux.go
index 2041da9..aaf489f 100644
--- a/runtime/internal/gce_linux.go
+++ b/runtime/internal/gce_linux.go
@@ -9,7 +9,7 @@
 import (
 	"net"
 
-	"v.io/x/lib/vlog"
+	"v.io/v23/logging"
 
 	"v.io/x/ref/runtime/internal/gce"
 )
@@ -17,7 +17,7 @@
 // GCEPublicAddress returns the public IP address of the GCE instance
 // it is run from, or nil if run from anywhere else. The returned address
 // is the public address of a 1:1 NAT tunnel to this host.
-func GCEPublicAddress(log vlog.Logger) *net.IPAddr {
+func GCEPublicAddress(log logging.Logger) *net.IPAddr {
 	if !gce.RunningOnGCE() {
 		return nil
 	}
diff --git a/runtime/internal/gce_other.go b/runtime/internal/gce_other.go
index 63db7e3..4aea338 100644
--- a/runtime/internal/gce_other.go
+++ b/runtime/internal/gce_other.go
@@ -9,12 +9,12 @@
 import (
 	"net"
 
-	"v.io/x/lib/vlog"
+	"v.io/v23/logging"
 )
 
 // GCEPublicAddress returns the public IP address of the GCE instance
 // it is run from, or nil if run from anywhere else. The returned address
 // is the public address of a 1:1 NAT tunnel to this host.
-func GCEPublicAddress(vlog.Logger) *net.IPAddr {
+func GCEPublicAddress(logging.Logger) *net.IPAddr {
 	return nil
 }
diff --git a/runtime/internal/naming/endpoint.go b/runtime/internal/naming/endpoint.go
index 014b179..5b0552b 100644
--- a/runtime/internal/naming/endpoint.go
+++ b/runtime/internal/naming/endpoint.go
@@ -14,7 +14,6 @@
 
 	"v.io/v23/naming"
 	"v.io/x/lib/metadata"
-	"v.io/x/ref/lib/apilog"
 )
 
 const (
@@ -157,7 +156,7 @@
 var defaultVersion = 5
 
 func (ep *Endpoint) VersionedString(version int) string {
-	defer apilog.LogCallf(nil, "version=%v", version)(nil, "") // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	// nologcall
 	switch version {
 	default:
 		return ep.VersionedString(defaultVersion)
diff --git a/runtime/internal/rpc/stream/proxy/proxy.go b/runtime/internal/rpc/stream/proxy/proxy.go
index b623365..c1f140f 100644
--- a/runtime/internal/rpc/stream/proxy/proxy.go
+++ b/runtime/internal/rpc/stream/proxy/proxy.go
@@ -12,15 +12,16 @@
 	"time"
 
 	"v.io/x/lib/netstate"
+	"v.io/x/lib/vlog"
 
 	"v.io/v23"
 	"v.io/v23/context"
+	"v.io/v23/logging"
 	"v.io/v23/naming"
 	"v.io/v23/rpc"
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/v23/vom"
-	"v.io/x/lib/vlog"
 
 	"v.io/x/ref/runtime/internal/lib/bqueue"
 	"v.io/x/ref/runtime/internal/lib/bqueue/drrqueue"
@@ -819,10 +820,10 @@
 }
 
 // Convenience functions to assist with the logging convention.
-func proxyLog() vlog.InfoLog   { return vlog.VI(1) }
-func processLog() vlog.InfoLog { return vlog.VI(2) }
-func vcLog() vlog.InfoLog      { return vlog.VI(3) }
-func msgLog() vlog.InfoLog     { return vlog.VI(4) }
+func proxyLog() logging.InfoLog   { return vlog.VI(1) }
+func processLog() logging.InfoLog { return vlog.VI(2) }
+func vcLog() logging.InfoLog      { return vlog.VI(3) }
+func msgLog() logging.InfoLog     { return vlog.VI(4) }
 func packIDs(vci id.VC, fid id.Flow) bqueue.ID {
 	return bqueue.ID(message.MakeCounterID(vci, fid))
 }
diff --git a/runtime/internal/rt/rt_test.go b/runtime/internal/rt/rt_test.go
index b3b3e29..e695718 100644
--- a/runtime/internal/rt/rt_test.go
+++ b/runtime/internal/rt/rt_test.go
@@ -12,10 +12,12 @@
 	"testing"
 	"time"
 
+	"v.io/x/lib/vlog"
+
 	"v.io/v23"
 	"v.io/v23/context"
 	"v.io/v23/security"
-	"v.io/x/lib/vlog"
+
 	"v.io/x/ref"
 	vsecurity "v.io/x/ref/lib/security"
 	"v.io/x/ref/test"
@@ -33,9 +35,9 @@
 	l := vlog.Log
 	fmt.Println(l)
 	args := fmt.Sprintf("%s", l)
-	expected := regexp.MustCompile("name=vanadium logdirs=\\[/tmp\\] logtostderr=true|false alsologtostderr=false|true max_stack_buf_size=4292608 v=[0-9] stderrthreshold=2 vmodule= log_backtrace_at=:0")
+	expected := regexp.MustCompile("name=vlog logdirs=\\[/tmp\\] logtostderr=true|false alsologtostderr=false|true max_stack_buf_size=4292608 v=[0-9] stderrthreshold=2 vmodule= log_backtrace_at=:0")
 	if !expected.MatchString(args) {
-		t.Errorf("unexpected default args: %s", args)
+		t.Errorf("unexpected default args: %s, want %s", args, expected)
 	}
 	p := v23.GetPrincipal(ctx)
 	if p == nil {
@@ -74,7 +76,7 @@
 	if err != nil {
 		t.Fatalf("unexpected error: %s", err)
 	}
-	h.Expect(fmt.Sprintf("name=vanadium "+
+	h.Expect(fmt.Sprintf("name=vlog "+
 		"logdirs=[%s] "+
 		"logtostderr=true "+
 		"alsologtostderr=true "+
diff --git a/runtime/internal/rt/runtime.go b/runtime/internal/rt/runtime.go
index 1d006f4..09d1b70 100644
--- a/runtime/internal/rt/runtime.go
+++ b/runtime/internal/rt/runtime.go
@@ -13,7 +13,9 @@
 	"syscall"
 	"time"
 
+	"v.io/x/lib/metadata"
 	"v.io/x/lib/pubsub"
+	"v.io/x/lib/vlog"
 
 	"v.io/v23"
 	"v.io/v23/context"
@@ -25,8 +27,8 @@
 	"v.io/v23/security"
 	"v.io/v23/verror"
 	"v.io/v23/vtrace"
-	"v.io/x/lib/metadata"
-	"v.io/x/lib/vlog"
+
+	"v.io/x/ref/internal/logger"
 	"v.io/x/ref/lib/apilog"
 	"v.io/x/ref/lib/flags"
 	"v.io/x/ref/lib/stats"
@@ -94,10 +96,14 @@
 		ctx = context.WithValue(ctx, reservedNameKey, reservedDispatcher)
 	}
 
-	err := vlog.ConfigureLibraryLoggerFromFlags()
+	err := logger.Manager(logger.Global()).ConfigureFromFlags()
 	if err != nil && err != vlog.ErrConfigured {
 		return nil, nil, nil, err
 	}
+
+	// Configure the context to use the global logger.
+	ctx = context.WithLogger(ctx, logger.Global())
+
 	// We want to print out metadata only into the log files, to avoid
 	// spamming stderr, see #1246.
 	//
@@ -107,8 +113,8 @@
 	// log_dir for the program.  It's a hack, but it gets us the metadata
 	// to device manager-run apps and avoids it for command-lines, which is
 	// a good enough approximation.
-	if vlog.Log.LogDir() != os.TempDir() {
-		vlog.Infof(metadata.ToXML())
+	if logger.Manager(ctx).LogDir() != os.TempDir() {
+		ctx.Infof(metadata.ToXML())
 	}
 
 	// Setup the initial trace.
@@ -215,7 +221,7 @@
 }
 
 func (*Runtime) NewEndpoint(ep string) (naming.Endpoint, error) {
-	defer apilog.LogCallf(nil, "ep=%.10s...", ep)(nil, "") // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	// nologcall
 	return inaming.NewEndpoint(ep)
 }
 
@@ -351,7 +357,7 @@
 }
 
 func (*Runtime) GetPrincipal(ctx *context.T) security.Principal {
-	defer apilog.LogCall(ctx)(ctx) // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	// nologcall
 	p, _ := ctx.Value(principalKey).(security.Principal)
 	return p
 }
@@ -384,7 +390,7 @@
 }
 
 func (*Runtime) GetClient(ctx *context.T) rpc.Client {
-	defer apilog.LogCall(ctx)(ctx) // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	// nologcall
 	cl, _ := ctx.Value(clientKey).(rpc.Client)
 	return cl
 }
@@ -442,7 +448,7 @@
 }
 
 func (*Runtime) WithBackgroundContext(ctx *context.T) *context.T {
-	defer apilog.LogCall(ctx)(ctx) // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	// nologcall
 	// Note we add an extra context with a nil value here.
 	// This prevents users from travelling back through the
 	// chain of background contexts.
@@ -464,7 +470,7 @@
 }
 
 func (*Runtime) WithReservedNameDispatcher(ctx *context.T, d rpc.Dispatcher) *context.T {
-	defer apilog.LogCallf(ctx, "d=")(ctx, "") // gologcop: DO NOT EDIT, MUST BE FIRST STATEMENT
+	// nologcall
 	return context.WithValue(ctx, reservedNameKey, d)
 }
 
diff --git a/runtime/internal/util.go b/runtime/internal/util.go
index 58894d7..6a49e50 100644
--- a/runtime/internal/util.go
+++ b/runtime/internal/util.go
@@ -10,10 +10,11 @@
 	"os"
 	"strings"
 
-	"v.io/v23/verror"
-	"v.io/x/lib/vlog"
-
 	"v.io/x/lib/netstate"
+
+	"v.io/v23/logging"
+	"v.io/v23/verror"
+
 	"v.io/x/ref/lib/exec"
 	"v.io/x/ref/lib/flags"
 )
@@ -80,7 +81,7 @@
 }
 
 // HasPublicIP returns true if the host has at least one public IP address.
-func HasPublicIP(log vlog.Logger) bool {
+func HasPublicIP(log logging.Logger) bool {
 	state, err := netstate.GetAccessibleIPs()
 	if err != nil {
 		log.Infof("failed to determine network state: %s", err)
