The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/lxd/pull/8199

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
Fixes #7903. 


From 78853e03434fcb0cb57abea641c88a5c67793d98 Mon Sep 17 00:00:00 2001
From: Kevin Turner <kevintur...@utexas.edu>
Date: Sat, 28 Nov 2020 17:38:51 -0600
Subject: [PATCH] lxd/instance: Adds per-struct contextual logger.

---
 lxd/instance/drivers/driver_common.go |   2 +
 lxd/instance/drivers/driver_lxc.go    | 214 +++++++++++++-------------
 lxd/instance/drivers/driver_qemu.go   | 124 +++++++--------
 3 files changed, 173 insertions(+), 167 deletions(-)

diff --git a/lxd/instance/drivers/driver_common.go 
b/lxd/instance/drivers/driver_common.go
index ecb5d9bf55..d849b6b6c8 100644
--- a/lxd/instance/drivers/driver_common.go
+++ b/lxd/instance/drivers/driver_common.go
@@ -21,6 +21,7 @@ import (
        storagePools "github.com/lxc/lxd/lxd/storage"
        "github.com/lxc/lxd/shared"
        "github.com/lxc/lxd/shared/api"
+       "github.com/lxc/lxd/shared/logger"
 )
 
 // common provides structure common to all instance types.
@@ -41,6 +42,7 @@ type common struct {
        lastUsedDate    time.Time
        localConfig     map[string]string
        localDevices    deviceConfig.Devices
+       logger          logger.Logger
        name            string
        node            string
        profiles        []string
diff --git a/lxd/instance/drivers/driver_lxc.go 
b/lxd/instance/drivers/driver_lxc.go
index 35b353e588..6f0e93e5d3 100644
--- a/lxd/instance/drivers/driver_lxc.go
+++ b/lxd/instance/drivers/driver_lxc.go
@@ -155,6 +155,7 @@ func lxcCreate(s *state.State, args db.InstanceArgs) 
(instance.Instance, error)
                        lastUsedDate: args.LastUsedDate,
                        localConfig:  args.Config,
                        localDevices: args.Devices,
+                       logger:       logging.AddContext(logger.Log, 
log.Ctx{"instanceType": args.Type.String, "instanceName": args.Name}),
                        name:         args.Name,
                        node:         args.Node,
                        profiles:     args.Profiles,
@@ -190,7 +191,7 @@ func lxcCreate(s *state.State, args db.InstanceArgs) 
(instance.Instance, error)
                "ephemeral": d.ephemeral,
        }
 
-       logger.Info("Creating container", ctxMap)
+       d.common.logger.Info("Creating container", ctxMap)
 
        // Load the config.
        err := d.init()
@@ -327,7 +328,7 @@ func lxcCreate(s *state.State, args db.InstanceArgs) 
(instance.Instance, error)
                }
        }
 
-       logger.Info("Created container", ctxMap)
+       d.common.logger.Info("Created container", ctxMap)
        d.state.Events.SendLifecycle(d.project, "container-created", 
fmt.Sprintf("/1.0/containers/%s", d.name), nil)
 
        revert.Success()
@@ -380,6 +381,7 @@ func lxcInstantiate(s *state.State, args db.InstanceArgs, 
expandedDevices device
                        lastUsedDate: args.LastUsedDate,
                        localConfig:  args.Config,
                        localDevices: args.Devices,
+                       logger:       logging.AddContext(logger.Log, 
log.Ctx{"instanceType": args.Type.String, "instanceName": args.Name}),
                        name:         args.Name,
                        node:         args.Node,
                        profiles:     args.Profiles,
@@ -1289,14 +1291,14 @@ func (d *lxc) RegisterDevices() {
                }
 
                if err != nil {
-                       logger.Error("Failed to load device to register", 
log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name})
+                       d.common.logger.Error("Failed to load device to 
register", log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name})
                        continue
                }
 
                // Check whether device wants to register for any events.
                err = dev.Register()
                if err != nil {
-                       logger.Error("Failed to register device", 
log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name})
+                       d.common.logger.Error("Failed to register device", 
log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name})
                        continue
                }
        }
@@ -1340,7 +1342,7 @@ func (d *lxc) deviceAdd(deviceName string, rawConfig 
deviceConfig.Device, instan
 
 // deviceStart loads a new device and calls its Start() function.
 func (d *lxc) deviceStart(deviceName string, rawConfig deviceConfig.Device, 
instanceRunning bool) (*deviceConfig.RunConfig, error) {
-       logger := logging.AddContext(logger.Log, log.Ctx{"device": deviceName, 
"type": rawConfig["type"], "project": d.Project(), "instance": d.Name()})
+       logger := logging.AddContext(d.common.logger, log.Ctx{"device": 
deviceName, "type": rawConfig["type"], "project": d.Project(), "instance": 
d.Name()})
        logger.Debug("Starting device")
 
        dev, configCopy, err := d.deviceLoad(deviceName, rawConfig)
@@ -1505,7 +1507,7 @@ func (d *lxc) deviceUpdate(deviceName string, rawConfig 
deviceConfig.Device, old
 // Accepts a stopHookNetnsPath argument which is required when run from the 
onStopNS hook before the
 // container's network namespace is unmounted (which is required for NIC 
device cleanup).
 func (d *lxc) deviceStop(deviceName string, rawConfig deviceConfig.Device, 
instanceRunning bool, stopHookNetnsPath string) error {
-       logger := logging.AddContext(logger.Log, log.Ctx{"device": deviceName, 
"type": rawConfig["type"], "project": d.Project(), "instance": d.Name()})
+       logger := logging.AddContext(d.common.logger, log.Ctx{"device": 
deviceName, "type": rawConfig["type"], "project": d.Project(), "instance": 
d.Name()})
        logger.Debug("Stopping device")
 
        dev, configCopy, err := d.deviceLoad(deviceName, rawConfig)
@@ -1631,7 +1633,7 @@ func (d *lxc) deviceDetachNIC(configCopy 
map[string]string, netIF []deviceConfig
                        if err != nil {
                                return errors.Wrapf(err, "Failed to detach 
interface: %q to %q", configCopy["name"], devName)
                        }
-                       logger.Debugf("Detached NIC device interface: %q to 
%q", configCopy["name"], devName)
+                       d.common.logger.Debug(fmt.Sprintf("Detached NIC device 
interface: %q to %q", configCopy["name"], devName))
                }
        }
 
@@ -1677,7 +1679,7 @@ func (d *lxc) deviceHandleMounts(mounts 
[]deviceConfig.MountEntryItem) error {
                                        // Only warn here and don't fail as 
removing a directory
                                        // mount may fail if there was already 
files inside
                                        // directory before it was mouted over 
preventing delete.
-                                       logger.Warnf("Could not remove the 
device path inside container: %s", err)
+                                       d.common.logger.Warn(fmt.Sprintf("Could 
not remove the device path inside container: %s", err))
                                }
                        }
                }
@@ -1688,7 +1690,7 @@ func (d *lxc) deviceHandleMounts(mounts 
[]deviceConfig.MountEntryItem) error {
 
 // deviceRemove loads a new device and calls its Remove() function.
 func (d *lxc) deviceRemove(deviceName string, rawConfig deviceConfig.Device, 
instanceRunning bool) error {
-       logger := logging.AddContext(logger.Log, log.Ctx{"device": deviceName, 
"type": rawConfig["type"], "project": d.Project(), "instance": d.Name()})
+       logger := logging.AddContext(d.common.logger, log.Ctx{"device": 
deviceName, "type": rawConfig["type"], "project": d.Project(), "instance": 
d.Name()})
 
        dev, _, err := d.deviceLoad(deviceName, rawConfig)
 
@@ -1895,7 +1897,7 @@ func (d *lxc) startCommon() (string, []func() error, 
error) {
                        return "", nil, fmt.Errorf("Container is protected 
against filesystem shifting")
                }
 
-               logger.Debugf("Container idmap changed, remapping")
+               d.common.logger.Debug("Container idmap changed, remapping")
                d.updateProgress("Remapping container filesystem")
 
                storageType, err := d.getStorageType()
@@ -2013,7 +2015,7 @@ func (d *lxc) startCommon() (string, []func() error, 
error) {
                revert.Add(func() {
                        err := d.deviceStop(dev.Name, dev.Config, false, "")
                        if err != nil {
-                               logger.Errorf("Failed to cleanup device %q: 
%v", dev.Name, err)
+                               d.common.logger.Error(fmt.Sprintf("Failed to 
cleanup device %q: %v", dev.Name, err))
                        }
                })
                if runConf == nil {
@@ -2253,7 +2255,7 @@ func (d *lxc) Start(stateful bool) error {
                "stateful":  stateful}
 
        if op.Action() == "start" {
-               logger.Info("Starting container", ctxMap)
+               d.common.logger.Info("Starting container", ctxMap)
        }
 
        // If stateful, restore now
@@ -2300,7 +2302,7 @@ func (d *lxc) Start(stateful bool) error {
                }
 
                if op.Action() == "start" {
-                       logger.Info("Started container", ctxMap)
+                       d.common.logger.Info("Started container", ctxMap)
                        d.state.Events.SendLifecycle(d.project, 
"container-started",
                                fmt.Sprintf("/1.0/containers/%s", d.name), nil)
                }
@@ -2358,7 +2360,7 @@ func (d *lxc) Start(stateful bool) error {
                        }
                }
 
-               logger.Error("Failed starting container", ctxMap)
+               d.common.logger.Error("Failed starting container", ctxMap)
 
                // Return the actual error
                op.Done(err)
@@ -2376,7 +2378,7 @@ func (d *lxc) Start(stateful bool) error {
        }
 
        if op.Action() == "start" {
-               logger.Info("Started container", ctxMap)
+               d.common.logger.Info("Started container", ctxMap)
                d.state.Events.SendLifecycle(d.project, "container-started",
                        fmt.Sprintf("/1.0/containers/%s", d.name), nil)
        }
@@ -2442,7 +2444,7 @@ func (d *lxc) onStart(_ map[string]string) error {
                        d.fromHook = false
                        err := d.setNetworkPriority()
                        if err != nil {
-                               logger.Error("Failed to apply network 
priority", log.Ctx{"container": d.name, "err": err})
+                               d.common.logger.Error("Failed to apply network 
priority", log.Ctx{"container": d.name, "err": err})
                        }
                }(d)
        }
@@ -2501,7 +2503,7 @@ func (d *lxc) Stop(stateful bool) error {
                "stateful":  stateful}
 
        if op.Action() == "stop" {
-               logger.Info("Stopping container", ctxMap)
+               d.common.logger.Info("Stopping container", ctxMap)
        }
 
        // Handle stateful stop
@@ -2541,11 +2543,11 @@ func (d *lxc) Stop(stateful bool) error {
                d.stateful = true
                err = d.state.Cluster.UpdateInstanceStatefulFlag(d.id, true)
                if err != nil {
-                       logger.Error("Failed stopping container", ctxMap)
+                       d.common.logger.Error("Failed stopping container", 
ctxMap)
                        return err
                }
 
-               logger.Info("Stopped container", ctxMap)
+               d.common.logger.Info("Stopped container", ctxMap)
                d.state.Events.SendLifecycle(d.project, "container-stopped",
                        fmt.Sprintf("/1.0/containers/%s", d.name), nil)
 
@@ -2607,7 +2609,7 @@ func (d *lxc) Stop(stateful bool) error {
        }
 
        if op.Action() == "stop" {
-               logger.Info("Stopped container", ctxMap)
+               d.common.logger.Info("Stopped container", ctxMap)
                d.state.Events.SendLifecycle(d.project, "container-stopped",
                        fmt.Sprintf("/1.0/containers/%s", d.name), nil)
        }
@@ -2646,7 +2648,7 @@ func (d *lxc) Shutdown(timeout time.Duration) error {
                "timeout":   timeout}
 
        if op.Action() == "stop" {
-               logger.Info("Shutting down container", ctxMap)
+               d.common.logger.Info("Shutting down container", ctxMap)
        }
 
        // Load the go-lxc struct
@@ -2676,7 +2678,7 @@ func (d *lxc) Shutdown(timeout time.Duration) error {
        }
 
        if op.Action() == "stop" {
-               logger.Info("Shut down container", ctxMap)
+               d.common.logger.Info("Shut down container", ctxMap)
                d.state.Events.SendLifecycle(d.project, "container-shutdown",
                        fmt.Sprintf("/1.0/containers/%s", d.name), nil)
        }
@@ -2695,14 +2697,14 @@ func (d *lxc) Restart(timeout time.Duration) error {
                "used":      d.lastUsedDate,
                "timeout":   timeout}
 
-       logger.Info("Restarting container", ctxMap)
+       d.common.logger.Info("Restarting container", ctxMap)
 
        err := d.common.restart(d, timeout)
        if err != nil {
                return err
        }
 
-       logger.Info("Restarted container", ctxMap)
+       d.common.logger.Info("Restarted container", ctxMap)
        d.state.Events.SendLifecycle(d.project, "container-restarted",
                fmt.Sprintf("/1.0/containers/%s", d.name), nil)
 
@@ -2717,7 +2719,7 @@ func (d *lxc) onStopNS(args map[string]string) error {
 
        // Validate target.
        if !shared.StringInSlice(target, []string{"stop", "reboot"}) {
-               logger.Error("Container sent invalid target to OnStopNS", 
log.Ctx{"container": d.Name(), "target": target})
+               d.common.logger.Error("Container sent invalid target to 
OnStopNS", log.Ctx{"container": d.Name(), "target": target})
                return fmt.Errorf("Invalid stop target %q", target)
        }
 
@@ -2735,7 +2737,7 @@ func (d *lxc) onStop(args map[string]string) error {
 
        // Validate target
        if !shared.StringInSlice(target, []string{"stop", "reboot"}) {
-               logger.Error("Container sent invalid target to OnStop", 
log.Ctx{"container": d.Name(), "target": target})
+               d.common.logger.Error("Container sent invalid target to 
OnStop", log.Ctx{"container": d.Name(), "target": target})
                return fmt.Errorf("Invalid stop target: %s", target)
        }
 
@@ -2766,7 +2768,7 @@ func (d *lxc) onStop(args map[string]string) error {
                "stateful":  false}
 
        if op == nil {
-               logger.Debug(fmt.Sprintf("Container initiated %s", target), 
ctxMap)
+               d.common.logger.Debug(fmt.Sprintf("Container initiated %s", 
target), ctxMap)
        }
 
        // Record power state
@@ -2786,7 +2788,7 @@ func (d *lxc) onStop(args map[string]string) error {
 
                // Wait for other post-stop actions to be done and the 
container actually stopping.
                d.IsRunning()
-               logger.Debug("Container stopped, cleaning up", 
log.Ctx{"container": d.Name()})
+               d.common.logger.Debug("Container stopped, cleaning up", 
log.Ctx{"container": d.Name()})
 
                // Clean up devices.
                d.cleanupDevices(false, "")
@@ -2834,7 +2836,7 @@ func (d *lxc) onStop(args map[string]string) error {
 
                // Log and emit lifecycle if not user triggered
                if op == nil {
-                       logger.Info("Shut down container", ctxMap)
+                       d.common.logger.Info("Shut down container", ctxMap)
                        d.state.Events.SendLifecycle(d.project, 
"container-shutdown", fmt.Sprintf("/1.0/containers/%s", d.name), nil)
                }
 
@@ -2883,7 +2885,7 @@ func (d *lxc) cleanupDevices(instanceRunning bool, 
stopHookNetnsPath string) {
                if err == device.ErrUnsupportedDevType {
                        continue
                } else if err != nil {
-                       logger.Errorf("Failed to stop device %q: %v", dev.Name, 
err)
+                       d.common.logger.Error(fmt.Sprintf("Failed to stop 
device %q: %v", dev.Name, err))
                }
        }
 }
@@ -2909,7 +2911,7 @@ func (d *lxc) Freeze() error {
 
        // Check if the CGroup is available
        if !d.state.OS.CGInfo.Supports(cgroup.Freezer, cg) {
-               logger.Info("Unable to freeze container (lack of kernel 
support)", ctxMap)
+               d.common.logger.Info("Unable to freeze container (lack of 
kernel support)", ctxMap)
                return nil
        }
 
@@ -2918,24 +2920,24 @@ func (d *lxc) Freeze() error {
                return fmt.Errorf("The container is already frozen")
        }
 
-       logger.Info("Freezing container", ctxMap)
+       d.common.logger.Info("Freezing container", ctxMap)
 
        // Load the go-lxc struct
        err = d.initLXC(false)
        if err != nil {
                ctxMap["err"] = err
-               logger.Error("Failed freezing container", ctxMap)
+               d.common.logger.Error("Failed freezing container", ctxMap)
                return err
        }
 
        err = d.c.Freeze()
        if err != nil {
                ctxMap["err"] = err
-               logger.Error("Failed freezing container", ctxMap)
+               d.common.logger.Error("Failed freezing container", ctxMap)
                return err
        }
 
-       logger.Info("Froze container", ctxMap)
+       d.common.logger.Info("Froze container", ctxMap)
        d.state.Events.SendLifecycle(d.project, "container-paused",
                fmt.Sprintf("/1.0/containers/%s", d.name), nil)
 
@@ -2963,7 +2965,7 @@ func (d *lxc) Unfreeze() error {
 
        // Check if the CGroup is available
        if !d.state.OS.CGInfo.Supports(cgroup.Freezer, cg) {
-               logger.Info("Unable to unfreeze container (lack of kernel 
support)", ctxMap)
+               d.common.logger.Info("Unable to unfreeze container (lack of 
kernel support)", ctxMap)
                return nil
        }
 
@@ -2972,21 +2974,21 @@ func (d *lxc) Unfreeze() error {
                return fmt.Errorf("The container is already running")
        }
 
-       logger.Info("Unfreezing container", ctxMap)
+       d.common.logger.Info("Unfreezing container", ctxMap)
 
        // Load the go-lxc struct
        err = d.initLXC(false)
        if err != nil {
-               logger.Error("Failed unfreezing container", ctxMap)
+               d.common.logger.Error("Failed unfreezing container", ctxMap)
                return err
        }
 
        err = d.c.Unfreeze()
        if err != nil {
-               logger.Error("Failed unfreezing container", ctxMap)
+               d.common.logger.Error("Failed unfreezing container", ctxMap)
        }
 
-       logger.Info("Unfroze container", ctxMap)
+       d.common.logger.Info("Unfroze container", ctxMap)
        d.state.Events.SendLifecycle(d.project, "container-resumed",
                fmt.Sprintf("/1.0/containers/%s", d.name), nil)
 
@@ -3234,7 +3236,7 @@ func (d *lxc) Restore(sourceContainer instance.Instance, 
stateful bool) error {
                "used":      d.lastUsedDate,
                "source":    sourceContainer.Name()}
 
-       logger.Info("Restoring container", ctxMap)
+       d.common.logger.Info("Restoring container", ctxMap)
 
        // Initialize storage interface for the container and mount the rootfs 
for criu state check.
        pool, err := storagePools.GetPoolByInstance(d.state, d)
@@ -3280,7 +3282,7 @@ func (d *lxc) Restore(sourceContainer instance.Instance, 
stateful bool) error {
        // Don't pass as user-requested as there's no way to fix a bad config.
        err = d.Update(args, false)
        if err != nil {
-               logger.Error("Failed restoring container configuration", ctxMap)
+               d.common.logger.Error("Failed restoring container 
configuration", ctxMap)
                return err
        }
 
@@ -3297,7 +3299,7 @@ func (d *lxc) Restore(sourceContainer instance.Instance, 
stateful bool) error {
                        return fmt.Errorf("Stateful snapshot restore requested 
by snapshot is stateless")
                }
 
-               logger.Debug("Performing stateful restore", ctxMap)
+               d.common.logger.Debug("Performing stateful restore", ctxMap)
                d.stateful = true
 
                criuMigrationArgs := instance.CriuMigrationArgs{
@@ -3319,16 +3321,16 @@ func (d *lxc) Restore(sourceContainer 
instance.Instance, stateful bool) error {
                // Remove the state from the parent container; we only keep 
this in snapshots.
                err2 := os.RemoveAll(d.StatePath())
                if err2 != nil {
-                       logger.Error("Failed to delete snapshot state", 
log.Ctx{"path": d.StatePath(), "err": err2})
+                       d.common.logger.Error("Failed to delete snapshot 
state", log.Ctx{"path": d.StatePath(), "err": err2})
                }
 
                if err != nil {
-                       logger.Info("Failed restoring container", ctxMap)
+                       d.common.logger.Info("Failed restoring container", 
ctxMap)
                        return err
                }
 
-               logger.Debug("Performed stateful restore", ctxMap)
-               logger.Info("Restored container", ctxMap)
+               d.common.logger.Debug("Performed stateful restore", ctxMap)
+               d.common.logger.Info("Restored container", ctxMap)
                return nil
        }
 
@@ -3339,11 +3341,11 @@ func (d *lxc) Restore(sourceContainer 
instance.Instance, stateful bool) error {
 
        // Restart the container.
        if wasRunning {
-               logger.Info("Restored container", ctxMap)
+               d.common.logger.Info("Restored container", ctxMap)
                return d.Start(false)
        }
 
-       logger.Info("Restored container", ctxMap)
+       d.common.logger.Info("Restored container", ctxMap)
        return nil
 }
 
@@ -3372,11 +3374,11 @@ func (d *lxc) Delete(force bool) error {
                "ephemeral": d.ephemeral,
                "used":      d.lastUsedDate}
 
-       logger.Info("Deleting container", ctxMap)
+       d.common.logger.Info("Deleting container", ctxMap)
 
        if !force && 
shared.IsTrue(d.expandedConfig["security.protection.delete"]) && 
!d.IsSnapshot() {
                err := fmt.Errorf("Container is protected")
-               logger.Warn("Failed to delete container", log.Ctx{"name": 
d.Name(), "err": err})
+               d.common.logger.Warn("Failed to delete container", 
log.Ctx{"name": d.Name(), "err": err})
                return err
        }
 
@@ -3409,7 +3411,7 @@ func (d *lxc) Delete(force bool) error {
                        // calling its Delete function.
                        err := instance.DeleteSnapshots(d.state, d.Project(), 
d.Name())
                        if err != nil {
-                               logger.Error("Failed to delete instance 
snapshots", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err})
+                               d.common.logger.Error("Failed to delete 
instance snapshots", log.Ctx{"project": d.Project(), "instance": d.Name(), 
"err": err})
                                return err
                        }
 
@@ -3441,7 +3443,7 @@ func (d *lxc) Delete(force bool) error {
                // Delete the MAAS entry.
                err = d.maasDelete()
                if err != nil {
-                       logger.Error("Failed deleting container MAAS record", 
log.Ctx{"name": d.Name(), "err": err})
+                       d.common.logger.Error("Failed deleting container MAAS 
record", log.Ctx{"name": d.Name(), "err": err})
                        return err
                }
 
@@ -3459,11 +3461,11 @@ func (d *lxc) Delete(force bool) error {
 
        // Remove the database record of the instance or snapshot instance.
        if err := d.state.Cluster.DeleteInstance(d.project, d.Name()); err != 
nil {
-               logger.Error("Failed deleting container entry", log.Ctx{"name": 
d.Name(), "err": err})
+               d.common.logger.Error("Failed deleting container entry", 
log.Ctx{"name": d.Name(), "err": err})
                return err
        }
 
-       logger.Info("Deleted container", ctxMap)
+       d.common.logger.Info("Deleted container", ctxMap)
 
        if d.IsSnapshot() {
                d.state.Events.SendLifecycle(d.project, 
"container-snapshot-deleted",
@@ -3489,7 +3491,7 @@ func (d *lxc) Rename(newName string) error {
                "used":      d.lastUsedDate,
                "newname":   newName}
 
-       logger.Info("Renaming container", ctxMap)
+       d.common.logger.Info("Renaming container", ctxMap)
 
        // Sanity checks.
        err := instance.ValidName(newName, d.IsSnapshot())
@@ -3526,7 +3528,7 @@ func (d *lxc) Rename(newName string) error {
                // Rename all the instance snapshot database entries.
                results, err := 
d.state.Cluster.GetInstanceSnapshotsNames(d.project, oldName)
                if err != nil {
-                       logger.Error("Failed to get container snapshots", 
ctxMap)
+                       d.common.logger.Error("Failed to get container 
snapshots", ctxMap)
                        return err
                }
 
@@ -3538,7 +3540,7 @@ func (d *lxc) Rename(newName string) error {
                                return tx.RenameInstanceSnapshot(d.project, 
oldName, oldSnapName, baseSnapName)
                        })
                        if err != nil {
-                               logger.Error("Failed renaming snapshot", ctxMap)
+                               d.common.logger.Error("Failed renaming 
snapshot", ctxMap)
                                return err
                        }
                }
@@ -3555,7 +3557,7 @@ func (d *lxc) Rename(newName string) error {
                return tx.RenameInstance(d.project, oldName, newName)
        })
        if err != nil {
-               logger.Error("Failed renaming container", ctxMap)
+               d.common.logger.Error("Failed renaming container", ctxMap)
                return err
        }
 
@@ -3565,7 +3567,7 @@ func (d *lxc) Rename(newName string) error {
        if shared.PathExists(d.LogPath()) {
                err := os.Rename(d.LogPath(), shared.LogPath(newFullName))
                if err != nil {
-                       logger.Error("Failed renaming container", ctxMap)
+                       d.common.logger.Error("Failed renaming container", 
ctxMap)
                        return err
                }
        }
@@ -3621,7 +3623,7 @@ func (d *lxc) Rename(newName string) error {
                return err
        }
 
-       logger.Info("Renamed container", ctxMap)
+       d.common.logger.Info("Renamed container", ctxMap)
 
        if d.IsSnapshot() {
                d.state.Events.SendLifecycle(d.project, 
"container-snapshot-renamed",
@@ -4410,7 +4412,7 @@ func (d *lxc) updateDevices(removeDevices 
deviceConfig.Devices, addDevices devic
 
                        // If update is non-user requested (i.e from a snapshot 
restore), there's nothing we can
                        // do to fix the config and we don't want to prevent 
the snapshot restore so log and allow.
-                       logger.Error("Failed to add device, skipping as 
non-user requested", log.Ctx{"project": d.Project(), "instance": d.Name(), 
"device": dev.Name, "err": err})
+                       d.common.logger.Error("Failed to add device, skipping 
as non-user requested", log.Ctx{"project": d.Project(), "instance": d.Name(), 
"device": dev.Name, "err": err})
                        continue
                }
 
@@ -4447,12 +4449,12 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
                return meta, fmt.Errorf("Cannot export a running instance as an 
image")
        }
 
-       logger.Info("Exporting instance", ctxMap)
+       d.common.logger.Info("Exporting instance", ctxMap)
 
        // Start the storage.
        _, err := d.mount()
        if err != nil {
-               logger.Error("Failed exporting instance", ctxMap)
+               d.common.logger.Error("Failed exporting instance", ctxMap)
                return meta, err
        }
        defer d.unmount()
@@ -4460,7 +4462,7 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
        // Get IDMap to unshift container as the tarball is created.
        idmap, err := d.DiskIdmap()
        if err != nil {
-               logger.Error("Failed exporting instance", ctxMap)
+               d.common.logger.Error("Failed exporting instance", ctxMap)
                return meta, err
        }
 
@@ -4480,7 +4482,7 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
 
                err = tarWriter.WriteFile(path[offset:], path, fi, false)
                if err != nil {
-                       logger.Debugf("Error tarring up %s: %s", path, err)
+                       d.common.logger.Debug(fmt.Sprintf("Error tarring up %s: 
%s", path, err))
                        return err
                }
                return nil
@@ -4493,7 +4495,7 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
                tempDir, err := ioutil.TempDir("", "lxd_lxd_metadata_")
                if err != nil {
                        tarWriter.Close()
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
                defer os.RemoveAll(tempDir)
@@ -4505,7 +4507,7 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
                        parent, err := instance.LoadByProjectAndName(d.state, 
d.project, parentName)
                        if err != nil {
                                tarWriter.Close()
-                               logger.Error("Failed exporting instance", 
ctxMap)
+                               d.common.logger.Error("Failed exporting 
instance", ctxMap)
                                return meta, err
                        }
 
@@ -4517,7 +4519,7 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
                if arch == "" {
                        arch, err = 
osarch.ArchitectureName(d.state.OS.Architectures[0])
                        if err != nil {
-                               logger.Error("Failed exporting instance", 
ctxMap)
+                               d.common.logger.Error("Failed exporting 
instance", ctxMap)
                                return meta, err
                        }
                }
@@ -4530,7 +4532,7 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
                data, err := yaml.Marshal(&meta)
                if err != nil {
                        tarWriter.Close()
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
 
@@ -4539,22 +4541,22 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
                err = ioutil.WriteFile(fnam, data, 0644)
                if err != nil {
                        tarWriter.Close()
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
 
                fi, err := os.Lstat(fnam)
                if err != nil {
                        tarWriter.Close()
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
 
                tmpOffset := len(path.Dir(fnam)) + 1
                if err := tarWriter.WriteFile(fnam[tmpOffset:], fnam, fi, 
false); err != nil {
                        tarWriter.Close()
-                       logger.Debugf("Error writing to tarfile: %s", err)
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Debug(fmt.Sprintf("Error writing to 
tarfile: %s", err))
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
        } else {
@@ -4562,14 +4564,14 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
                content, err := ioutil.ReadFile(fnam)
                if err != nil {
                        tarWriter.Close()
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
 
                err = yaml.Unmarshal(content, &meta)
                if err != nil {
                        tarWriter.Close()
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
 
@@ -4580,7 +4582,7 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
                        tempDir, err := ioutil.TempDir("", "lxd_lxd_metadata_")
                        if err != nil {
                                tarWriter.Close()
-                               logger.Error("Failed exporting instance", 
ctxMap)
+                               d.common.logger.Error("Failed exporting 
instance", ctxMap)
                                return meta, err
                        }
                        defer os.RemoveAll(tempDir)
@@ -4588,7 +4590,7 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
                        data, err := yaml.Marshal(&meta)
                        if err != nil {
                                tarWriter.Close()
-                               logger.Error("Failed exporting instance", 
ctxMap)
+                               d.common.logger.Error("Failed exporting 
instance", ctxMap)
                                return meta, err
                        }
 
@@ -4597,7 +4599,7 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
                        err = ioutil.WriteFile(fnam, data, 0644)
                        if err != nil {
                                tarWriter.Close()
-                               logger.Error("Failed exporting instance", 
ctxMap)
+                               d.common.logger.Error("Failed exporting 
instance", ctxMap)
                                return meta, err
                        }
                }
@@ -4606,8 +4608,8 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
                fi, err := os.Lstat(fnam)
                if err != nil {
                        tarWriter.Close()
-                       logger.Debugf("Error statting %s during export", fnam)
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Debug(fmt.Sprintf("Error statting %s 
during export", fnam))
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
 
@@ -4619,8 +4621,8 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
                }
                if err != nil {
                        tarWriter.Close()
-                       logger.Debugf("Error writing to tarfile: %s", err)
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Debug(fmt.Sprintf("Error writing to 
tarfile: %s", err))
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
        }
@@ -4629,7 +4631,7 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
        fnam = d.RootfsPath()
        err = filepath.Walk(fnam, writeToTar)
        if err != nil {
-               logger.Error("Failed exporting instance", ctxMap)
+               d.common.logger.Error("Failed exporting instance", ctxMap)
                return meta, err
        }
 
@@ -4638,18 +4640,18 @@ func (d *lxc) Export(w io.Writer, properties 
map[string]string) (api.ImageMetada
        if shared.PathExists(fnam) {
                err = filepath.Walk(fnam, writeToTar)
                if err != nil {
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
        }
 
        err = tarWriter.Close()
        if err != nil {
-               logger.Error("Failed exporting instance", ctxMap)
+               d.common.logger.Error("Failed exporting instance", ctxMap)
                return meta, err
        }
 
-       logger.Info("Exported instance", ctxMap)
+       d.common.logger.Info("Exported instance", ctxMap)
        return meta, nil
 }
 
@@ -4698,7 +4700,7 @@ func (d *lxc) Migrate(args *instance.CriuMigrationArgs) 
error {
                return fmt.Errorf("Unable to perform container live migration. 
CRIU isn't installed")
        }
 
-       logger.Info("Migrating container", ctxMap)
+       d.common.logger.Info("Migrating container", ctxMap)
 
        prettyCmd := ""
        switch args.Cmd {
@@ -4712,7 +4714,7 @@ func (d *lxc) Migrate(args *instance.CriuMigrationArgs) 
error {
                prettyCmd = "feature-check"
        default:
                prettyCmd = "unknown"
-               logger.Warn("Unknown migrate call", log.Ctx{"cmd": args.Cmd})
+               d.common.logger.Warn("Unknown migrate call", log.Ctx{"cmd": 
args.Cmd})
        }
 
        pool, err := d.getStoragePool()
@@ -4807,7 +4809,7 @@ func (d *lxc) Migrate(args *instance.CriuMigrationArgs) 
error {
                }
                migrateErr = d.c.Migrate(args.Cmd, opts)
                if migrateErr != nil {
-                       logger.Info("CRIU feature check failed", ctxMap)
+                       d.common.logger.Info("CRIU feature check failed", 
ctxMap)
                        return migrateErr
                }
                return nil
@@ -4856,20 +4858,20 @@ func (d *lxc) Migrate(args *instance.CriuMigrationArgs) 
error {
 
        collectErr := collectCRIULogFile(d, finalStateDir, args.Function, 
prettyCmd)
        if collectErr != nil {
-               logger.Error("Error collecting checkpoint log file", 
log.Ctx{"err": collectErr})
+               d.common.logger.Error("Error collecting checkpoint log file", 
log.Ctx{"err": collectErr})
        }
 
        if migrateErr != nil {
                log, err2 := getCRIULogErrors(finalStateDir, prettyCmd)
                if err2 == nil {
-                       logger.Info("Failed migrating container", ctxMap)
+                       d.common.logger.Info("Failed migrating container", 
ctxMap)
                        migrateErr = fmt.Errorf("%s %s failed\n%s", 
args.Function, prettyCmd, log)
                }
 
                return migrateErr
        }
 
-       logger.Info("Migrated container", ctxMap)
+       d.common.logger.Info("Migrated container", ctxMap)
 
        return nil
 }
@@ -5075,7 +5077,7 @@ func (d *lxc) FileExists(path string) error {
                }
 
                for _, line := range strings.Split(strings.TrimRight(stderr, 
"\n"), "\n") {
-                       logger.Debugf("forkcheckfile: %s", line)
+                       d.common.logger.Debug(fmt.Sprintf("forkcheckfile: %s", 
line))
                }
        }
 
@@ -5187,7 +5189,7 @@ func (d *lxc) FilePull(srcpath string, dstpath string) 
(int64, int64, os.FileMod
                        continue
                }
 
-               logger.Debugf("forkgetfile: %s", line)
+               d.common.logger.Debug(fmt.Sprintf("forkgetfile: %s", line))
        }
 
        if err != nil {
@@ -5507,10 +5509,10 @@ func (d *lxc) Exec(req api.InstanceExecPost, stdin 
*os.File, stdout *os.File, st
 
        attachedPid := shared.ReadPid(rStatus)
        if attachedPid <= 0 {
-               logger.Errorf("Failed to retrieve PID of executing child 
process")
+               d.common.logger.Error("Failed to retrieve PID of executing 
child process")
                return nil, fmt.Errorf("Failed to retrieve PID of executing 
child process")
        }
-       logger.Debugf("Retrieved PID %d of executing child process", 
attachedPid)
+       d.common.logger.Debug(fmt.Sprintf("Retrieved PID %d of executing child 
process", attachedPid))
 
        instCmd := &lxcCmd{
                cmd:              &cmd,
@@ -5557,28 +5559,28 @@ func (d *lxc) diskState() 
map[string]api.InstanceStateDisk {
                if dev.Config["path"] == "/" {
                        pool, err := storagePools.GetPoolByInstance(d.state, d)
                        if err != nil {
-                               logger.Error("Error loading storage pool", 
log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err})
+                               d.common.logger.Error("Error loading storage 
pool", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err})
                                continue
                        }
 
                        usage, err = pool.GetInstanceUsage(d)
                        if err != nil {
                                if err != storageDrivers.ErrNotSupported {
-                                       logger.Error("Error getting disk 
usage", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err})
+                                       d.common.logger.Error("Error getting 
disk usage", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err})
                                }
                                continue
                        }
                } else if dev.Config["pool"] != "" {
                        pool, err := storagePools.GetPoolByName(d.state, 
dev.Config["pool"])
                        if err != nil {
-                               logger.Error("Error loading storage pool", 
log.Ctx{"project": d.Project(), "poolName": dev.Config["pool"], "err": err})
+                               d.common.logger.Error("Error loading storage 
pool", log.Ctx{"project": d.Project(), "poolName": dev.Config["pool"], "err": 
err})
                                continue
                        }
 
                        usage, err = pool.GetCustomVolumeUsage(d.Project(), 
dev.Config["source"])
                        if err != nil {
                                if err != storageDrivers.ErrNotSupported {
-                                       logger.Error("Error getting volume 
usage", log.Ctx{"project": d.Project(), "volume": dev.Config["source"], "err": 
err})
+                                       d.common.logger.Error("Error getting 
volume usage", log.Ctx{"project": d.Project(), "volume": dev.Config["source"], 
"err": err})
                                }
                                continue
                        }
@@ -5651,7 +5653,7 @@ func (d *lxc) networkState() 
map[string]api.InstanceStateNetwork {
                nw, err := netutils.NetnsGetifaddrs(int32(pid))
                if err != nil {
                        couldUseNetnsGetifaddrs = false
-                       logger.Error("Failed to retrieve network information 
via netlink", log.Ctx{"container": d.name, "pid": pid})
+                       d.common.logger.Error("Failed to retrieve network 
information via netlink", log.Ctx{"container": d.name, "pid": pid})
                } else {
                        result = nw
                }
@@ -5676,7 +5678,7 @@ func (d *lxc) networkState() 
map[string]api.InstanceStateNetwork {
 
                // Process forkgetnet response
                if err != nil {
-                       logger.Error("Error calling 'lxd forknet", 
log.Ctx{"container": d.name, "err": err, "pid": pid})
+                       d.common.logger.Error("Error calling 'lxd forknet", 
log.Ctx{"container": d.name, "err": err, "pid": pid})
                        return result
                }
 
@@ -5688,7 +5690,7 @@ func (d *lxc) networkState() 
map[string]api.InstanceStateNetwork {
                nw := map[string]api.InstanceStateNetwork{}
                err = json.Unmarshal([]byte(out), &nw)
                if err != nil {
-                       logger.Error("Failure to read forknet json", 
log.Ctx{"container": d.name, "err": err})
+                       d.common.logger.Error("Failure to read forknet json", 
log.Ctx{"container": d.name, "err": err})
                        return result
                }
                result = nw
@@ -6072,7 +6074,7 @@ func (d *lxc) removeUnixDevices() error {
                devicePath := filepath.Join(d.DevicesPath(), f.Name())
                err := os.Remove(devicePath)
                if err != nil {
-                       logger.Error("Failed removing unix device", 
log.Ctx{"err": err, "path": devicePath})
+                       d.common.logger.Error("Failed removing unix device", 
log.Ctx{"err": err, "path": devicePath})
                }
        }
 
@@ -6271,7 +6273,7 @@ func (d *lxc) removeDiskDevices() error {
                diskPath := filepath.Join(d.DevicesPath(), f.Name())
                err := os.Remove(diskPath)
                if err != nil {
-                       logger.Error("Failed to remove disk device path", 
log.Ctx{"err": err, "path": diskPath})
+                       d.common.logger.Error("Failed to remove disk device 
path", log.Ctx{"err": err, "path": diskPath})
                }
        }
 
diff --git a/lxd/instance/drivers/driver_qemu.go 
b/lxd/instance/drivers/driver_qemu.go
index 13bae74f7e..64001ae2ef 100644
--- a/lxd/instance/drivers/driver_qemu.go
+++ b/lxd/instance/drivers/driver_qemu.go
@@ -113,6 +113,7 @@ func qemuInstantiate(s *state.State, args db.InstanceArgs, 
expandedDevices devic
                        lastUsedDate: args.LastUsedDate,
                        localConfig:  args.Config,
                        localDevices: args.Devices,
+                       logger:       logging.AddContext(logger.Log, 
log.Ctx{"instanceType": args.Type.String, "instanceName": args.Name}),
                        name:         args.Name,
                        node:         args.Node,
                        profiles:     args.Profiles,
@@ -166,6 +167,7 @@ func qemuCreate(s *state.State, args db.InstanceArgs) 
(instance.Instance, error)
                        lastUsedDate: args.LastUsedDate,
                        localConfig:  args.Config,
                        localDevices: args.Devices,
+                       logger:       logging.AddContext(logger.Log, 
log.Ctx{"instanceType": args.Type.String, "instanceName": args.Name}),
                        name:         args.Name,
                        node:         args.Node,
                        profiles:     args.Profiles,
@@ -207,7 +209,7 @@ func qemuCreate(s *state.State, args db.InstanceArgs) 
(instance.Instance, error)
                "ephemeral": d.ephemeral,
        }
 
-       logger.Info("Creating instance", ctxMap)
+       d.common.logger.Info("Creating instance", ctxMap)
 
        // Load the config.
        err = d.init()
@@ -290,7 +292,7 @@ func qemuCreate(s *state.State, args db.InstanceArgs) 
(instance.Instance, error)
                }
        }
 
-       logger.Info("Created instance", ctxMap)
+       d.common.logger.Info("Created instance", ctxMap)
        d.state.Events.SendLifecycle(d.project, "virtual-machine-created", 
fmt.Sprintf("/1.0/virtual-machines/%s", d.name), nil)
 
        revert.Success()
@@ -358,7 +360,7 @@ func (d *qemu) getMonitorEventHandler() func(event string, 
data map[string]inter
 
                inst, err := instance.LoadByProjectAndName(state, projectName, 
instanceName)
                if err != nil {
-                       logger.Error("Failed to load instance", "project", 
projectName, "instance", instanceName, "err", err)
+                       d.common.logger.Error("Failed to load instance", 
"project", projectName, "instance", instanceName, "err", err)
                        return
                }
 
@@ -371,7 +373,7 @@ func (d *qemu) getMonitorEventHandler() func(event string, 
data map[string]inter
 
                        err = inst.(*qemu).onStop(target)
                        if err != nil {
-                               logger.Error("Failed to cleanly stop instance", 
"project", projectName, "instance", instanceName, "err", err)
+                               d.common.logger.Error("Failed to cleanly stop 
instance", "project", projectName, "instance", instanceName, "err", err)
                                return
                        }
                }
@@ -790,7 +792,7 @@ func (d *qemu) Start(stateful bool) error {
                        return err
                }
        } else {
-               logger.Warn("Unable to use virtio-fs for config drive, using 9p 
as a fallback: virtiofsd missing")
+               d.common.logger.Warn("Unable to use virtio-fs for config drive, 
using 9p as a fallback: virtiofsd missing")
        }
 
        // Generate UUID if not present.
@@ -830,7 +832,7 @@ func (d *qemu) Start(stateful bool) error {
                revert.Add(func() {
                        err := d.deviceStop(dev.Name, dev.Config, false)
                        if err != nil {
-                               logger.Errorf("Failed to cleanup device %q: 
%v", dev.Name, err)
+                               d.common.logger.Error(fmt.Sprintf("Failed to 
cleanup device %q: %v", dev.Name, err))
                        }
                })
 
@@ -1017,7 +1019,7 @@ func (d *qemu) Start(stateful bool) error {
 
        pid, err := d.pid()
        if err != nil {
-               logger.Errorf(`Failed to get VM process ID "%d"`, pid)
+               d.common.logger.Error(fmt.Sprintf(`Failed to get VM process ID 
"%d"`, pid))
                op.Done(err)
                return err
        }
@@ -1025,13 +1027,13 @@ func (d *qemu) Start(stateful bool) error {
        revert.Add(func() {
                proc, err := os.FindProcess(pid)
                if err != nil {
-                       logger.Errorf(`Failed to find VM process "%d"`, pid)
+                       d.common.logger.Error(fmt.Sprintf(`Failed to find VM 
process "%d"`, pid))
                        return
                }
 
                proc.Kill()
                if err != nil {
-                       logger.Errorf(`Failed to kill VM process "%d"`, pid)
+                       d.common.logger.Error(fmt.Sprintf(`Failed to kill VM 
process "%d"`, pid))
                }
        })
 
@@ -1216,14 +1218,14 @@ func (d *qemu) RegisterDevices() {
                }
 
                if err != nil {
-                       logger.Error("Failed to load device to register", 
log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name})
+                       d.common.logger.Error("Failed to load device to 
register", log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name})
                        continue
                }
 
                // Check whether device wants to register for any events.
                err = dev.Register()
                if err != nil {
-                       logger.Error("Failed to register device", 
log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name})
+                       d.common.logger.Error("Failed to register device", 
log.Ctx{"err": err, "instance": d.Name(), "device": entry.Name})
                        continue
                }
        }
@@ -1401,7 +1403,7 @@ func (d *qemu) generateConfigShare() error {
        // Add the VM agent.
        path, err := exec.LookPath("lxd-agent")
        if err != nil {
-               logger.Warnf("lxd-agent not found, skipping its inclusion in 
the VM config drive: %v", err)
+               d.common.logger.Warn(fmt.Sprintf("lxd-agent not found, skipping 
its inclusion in the VM config drive: %v", err))
        } else {
                // Install agent into config drive dir if found.
                path, err = filepath.EvalSymlinks(path)
@@ -2272,7 +2274,7 @@ func (d *qemu) addDriveConfig(sb *strings.Builder, 
bootIndexes map[string]int, d
 
        // If drive config indicates we need to use unsafe I/O then use it.
        if shared.StringInSlice(qemuUnsafeIO, driveConf.Opts) {
-               logger.Warnf("Using unsafe cache I/O with %s", 
driveConf.DevPath)
+               d.common.logger.Warn(fmt.Sprintf("Using unsafe cache I/O with 
%s", driveConf.DevPath))
                aioMode = "threads"
                cacheMode = "unsafe" // Use host cache, but ignore all sync 
requests from guest.
        } else if shared.PathExists(driveConf.DevPath) && 
!shared.IsBlockdevPath(driveConf.DevPath) {
@@ -2287,7 +2289,7 @@ func (d *qemu) addDriveConfig(sb *strings.Builder, 
bootIndexes map[string]int, d
                if fsType == "zfs" || fsType == "btrfs" {
                        if driveConf.FSType != "iso9660" {
                                // Only warn about using writeback cache if the 
drive image is writable.
-                               logger.Warnf("Using writeback cache I/O with %q 
as backing filesystem is %q", driveConf.DevPath, fsType)
+                               d.common.logger.Warn(fmt.Sprintf("Using 
writeback cache I/O with %q as backing filesystem is %q", driveConf.DevPath, 
fsType))
                        }
 
                        aioMode = "threads"
@@ -2683,7 +2685,7 @@ func (d *qemu) Restore(source instance.Instance, stateful 
bool) error {
                "used":      d.lastUsedDate,
                "source":    source.Name()}
 
-       logger.Info("Restoring instance", ctxMap)
+       d.common.logger.Info("Restoring instance", ctxMap)
 
        // Load the storage driver.
        pool, err := storagePools.GetPoolByInstance(d.state, d)
@@ -2720,7 +2722,7 @@ func (d *qemu) Restore(source instance.Instance, stateful 
bool) error {
        // Don't pass as user-requested as there's no way to fix a bad config.
        err = d.Update(args, false)
        if err != nil {
-               logger.Error("Failed restoring instance configuration", ctxMap)
+               d.common.logger.Error("Failed restoring instance 
configuration", ctxMap)
                return err
        }
 
@@ -2735,11 +2737,11 @@ func (d *qemu) Restore(source instance.Instance, 
stateful bool) error {
 
        // Restart the insance.
        if wasRunning {
-               logger.Info("Restored instance", ctxMap)
+               d.common.logger.Info("Restored instance", ctxMap)
                return d.Start(false)
        }
 
-       logger.Info("Restored instance", ctxMap)
+       d.common.logger.Info("Restored instance", ctxMap)
        return nil
 }
 
@@ -2754,7 +2756,7 @@ func (d *qemu) Rename(newName string) error {
                "used":      d.lastUsedDate,
                "newname":   newName}
 
-       logger.Info("Renaming instance", ctxMap)
+       d.common.logger.Info("Renaming instance", ctxMap)
 
        // Sanity checks.
        err := instance.ValidName(newName, d.IsSnapshot())
@@ -2791,7 +2793,7 @@ func (d *qemu) Rename(newName string) error {
                // Rename all the instance snapshot database entries.
                results, err := 
d.state.Cluster.GetInstanceSnapshotsNames(d.project, oldName)
                if err != nil {
-                       logger.Error("Failed to get instance snapshots", ctxMap)
+                       d.common.logger.Error("Failed to get instance 
snapshots", ctxMap)
                        return err
                }
 
@@ -2803,7 +2805,7 @@ func (d *qemu) Rename(newName string) error {
                                return tx.RenameInstanceSnapshot(d.project, 
oldName, oldSnapName, baseSnapName)
                        })
                        if err != nil {
-                               logger.Error("Failed renaming snapshot", ctxMap)
+                               d.common.logger.Error("Failed renaming 
snapshot", ctxMap)
                                return err
                        }
                }
@@ -2820,7 +2822,7 @@ func (d *qemu) Rename(newName string) error {
                return tx.RenameInstance(d.project, oldName, newName)
        })
        if err != nil {
-               logger.Error("Failed renaming instance", ctxMap)
+               d.common.logger.Error("Failed renaming instance", ctxMap)
                return err
        }
 
@@ -2830,7 +2832,7 @@ func (d *qemu) Rename(newName string) error {
        if shared.PathExists(d.LogPath()) {
                err := os.Rename(d.LogPath(), shared.LogPath(newFullName))
                if err != nil {
-                       logger.Error("Failed renaming instance", ctxMap)
+                       d.common.logger.Error("Failed renaming instance", 
ctxMap)
                        return err
                }
        }
@@ -2878,7 +2880,7 @@ func (d *qemu) Rename(newName string) error {
                return err
        }
 
-       logger.Info("Renamed instance", ctxMap)
+       d.common.logger.Info("Renamed instance", ctxMap)
 
        if d.IsSnapshot() {
                d.state.Events.SendLifecycle(d.project, 
"virtual-machine-snapshot-renamed",
@@ -3344,7 +3346,7 @@ func (d *qemu) updateDevices(removeDevices 
deviceConfig.Devices, addDevices devi
 
                        // If update is non-user requested (i.e from a snapshot 
restore), there's nothing we can
                        // do to fix the config and we don't want to prevent 
the snapshot restore so log and allow.
-                       logger.Error("Failed to add device, skipping as 
non-user requested", log.Ctx{"project": d.Project(), "instance": d.Name(), 
"device": dev.Name, "err": err})
+                       d.common.logger.Error("Failed to add device, skipping 
as non-user requested", log.Ctx{"project": d.Project(), "instance": d.Name(), 
"device": dev.Name, "err": err})
                        continue
                }
 
@@ -3452,7 +3454,7 @@ func (d *qemu) removeUnixDevices() error {
                devicePath := filepath.Join(d.DevicesPath(), f.Name())
                err := os.Remove(devicePath)
                if err != nil {
-                       logger.Error("Failed removing unix device", 
log.Ctx{"err": err, "path": devicePath})
+                       d.common.logger.Error("Failed removing unix device", 
log.Ctx{"err": err, "path": devicePath})
                }
        }
 
@@ -3485,7 +3487,7 @@ func (d *qemu) removeDiskDevices() error {
                diskPath := filepath.Join(d.DevicesPath(), f.Name())
                err := os.Remove(diskPath)
                if err != nil {
-                       logger.Error("Failed to remove disk device path", 
log.Ctx{"err": err, "path": diskPath})
+                       d.common.logger.Error("Failed to remove disk device 
path", log.Ctx{"err": err, "path": diskPath})
                }
        }
 
@@ -3515,7 +3517,7 @@ func (d *qemu) cleanupDevices() {
                if err == device.ErrUnsupportedDevType {
                        continue
                } else if err != nil {
-                       logger.Errorf("Failed to stop device '%s': %v", 
dev.Name, err)
+                       d.common.logger.Error(fmt.Sprintf("Failed to stop 
device '%s': %v", dev.Name, err))
                }
        }
 }
@@ -3544,7 +3546,7 @@ func (d *qemu) Delete(force bool) error {
                "ephemeral": d.ephemeral,
                "used":      d.lastUsedDate}
 
-       logger.Info("Deleting instance", ctxMap)
+       d.common.logger.Info("Deleting instance", ctxMap)
 
        // Check if instance is delete protected.
        if !force && 
shared.IsTrue(d.expandedConfig["security.protection.delete"]) && 
!d.IsSnapshot() {
@@ -3604,7 +3606,7 @@ func (d *qemu) Delete(force bool) error {
                // Delete the MAAS entry.
                err = d.maasDelete()
                if err != nil {
-                       logger.Error("Failed deleting instance MAAS record", 
log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err})
+                       d.common.logger.Error("Failed deleting instance MAAS 
record", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err})
                        return err
                }
 
@@ -3622,11 +3624,11 @@ func (d *qemu) Delete(force bool) error {
 
        // Remove the database record of the instance or snapshot instance.
        if err := d.state.Cluster.DeleteInstance(d.Project(), d.Name()); err != 
nil {
-               logger.Error("Failed deleting instance entry", 
log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err})
+               d.common.logger.Error("Failed deleting instance entry", 
log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err})
                return err
        }
 
-       logger.Info("Deleted instance", ctxMap)
+       d.common.logger.Info("Deleted instance", ctxMap)
 
        if d.IsSnapshot() {
                d.state.Events.SendLifecycle(d.project, 
"virtual-machine-snapshot-deleted",
@@ -3698,12 +3700,12 @@ func (d *qemu) Export(w io.Writer, properties 
map[string]string) (api.ImageMetad
                return meta, fmt.Errorf("Cannot export a running instance as an 
image")
        }
 
-       logger.Info("Exporting instance", ctxMap)
+       d.common.logger.Info("Exporting instance", ctxMap)
 
        // Start the storage.
        mountInfo, err := d.mount()
        if err != nil {
-               logger.Error("Failed exporting instance", ctxMap)
+               d.common.logger.Error("Failed exporting instance", ctxMap)
                return meta, err
        }
        defer d.unmount()
@@ -3722,7 +3724,7 @@ func (d *qemu) Export(w io.Writer, properties 
map[string]string) (api.ImageMetad
 
                err = tarWriter.WriteFile(path[offset:], path, fi, false)
                if err != nil {
-                       logger.Debugf("Error tarring up %s: %s", path, err)
+                       d.common.logger.Debug(fmt.Sprintf("Error tarring up %s: 
%s", path, err))
                        return err
                }
 
@@ -3736,7 +3738,7 @@ func (d *qemu) Export(w io.Writer, properties 
map[string]string) (api.ImageMetad
                tempDir, err := ioutil.TempDir("", "lxd_lxd_metadata_")
                if err != nil {
                        tarWriter.Close()
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
                defer os.RemoveAll(tempDir)
@@ -3748,7 +3750,7 @@ func (d *qemu) Export(w io.Writer, properties 
map[string]string) (api.ImageMetad
                        parent, err := instance.LoadByProjectAndName(d.state, 
d.project, parentName)
                        if err != nil {
                                tarWriter.Close()
-                               logger.Error("Failed exporting instance", 
ctxMap)
+                               d.common.logger.Error("Failed exporting 
instance", ctxMap)
                                return meta, err
                        }
 
@@ -3760,7 +3762,7 @@ func (d *qemu) Export(w io.Writer, properties 
map[string]string) (api.ImageMetad
                if arch == "" {
                        arch, err = 
osarch.ArchitectureName(d.state.OS.Architectures[0])
                        if err != nil {
-                               logger.Error("Failed exporting instance", 
ctxMap)
+                               d.common.logger.Error("Failed exporting 
instance", ctxMap)
                                return meta, err
                        }
                }
@@ -3773,7 +3775,7 @@ func (d *qemu) Export(w io.Writer, properties 
map[string]string) (api.ImageMetad
                data, err := yaml.Marshal(&meta)
                if err != nil {
                        tarWriter.Close()
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
 
@@ -3782,21 +3784,21 @@ func (d *qemu) Export(w io.Writer, properties 
map[string]string) (api.ImageMetad
                err = ioutil.WriteFile(fnam, data, 0644)
                if err != nil {
                        tarWriter.Close()
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
 
                fi, err := os.Lstat(fnam)
                if err != nil {
                        tarWriter.Close()
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
 
                tmpOffset := len(filepath.Dir(fnam)) + 1
                if err := tarWriter.WriteFile(fnam[tmpOffset:], fnam, fi, 
false); err != nil {
                        tarWriter.Close()
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
        } else {
@@ -3804,14 +3806,14 @@ func (d *qemu) Export(w io.Writer, properties 
map[string]string) (api.ImageMetad
                content, err := ioutil.ReadFile(fnam)
                if err != nil {
                        tarWriter.Close()
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
 
                err = yaml.Unmarshal(content, &meta)
                if err != nil {
                        tarWriter.Close()
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
 
@@ -3822,7 +3824,7 @@ func (d *qemu) Export(w io.Writer, properties 
map[string]string) (api.ImageMetad
                        tempDir, err := ioutil.TempDir("", "lxd_lxd_metadata_")
                        if err != nil {
                                tarWriter.Close()
-                               logger.Error("Failed exporting instance", 
ctxMap)
+                               d.common.logger.Error("Failed exporting 
instance", ctxMap)
                                return meta, err
                        }
                        defer os.RemoveAll(tempDir)
@@ -3830,7 +3832,7 @@ func (d *qemu) Export(w io.Writer, properties 
map[string]string) (api.ImageMetad
                        data, err := yaml.Marshal(&meta)
                        if err != nil {
                                tarWriter.Close()
-                               logger.Error("Failed exporting instance", 
ctxMap)
+                               d.common.logger.Error("Failed exporting 
instance", ctxMap)
                                return meta, err
                        }
 
@@ -3839,7 +3841,7 @@ func (d *qemu) Export(w io.Writer, properties 
map[string]string) (api.ImageMetad
                        err = ioutil.WriteFile(fnam, data, 0644)
                        if err != nil {
                                tarWriter.Close()
-                               logger.Error("Failed exporting instance", 
ctxMap)
+                               d.common.logger.Error("Failed exporting 
instance", ctxMap)
                                return meta, err
                        }
                }
@@ -3848,8 +3850,8 @@ func (d *qemu) Export(w io.Writer, properties 
map[string]string) (api.ImageMetad
                fi, err := os.Lstat(fnam)
                if err != nil {
                        tarWriter.Close()
-                       logger.Debugf("Error statting %s during export", fnam)
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Debug(fmt.Sprintf("Error statting %s 
during export", fnam))
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
 
@@ -3861,8 +3863,8 @@ func (d *qemu) Export(w io.Writer, properties 
map[string]string) (api.ImageMetad
                }
                if err != nil {
                        tarWriter.Close()
-                       logger.Debugf("Error writing to tarfile: %s", err)
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Debug(fmt.Sprintf("Error writing to 
tarfile: %s", err))
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
        }
@@ -3900,18 +3902,18 @@ func (d *qemu) Export(w io.Writer, properties 
map[string]string) (api.ImageMetad
        if shared.PathExists(fnam) {
                err = filepath.Walk(fnam, writeToTar)
                if err != nil {
-                       logger.Error("Failed exporting instance", ctxMap)
+                       d.common.logger.Error("Failed exporting instance", 
ctxMap)
                        return meta, err
                }
        }
 
        err = tarWriter.Close()
        if err != nil {
-               logger.Error("Failed exporting instance", ctxMap)
+               d.common.logger.Error("Failed exporting instance", ctxMap)
                return meta, err
        }
 
-       logger.Info("Exported instance", ctxMap)
+       d.common.logger.Info("Exported instance", ctxMap)
        return meta, nil
 }
 
@@ -3939,7 +3941,7 @@ func (d *qemu) FilePull(srcPath string, dstPath string) 
(int64, int64, os.FileMo
 
        agent, err := lxdClient.ConnectLXDHTTP(nil, client)
        if err != nil {
-               logger.Errorf("Failed to connect to lxd-agent on %s: %v", 
d.Name(), err)
+               d.common.logger.Error(fmt.Sprintf("Failed to connect to 
lxd-agent on %s: %v", d.Name(), err))
                return 0, 0, 0, "", nil, fmt.Errorf("Failed to connect to 
lxd-agent")
        }
        defer agent.Disconnect()
@@ -3983,7 +3985,7 @@ func (d *qemu) FilePush(fileType string, srcPath string, 
dstPath string, uid int
 
        agent, err := lxdClient.ConnectLXDHTTP(nil, client)
        if err != nil {
-               logger.Errorf("Failed to connect to lxd-agent on %s: %v", 
d.Name(), err)
+               d.common.logger.Error(fmt.Sprintf("Failed to connect to 
lxd-agent on %s: %v", d.Name(), err))
                return fmt.Errorf("Failed to connect to lxd-agent")
        }
        defer agent.Disconnect()
@@ -4124,7 +4126,7 @@ func (d *qemu) Exec(req api.InstanceExecPost, stdin 
*os.File, stdout *os.File, s
 
        agent, err := lxdClient.ConnectLXDHTTP(nil, client)
        if err != nil {
-               logger.Errorf("Failed to connect to lxd-agent on %s: %v", 
d.Name(), err)
+               d.common.logger.Error(fmt.Sprintf("Failed to connect to 
lxd-agent on %s: %v", d.Name(), err))
                return nil, fmt.Errorf("Failed to connect to lxd-agent")
        }
        revert.Add(agent.Disconnect)
@@ -4322,7 +4324,7 @@ func (d *qemu) RenderState() (*api.InstanceState, error) {
                status, err = d.agentGetState()
                if err != nil {
                        if err != errQemuAgentOffline {
-                               logger.Warn("Could not get VM state from 
agent", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err})
+                               d.common.logger.Warn("Could not get VM state 
from agent", log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err})
                        }
 
                        // Fallback data if agent is not reachable.
@@ -4336,7 +4338,7 @@ func (d *qemu) RenderState() (*api.InstanceState, error) {
 
                                dev, _, err := d.deviceLoad(k, m)
                                if err != nil {
-                                       logger.Warn("Could not load device", 
log.Ctx{"project": d.Project(), "instance": d.Name(), "device": k, "err": err})
+                                       d.common.logger.Warn("Could not load 
device", log.Ctx{"project": d.Project(), "instance": d.Name(), "device": k, 
"err": err})
                                        continue
                                }
 
@@ -4390,7 +4392,7 @@ func (d *qemu) RenderState() (*api.InstanceState, error) {
        status.StatusCode = statusCode
        status.Disk, err = d.diskState()
        if err != nil && err != storageDrivers.ErrNotSupported {
-               logger.Warn("Error getting disk usage", log.Ctx{"project": 
d.Project(), "instance": d.Name(), "err": err})
+               d.common.logger.Warn("Error getting disk usage", 
log.Ctx{"project": d.Project(), "instance": d.Name(), "err": err})
        }
 
        return status, nil
@@ -4931,7 +4933,7 @@ func (d *qemu) devlxdEventSend(eventType string, 
eventMessage interface{}) error
 
        agent, err := lxdClient.ConnectLXDHTTP(nil, client)
        if err != nil {
-               logger.Errorf("Failed to connect to lxd-agent on %s: %v", 
d.Name(), err)
+               d.common.logger.Error(fmt.Sprintf("Failed to connect to 
lxd-agent on %s: %v", d.Name(), err))
                return fmt.Errorf("Failed to connect to lxd-agent")
        }
        defer agent.Disconnect()
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to