All of lore.kernel.org
 help / color / mirror / Atom feed
* per-domain logging
@ 2016-09-14 14:22 Cedric Bosdonnat
  2016-09-15 14:50 ` Wei Liu
  0 siblings, 1 reply; 17+ messages in thread
From: Cedric Bosdonnat @ 2016-09-14 14:22 UTC (permalink / raw)
  To: xen-devel

Hi all,

I wanted to get libvirt's libxl driver have per-domain logs like all other drivers. After
looking at the libxl and XenToolLogger it seems I'll need to add the feature in either libxl
XenToolLogger. Would anyone already have an idea how best to add API to allow this?

Thanks for your help
--
Cedric

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-09-14 14:22 per-domain logging Cedric Bosdonnat
@ 2016-09-15 14:50 ` Wei Liu
  2016-09-15 15:11   ` Wei Liu
  0 siblings, 1 reply; 17+ messages in thread
From: Wei Liu @ 2016-09-15 14:50 UTC (permalink / raw)
  To: Cedric Bosdonnat; +Cc: Ian Jackson, Wei Liu, xen-devel

CC Ian who might have some ideas on this.

On Wed, Sep 14, 2016 at 04:22:24PM +0200, Cedric Bosdonnat wrote:
> Hi all,
> 
> I wanted to get libvirt's libxl driver have per-domain logs like all other drivers. After
> looking at the libxl and XenToolLogger it seems I'll need to add the feature in either libxl
> XenToolLogger. Would anyone already have an idea how best to add API to allow this?
> 
> Thanks for your help
> --
> Cedric
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> https://lists.xen.org/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-09-15 14:50 ` Wei Liu
@ 2016-09-15 15:11   ` Wei Liu
  2016-09-15 15:41     ` Cedric Bosdonnat
  0 siblings, 1 reply; 17+ messages in thread
From: Wei Liu @ 2016-09-15 15:11 UTC (permalink / raw)
  To: Cedric Bosdonnat; +Cc: Ian Jackson, Wei Liu, xen-devel

On Thu, Sep 15, 2016 at 03:50:25PM +0100, Wei Liu wrote:
> CC Ian who might have some ideas on this.
> 
> On Wed, Sep 14, 2016 at 04:22:24PM +0200, Cedric Bosdonnat wrote:
> > Hi all,
> > 
> > I wanted to get libvirt's libxl driver have per-domain logs like all other drivers. After
> > looking at the libxl and XenToolLogger it seems I'll need to add the feature in either libxl
> > XenToolLogger. Would anyone already have an idea how best to add API to allow this?
> > 

Can you briefly describe how other drivers do per-domain logging?

Basically one libxl_ctx corresponds to one logger. I guess you don't
want multiple libxl_ctx, right?

IIRC there is already logfile abstraction inside libvirt -- can you just
pass in a libvirt logfile fd and try to demux there?

Wei.

> > Thanks for your help
> > --
> > Cedric
> > 
> > _______________________________________________
> > Xen-devel mailing list
> > Xen-devel@lists.xen.org
> > https://lists.xen.org/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-09-15 15:11   ` Wei Liu
@ 2016-09-15 15:41     ` Cedric Bosdonnat
  2016-09-19 15:23       ` Ian Jackson
  0 siblings, 1 reply; 17+ messages in thread
From: Cedric Bosdonnat @ 2016-09-15 15:41 UTC (permalink / raw)
  To: Wei Liu; +Cc: Ian Jackson, xen-devel

On Thu, 2016-09-15 at 16:11 +0100, Wei Liu wrote:
> On Thu, Sep 15, 2016 at 03:50:25PM +0100, Wei Liu wrote:
> > 
> > CC Ian who might have some ideas on this.
> > 
> > On Wed, Sep 14, 2016 at 04:22:24PM +0200, Cedric Bosdonnat wrote:
> > > 
> > > Hi all,
> > > 
> > > I wanted to get libvirt's libxl driver have per-domain logs like all other drivers. After
> > > looking at the libxl and XenToolLogger it seems I'll need to add the feature in either libxl
> > > XenToolLogger. Would anyone already have an idea how best to add API to allow this?
> > > 
> 
> Can you briefly describe how other drivers do per-domain logging?

For example, the qemu driver is storing all logging of domain X in /var/log/libvirt/qemu/X.log file.
So far all libxl logs are going to /var/log/libvirt/libxl/libxl-driver.log.

> Basically one libxl_ctx corresponds to one logger. I guess you don't
> want multiple libxl_ctx, right?

Indeed, we have on libxl_ctx for the driver, not one per domain.

> IIRC there is already logfile abstraction inside libvirt -- can you just
> pass in a libvirt logfile fd and try to demux there?

The abstraction we have is something similar to the XenToolLogger, not
something abstracting the log files. Even if we had that, how could we demux since there is
no domain name in the libxl messages.

--
Cedric

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-09-15 15:41     ` Cedric Bosdonnat
@ 2016-09-19 15:23       ` Ian Jackson
  2016-09-19 16:53         ` Konrad Rzeszutek Wilk
  2016-10-04  9:14         ` Cedric Bosdonnat
  0 siblings, 2 replies; 17+ messages in thread
From: Ian Jackson @ 2016-09-19 15:23 UTC (permalink / raw)
  To: Cedric Bosdonnat; +Cc: Wei Liu, xen-devel

Cedric Bosdonnat writes ("Re: [Xen-devel] per-domain logging"):
> On Thu, 2016-09-15 at 16:11 +0100, Wei Liu wrote:
> > IIRC there is already logfile abstraction inside libvirt -- can you just
> > pass in a libvirt logfile fd and try to demux there?
> 
> The abstraction we have is something similar to the XenToolLogger,
> not something abstracting the log files. Even if we had that, how
> could we demux since there is no domain name in the libxl messages.

Right.

It's not trivial to change the xtl API because there is no
negotiation, just a vops structure.  I can think of a way to do it,
but do we want to make all xtl logger users (that is, all generators
of log messages) pass a domid ?

Do we want to extend this to other information ?  (Not sure _what_
other information.)

Alternatively, we could have libxl (and perhaps libxc) put the domid
in a standard format in the message, so it could be extracted ?

However we do it, we would have to add a domid to every LOG call in
libxl.

Ian.

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-09-19 15:23       ` Ian Jackson
@ 2016-09-19 16:53         ` Konrad Rzeszutek Wilk
  2016-10-04  9:14         ` Cedric Bosdonnat
  1 sibling, 0 replies; 17+ messages in thread
From: Konrad Rzeszutek Wilk @ 2016-09-19 16:53 UTC (permalink / raw)
  To: Ian Jackson; +Cc: Wei Liu, Cedric Bosdonnat, xen-devel

On Mon, Sep 19, 2016 at 04:23:06PM +0100, Ian Jackson wrote:
> Cedric Bosdonnat writes ("Re: [Xen-devel] per-domain logging"):
> > On Thu, 2016-09-15 at 16:11 +0100, Wei Liu wrote:
> > > IIRC there is already logfile abstraction inside libvirt -- can you just
> > > pass in a libvirt logfile fd and try to demux there?
> > 
> > The abstraction we have is something similar to the XenToolLogger,
> > not something abstracting the log files. Even if we had that, how
> > could we demux since there is no domain name in the libxl messages.
> 
> Right.
> 
> It's not trivial to change the xtl API because there is no
> negotiation, just a vops structure.  I can think of a way to do it,
> but do we want to make all xtl logger users (that is, all generators
> of log messages) pass a domid ?
> 
> Do we want to extend this to other information ?  (Not sure _what_
> other information.)

It would very much be useful for migration. So that you can
have mulitple logs.
> 
> Alternatively, we could have libxl (and perhaps libxc) put the domid
> in a standard format in the message, so it could be extracted ?
> 
> However we do it, we would have to add a domid to every LOG call in
> libxl.

Ugh. I am leaning towards the xtl API change (whatever that may be).
> 
> Ian.
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@lists.xen.org
> https://lists.xen.org/xen-devel

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-09-19 15:23       ` Ian Jackson
  2016-09-19 16:53         ` Konrad Rzeszutek Wilk
@ 2016-10-04  9:14         ` Cedric Bosdonnat
  2016-10-07 14:09           ` Wei Liu
  1 sibling, 1 reply; 17+ messages in thread
From: Cedric Bosdonnat @ 2016-10-04  9:14 UTC (permalink / raw)
  To: Ian Jackson; +Cc: Wei Liu, xen-devel

[-- Attachment #1: Type: text/plain, Size: 1797 bytes --]

Hi Ian and Wei,

On Mon, 2016-09-19 at 16:23 +0100, Ian Jackson wrote:
> Cedric Bosdonnat writes ("Re: [Xen-devel] per-domain logging"):
> > On Thu, 2016-09-15 at 16:11 +0100, Wei Liu wrote:
> > > IIRC there is already logfile abstraction inside libvirt -- can you just
> > > pass in a libvirt logfile fd and try to demux there?
> > 
> > 
> > The abstraction we have is something similar to the XenToolLogger,
> > not something abstracting the log files. Even if we had that, how
> > could we demux since there is no domain name in the libxl messages.

I came up with a commit on the libvirt side writing a custom xtl_logger
that demuxes the log messages. Here it is for the curious ones:

https://github.com/cbosdo/libvirt/commit/5e28dd67c52a49b11635167469a8b60dcb4e287c

This way, libvirt would put all log messages containing ': Domain %u:' in a
separate log file and all non-matching messages would go to the default
libxl-driver.log file.

> Right.
> 
> It's not trivial to change the xtl API because there is no
> negotiation, just a vops structure.  I can think of a way to do it,
> but do we want to make all xtl logger users (that is, all generators
> of log messages) pass a domid ?
> 
> Do we want to extend this to other information ?  (Not sure _what_
> other information.)
> 
> Alternatively, we could have libxl (and perhaps libxc) put the domid
> in a standard format in the message, so it could be extracted ?
> 
> However we do it, we would have to add a domid to every LOG call in
> libxl.

Attached is a partial attempt at this that I wrote to test my libvirt code.
How does that sound to you? Should I continue like this? Obviously I surely
missed a few log messages that could get a domid, but it seems that even libxl
has log messages that can't have a domid.

--
Cedric

[-- Attachment #2: 0001-libxl-format-the-domain-id-in-log-messages.patch --]
[-- Type: text/x-patch, Size: 62958 bytes --]

From b1bbd97c00891e7daff55fce80850531fae80100 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= <cedric.bosdonnat@free.fr>
Date: Tue, 4 Oct 2016 10:59:04 +0200
Subject: [PATCH] libxl: format the domain id in log messages

In order to allow consuming applications demux log messages by domain,
we need a constant and parsable way to display the domid in the libxl
logs.

This commit adds the domid where possible in the log and makes sure
it is shown in the "Domain %"PRIu32":" format.
---
 tools/libxl/libxl.c | 420 ++++++++++++++++++++++++++++------------------------
 1 file changed, 225 insertions(+), 195 deletions(-)

diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
index 6a50e49..8aa551b 100644
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -393,13 +393,13 @@ int libxl__domain_rename(libxl__gc *gc, uint32_t domid,
     if (!trans) {
         trans = our_trans = xs_transaction_start(ctx->xsh);
         if (!our_trans) {
-            LOGEV(ERROR, errno, "create xs transaction for domain (re)name");
+            LOGEV(ERROR, errno, "Domain %"PRIu32": create xs transaction for domain (re)name", domid);
             goto x_fail;
         }
     }
 
     if (!new_name) {
-        LOG(ERROR, "new domain name not specified");
+        LOG(ERROR, "Domain %"PRIu32": new domain name not specified", domid);
         rc = ERROR_INVAL;
         goto x_rc;
     }
@@ -411,14 +411,14 @@ int libxl__domain_rename(libxl__gc *gc, uint32_t domid,
         if (rc == ERROR_INVAL) {
             /* no such domain, good */
         } else if (rc != 0) {
-            LOG(ERROR, "unexpected error checking for existing domain");
+            LOG(ERROR, "Domain %"PRIu32":unexpected error checking for existing domain", domid);
             goto x_rc;
         } else if (domid_e == domid) {
             /* domain already has this name, ok (but we do still
              * need the rest of the code as we may need to check
              * old_name, for example). */
         } else {
-            LOG(ERROR, "domain with name \"%s\" already exists.", new_name);
+            LOG(ERROR, "Domain %"PRIu32": domain with name \"%s\" already exists.", domid, new_name);
             rc = ERROR_INVAL;
             goto x_rc;
         }
@@ -428,14 +428,14 @@ int libxl__domain_rename(libxl__gc *gc, uint32_t domid,
         got_old_name = xs_read(ctx->xsh, trans, name_path, &got_old_len);
         if (!got_old_name) {
             LOGEV(ERROR, errno,
-                  "check old name for domain %"PRIu32" allegedly named `%s'",
+                  "Domain %"PRIu32": check old name for domain allegedly named `%s'",
                   domid,
                   old_name);
             goto x_fail;
         }
         if (strcmp(old_name, got_old_name)) {
             LOG(ERROR,
-                "domain %"PRIu32" allegedly named "
+                "Domain %"PRIu32": allegedly named "
                 "`%s' is actually named `%s' - racing ?",
                 domid,
                 old_name,
@@ -448,10 +448,10 @@ int libxl__domain_rename(libxl__gc *gc, uint32_t domid,
     if (!xs_write(ctx->xsh, trans, name_path,
                   new_name, strlen(new_name))) {
         LOG(ERROR,
-            "failed to write new name `%s'"
-            " for domain %"PRIu32" previously named `%s'",
-            new_name,
+            "Domain %"PRIu32": failed to write new name `%s'"
+            " for domain previously named `%s'",
             domid,
+            new_name,
             old_name);
         goto x_fail;
     }
@@ -472,7 +472,7 @@ int libxl__domain_rename(libxl__gc *gc, uint32_t domid,
                                   stub_dm_new_name,
                                   trans);
         if (rc) {
-            LOGE(ERROR, "unable to rename stub-domain");
+            LOGE(ERROR, "Domain %"PRIu32": unable to rename stub-domain", domid);
             goto x_rc;
         }
     }
@@ -482,16 +482,16 @@ int libxl__domain_rename(libxl__gc *gc, uint32_t domid,
             trans = our_trans = 0;
             if (errno != EAGAIN) {
                 LOG(ERROR,
-                    "failed to commit new name `%s'"
-                    " for domain %"PRIu32" previously named `%s'",
-                    new_name,
+                    "Domain %"PRIu32": failed to commit new name `%s'"
+                    " for domain previously named `%s'",
                     domid,
+                    new_name,
                     old_name);
                 goto x_fail;
             }
             LOG(DEBUG,
-                "need to retry rename transaction"
-                " for domain %"PRIu32" (name_path=\"%s\", new_name=\"%s\")",
+                "Domain %"PRIu32": need to retry rename transaction"
+                " for domain (name_path=\"%s\", new_name=\"%s\")",
                 domid,
                 name_path,
                 new_name);
@@ -677,7 +677,7 @@ int libxl_domain_info(libxl_ctx *ctx, libxl_dominfo *info_r,
 
     ret = xc_domain_getinfolist(ctx->xch, domid, 1, &xcinfo);
     if (ret<0) {
-        LOGE(ERROR, "getting domain info list");
+        LOGE(ERROR, "Domain %"PRIu32": getting domain info list", domid);
         GC_FREE;
         return ERROR_FAIL;
     }
@@ -841,7 +841,7 @@ int libxl_domain_remus_start(libxl_ctx *ctx, libxl_domain_remus_info *info,
 
     /* The caller must set this defbool */
     if (libxl_defbool_is_default(info->colo)) {
-        LOG(ERROR, "colo mode must be enabled/disabled");
+        LOG(ERROR, "Domain %"PRIu32": colo mode must be enabled/disabled", domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -855,7 +855,9 @@ int libxl_domain_remus_start(libxl_ctx *ctx, libxl_domain_remus_info *info,
 
     if (libxl_defbool_val(info->colo) &&
         libxl_defbool_val(info->compression)) {
-            LOG(ERROR, "cannot use memory checkpoint compression in COLO mode");
+            LOG(ERROR, "Domain %"PRIu32": cannot use memory checkpoint "
+                       "compression in COLO mode",
+                       domid);
             rc = ERROR_FAIL;
             goto out;
     }
@@ -864,8 +866,9 @@ int libxl_domain_remus_start(libxl_ctx *ctx, libxl_domain_remus_info *info,
         (libxl_defbool_val(info->blackhole) ||
          !libxl_defbool_val(info->netbuf) ||
          !libxl_defbool_val(info->diskbuf))) {
-        LOG(ERROR, "Unsafe mode must be enabled to replicate to /dev/null,"
-                   "disable network buffering and disk replication");
+        LOG(ERROR, "Domain %"PRIu32": Unsafe mode must be enabled to replicate to /dev/null,"
+                   "disable network buffering and disk replication",
+                   domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -968,7 +971,7 @@ int libxl_domain_pause(libxl_ctx *ctx, uint32_t domid)
     GC_INIT(ctx);
     ret = xc_domain_pause(ctx->xch, domid);
     if (ret<0) {
-        LOGE(ERROR, "pausing domain %d", domid);
+        LOGE(ERROR, "Domain %"PRIu32": pausing domain", domid);
         GC_FREE;
         return ERROR_FAIL;
     }
@@ -985,7 +988,7 @@ int libxl_domain_core_dump(libxl_ctx *ctx, uint32_t domid,
 
     ret = xc_domain_dumpcore(ctx->xch, domid, filename);
     if (ret<0) {
-        LOGE(ERROR, "core dumping domain %d to %s", domid, filename);
+        LOGE(ERROR, "Domain %"PRIu32": core dumping domain to %s", domid, filename);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -1014,7 +1017,7 @@ int libxl_domain_unpause(libxl_ctx *ctx, uint32_t domid)
             LIBXL_DEVICE_MODEL_VERSION_NONE) {
             rc = libxl__domain_resume_device_model(gc, domid);
             if (rc < 0) {
-                LOG(ERROR, "failed to unpause device model for domain %u:%d",
+                LOG(ERROR, "Domain %"PRIu32": failed to unpause device model for domain:%d",
                     domid, rc);
                 goto out;
             }
@@ -1022,7 +1025,7 @@ int libxl_domain_unpause(libxl_ctx *ctx, uint32_t domid)
     }
     ret = xc_domain_unpause(ctx->xch, domid);
     if (ret<0) {
-        LOGE(ERROR, "unpausing domain %d", domid);
+        LOGE(ERROR, "Domain %"PRIu32": unpausing domain", domid);
         rc = ERROR_FAIL;
     }
  out:
@@ -1046,7 +1049,7 @@ int libxl__domain_pvcontrol_available(libxl__gc *gc, uint32_t domid)
 
     ret = xc_hvm_param_get(ctx->xch, domid, HVM_PARAM_CALLBACK_IRQ, &pvdriver);
     if (ret<0) {
-        LOGE(ERROR, "getting HVM callback IRQ");
+        LOGE(ERROR, "Domain %"PRIu32": getting HVM callback IRQ", domid);
         return ERROR_FAIL;
     }
     return !!pvdriver;
@@ -1129,7 +1132,7 @@ static void domain_death_occurred(libxl__egc *egc,
     EGC_GC;
     libxl_evgen_domain_death *const evg = *evg_upd;
 
-    LOG(DEBUG, "%s", why);
+    LOG(DEBUG, "Domain %"PRIu32": %s", evg->domid, why);
 
     libxl_evgen_domain_death *evg_next = LIBXL_TAILQ_NEXT(evg, entry);
     *evg_upd = evg_next;
@@ -1169,8 +1172,8 @@ static void domain_death_xswatch_callback(libxl__egc *egc, libxl__ev_xswatch *w,
         }
         gotend = &domaininfos[rc];
 
-        LOG(DEBUG, "[evg=%p:%"PRIu32"] nentries=%d rc=%d %ld..%ld",
-            evg, evg->domid, nentries, rc,
+        LOG(DEBUG, "Domain %"PRIu32": [evg=%p] nentries=%d rc=%d %ld..%ld",
+            evg->domid, evg, nentries, rc,
             rc>0 ? (long)domaininfos[0].domain : 0,
             rc>0 ? (long)domaininfos[rc-1].domain : 0);
 
@@ -1180,9 +1183,9 @@ static void domain_death_xswatch_callback(libxl__egc *egc, libxl__ev_xswatch *w,
                 goto all_reported;
             }
 
-            LOG(DEBUG, "[evg=%p:%"PRIu32"]"
+            LOG(DEBUG, "Domain %"PRIu32": [evg=%p]"
                 "   got=domaininfos[%d] got->domain=%ld",
-                evg, evg->domid, (int)(got - domaininfos),
+                evg->domid, evg, (int)(got - domaininfos),
                 got < gotend ? (long)got->domain : -1L);
 
             if (!rc) {
@@ -1208,8 +1211,8 @@ static void domain_death_xswatch_callback(libxl__egc *egc, libxl__ev_xswatch *w,
             }
 
             assert(evg->domid == got->domain);
-            LOG(DEBUG, " exists shutdown_reported=%d"" dominf.flags=%x",
-                evg->shutdown_reported, got->flags);
+            LOG(DEBUG, "Domain %"PRIu32": exists shutdown_reported=%d"" dominf.flags=%x",
+                evg->domid, evg->shutdown_reported, got->flags);
 
             if (got->flags & XEN_DOMINF_dying) {
                 domain_death_occurred(egc, &evg, "dying");
@@ -1459,7 +1462,7 @@ static void domain_destroy_cb(libxl__egc *egc, libxl__domain_destroy_state *dds,
     STATE_AO_GC(dds->ao);
 
     if (rc)
-        LOG(ERROR, "destruction of domain %u failed", dds->domid);
+        LOG(ERROR, "Domain %"PRIu32": destruction of domain failed", dds->domid);
 
     libxl__ao_complete(egc, ao, rc);
 }
@@ -1508,7 +1511,9 @@ static void stubdom_destroy_callback(libxl__egc *egc,
     const char *savefile;
 
     if (rc) {
-        LOG(ERROR, "unable to destroy stubdom with domid %u", dis->domid);
+        LOG(ERROR, "Domain %"PRIu32": unable to destroy stubdom with domid %u",
+            dds->domain.domid,
+            dis->domid);
         dds->rc = rc;
     }
 
@@ -1516,7 +1521,9 @@ static void stubdom_destroy_callback(libxl__egc *egc,
     savefile = libxl__device_model_savefile(gc, dis->domid);
     rc = libxl__remove_file(gc, savefile);
     if (rc) {
-        LOG(ERROR, "failed to remove device-model savefile %s", savefile);
+        LOG(ERROR, "Domain %"PRIu32": failed to remove device-model savefile %s",
+            dds->domain.domid,
+            savefile);
     }
 
     destroy_finish_check(egc, dds);
@@ -1530,7 +1537,7 @@ static void domain_destroy_callback(libxl__egc *egc,
     libxl__domain_destroy_state *dds = CONTAINER_OF(dis, *dds, domain);
 
     if (rc) {
-        LOG(ERROR, "unable to destroy guest with domid %u", dis->domid);
+        LOG(ERROR, "Domain %"PRIu32": unable to destroy guest", dis->domid);
         dds->rc = rc;
     }
 
@@ -1571,7 +1578,7 @@ void libxl__destroy_domid(libxl__egc *egc, libxl__destroy_domid_state *dis)
     case 0:
         break;
     case ERROR_DOMAIN_NOTFOUND:
-        LOG(ERROR, "non-existant domain %d", domid);
+        LOG(ERROR, "Domain %"PRIu32": non-existant domain", domid);
     default:
         goto out;
     }
@@ -1600,14 +1607,14 @@ void libxl__destroy_domid(libxl__egc *egc, libxl__destroy_domid_state *dis)
     }
 
     if (libxl__device_pci_destroy_all(gc, domid) < 0)
-        LOG(ERROR, "pci shutdown failed for domid %d", domid);
+        LOG(ERROR, "Domain %"PRIu32": pci shutdown failed", domid);
     rc = xc_domain_pause(ctx->xch, domid);
     if (rc < 0) {
-        LOGEV(ERROR, rc, "xc_domain_pause failed for %d", domid);
+        LOGEV(ERROR, rc, "Domain %"PRIu32": xc_domain_pause failed", domid);
     }
     if (dm_present) {
         if (libxl__destroy_device_model(gc, domid) < 0)
-            LOG(ERROR, "libxl__destroy_device_model failed for %d", domid);
+            LOG(ERROR, "Domain %"PRIu32": libxl__destroy_device_model failed", domid);
 
         libxl__qmp_cleanup(gc, domid);
     }
@@ -1643,15 +1650,15 @@ static void devices_destroy_cb(libxl__egc *egc,
     }
 
     if (rc < 0)
-        LOG(ERROR, "libxl__devices_destroy failed for %d", domid);
+        LOG(ERROR, "Domain %"PRIu32": libxl__devices_destroy failed", domid);
 
     vm_path = libxl__xs_read(gc, XBT_NULL, GCSPRINTF("%s/vm", dom_path));
     if (vm_path)
         if (!xs_rm(ctx->xsh, XBT_NULL, vm_path))
-            LOGE(ERROR, "xs_rm failed for %s", vm_path);
+            LOGE(ERROR, "Domain %"PRIu32": xs_rm failed for %s", domid, vm_path);
 
     if (!xs_rm(ctx->xsh, XBT_NULL, dom_path))
-        LOGE(ERROR, "xs_rm failed for %s", dom_path);
+        LOGE(ERROR, "Domain %"PRIu32": xs_rm failed for %s", domid, dom_path);
 
     xs_rm(ctx->xsh, XBT_NULL, libxl__xs_libxl_path(gc, domid));
     xs_rm(ctx->xsh, XBT_NULL, GCSPRINTF( "/local/domain/%d/hvmloader", domid));
@@ -1703,12 +1710,12 @@ static void devices_destroy_cb(libxl__egc *egc,
             _exit(errno);
         } else {
             LOGE(ERROR,
- "xc_domain_destroy failed for %d (with difficult errno value %d)",
+ "Domain %"PRIu32": xc_domain_destroy failed (with difficult errno value %d)",
                  domid, errno);
             _exit(-1);
         }
     }
-    LOG(DEBUG, "forked pid %ld for destroy of domain %d", (long)rc, domid);
+    LOG(DEBUG, "Domain %"PRIu32": forked pid %ld for destroy of domain", domid, (long)rc);
 
     return;
 
@@ -1728,7 +1735,7 @@ static void domain_destroy_domid_cb(libxl__egc *egc,
     if (status) {
         if (WIFEXITED(status) && WEXITSTATUS(status)<126) {
             LOGEV(ERROR, WEXITSTATUS(status),
-                  "xc_domain_destroy failed for %"PRIu32"", dis->domid);
+                  "Domain %"PRIu32": xc_domain_destroy failed", dis->domid);
         } else {
             libxl_report_child_exitstatus(CTX, XTL_ERROR,
                                           "async domain destroy", pid, status);
@@ -1821,13 +1828,14 @@ int libxl_console_get_tty(libxl_ctx *ctx, uint32_t domid, int cons_num,
 
     rc = libxl__console_tty_path(gc, domid, cons_num, type, &tty_path);
     if (rc) {
-        LOG(ERROR, "Failed to get tty path for domain %d\n", domid);
+        LOG(ERROR, "Domain %"PRIu32": Failed to get tty path\n", domid);
         goto out;
     }
 
     tty = libxl__xs_read(gc, XBT_NULL, tty_path);
     if (!tty || tty[0] == '\0') {
-       LOGE(ERROR,"unable to read console tty path `%s'",tty_path);
+       LOGE(ERROR,"Domain %"PRIu32": unable to read console tty path `%s'",
+            domid, tty_path);
        rc = ERROR_FAIL;
        goto out;
     }
@@ -1918,7 +1926,7 @@ int libxl_vncviewer_exec(libxl_ctx *ctx, uint32_t domid, int autopass)
                             GCSPRINTF(
                             "/local/domain/%d/console/vnc-port", domid));
     if (!vnc_port) {
-        LOG(ERROR, "Cannot get vnc-port of domain %d", domid);
+        LOG(ERROR, "Domain %"PRIu32": Cannot get vnc-port", domid);
         goto x_fail;
     }
 
@@ -1945,13 +1953,13 @@ int libxl_vncviewer_exec(libxl_ctx *ctx, uint32_t domid, int autopass)
         char tmpname[] = "/tmp/vncautopass.XXXXXX";
         autopass_fd = mkstemp(tmpname);
         if ( autopass_fd < 0 ) {
-            LOGE(ERROR, "mkstemp %s failed", tmpname);
+            LOGE(ERROR, "Domain %"PRIu32": mkstemp %s failed", domid, tmpname);
             goto x_fail;
         }
 
         if ( unlink(tmpname) ) {
             /* should never happen */
-            LOGE(ERROR, "unlink %s failed", tmpname);
+            LOGE(ERROR, "Domain %"PRIu32": unlink %s failed", domid, tmpname);
             goto x_fail;
         }
 
@@ -1960,7 +1968,7 @@ int libxl_vncviewer_exec(libxl_ctx *ctx, uint32_t domid, int autopass)
             goto x_fail;
 
         if ( lseek(autopass_fd, SEEK_SET, 0) ) {
-            LOGE(ERROR, "rewind %s (autopass) failed", tmpname);
+            LOGE(ERROR, "Domain %"PRIu32": rewind %s (autopass) failed", domid, tmpname);
             goto x_fail;
         }
 
@@ -2002,7 +2010,8 @@ void device_addrm_aocomplete(libxl__egc *egc, libxl__ao_device *aodev)
 
     if (aodev->rc) {
         if (aodev->dev) {
-            LOG(ERROR, "unable to %s %s with id %u",
+            LOG(ERROR, "Domain %"PRIu32": unable to %s %s with id %u",
+                        aodev->dev->domid,
                         libxl__device_action_to_string(aodev->action),
                         libxl__device_kind_to_string(aodev->dev->kind),
                         aodev->dev->devid);
@@ -2067,7 +2076,8 @@ int libxl__device_disk_setdefault(libxl__gc *gc, libxl_device_disk *disk,
         LIBXL_DEVICE_MODEL_VERSION_NONE) {
         if (!(disk->backend == LIBXL_DISK_BACKEND_QDISK ||
               disk->backend == LIBXL_DISK_BACKEND_UNKNOWN)) {
-            LOG(ERROR, "Backend for CD devices on HVM guests must be Qdisk");
+            LOG(ERROR, "Domain %"PRIu32": Backend for CD devices on HVM guests must be Qdisk",
+                domid);
             return ERROR_FAIL;
         }
         disk->backend = LIBXL_DISK_BACKEND_QDISK;
@@ -2085,8 +2095,8 @@ int libxl__device_from_disk(libxl__gc *gc, uint32_t domid,
 
     devid = libxl__device_disk_dev_number(disk->vdev, NULL, NULL);
     if (devid==-1) {
-        LOG(ERROR, "Invalid or unsupported"" virtual disk identifier %s",
-            disk->vdev);
+        LOG(ERROR, "Domain %"PRIu32": Invalid or unsupported"" virtual disk identifier %s",
+            domid, disk->vdev);
         return ERROR_INVAL;
     }
 
@@ -2104,7 +2114,8 @@ int libxl__device_from_disk(libxl__gc *gc, uint32_t domid,
             device->backend_kind = LIBXL__DEVICE_KIND_QDISK;
             break;
         default:
-            LOG(ERROR, "unrecognized disk backend type: %d", disk->backend);
+            LOG(ERROR, "Domain %"PRIu32": unrecognized disk backend type: %d",
+                domid, disk->backend);
             return ERROR_INVAL;
     }
 
@@ -2200,15 +2211,15 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid,
         GCNEW(device);
         rc = libxl__device_from_disk(gc, domid, disk, device);
         if (rc != 0) {
-            LOG(ERROR, "Invalid or unsupported"" virtual disk identifier %s",
-                disk->vdev);
+            LOG(ERROR, "Domain %"PRIu32": Invalid or unsupported"" virtual disk identifier %s",
+                domid, disk->vdev);
             goto out;
         }
 
         rc = libxl__device_exists(gc, t, device);
         if (rc < 0) goto out;
         if (rc == 1) {              /* already exists in xenstore */
-            LOG(ERROR, "device already exists in xenstore");
+            LOG(ERROR, "Domain %"PRIu32": device already exists in xenstore", domid);
             aodev->action = LIBXL__DEVICE_ACTION_ADD; /* for error message */
             rc = ERROR_DEVICE_EXISTS;
             goto out;
@@ -2234,7 +2245,8 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid,
                     dev = libxl__blktap_devpath(gc, disk->pdev_path,
                                                 disk->format);
                     if (!dev) {
-                        LOG(ERROR, "failed to get blktap devpath for %p",
+                        LOG(ERROR, "Domain %"PRIu32": failed to get blktap devpath for %p",
+                            domid,
                             disk->pdev_path);
                         rc = ERROR_FAIL;
                         goto out;
@@ -2270,8 +2282,8 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid,
                 assert(device->backend_kind == LIBXL__DEVICE_KIND_QDISK);
                 break;
             default:
-                LOG(ERROR, "unrecognized disk backend type: %d",
-                    disk->backend);
+                LOG(ERROR, "Domain %"PRIu32": unrecognized disk backend type: %d",
+                    domid, disk->backend);
                 rc = ERROR_INVAL;
                 goto out;
         }
@@ -2654,26 +2666,30 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
         goto out;
     }
     if (type != LIBXL_DOMAIN_TYPE_HVM) {
-        LOG(ERROR, "cdrom-insert requires an HVM domain");
+        LOG(ERROR, "Domain %"PRIu32": cdrom-insert requires an HVM domain",
+            domid);
         rc = ERROR_INVAL;
         goto out;
     }
 
     if (libxl_get_stubdom_id(ctx, domid) != 0) {
-        LOG(ERROR, "cdrom-insert doesn't work for stub domains");
+        LOG(ERROR, "Domain %"PRIu32": cdrom-insert doesn't work for stub domains",
+            domid);
         rc = ERROR_INVAL;
         goto out;
     }
 
     dm_ver = libxl__device_model_version_running(gc, domid);
     if (dm_ver == -1) {
-        LOG(ERROR, "cannot determine device model version");
+        LOG(ERROR, "Domain %"PRIu32": cannot determine device model version",
+            domid);
         rc = ERROR_FAIL;
         goto out;
     }
 
     if (dm_ver == LIBXL_DEVICE_MODEL_VERSION_NONE) {
-        LOG(ERROR, "Guests without a device model cannot use cd-insert");
+        LOG(ERROR, "Domain %"PRIu32": Guests without a device model cannot use cd-insert",
+            domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -2688,7 +2704,7 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
         }
     }
     if (i == num) {
-        LOG(ERROR, "Virtual device not found");
+        LOG(ERROR, "Domain %"PRIu32": Virtual device not found", domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -2748,8 +2764,8 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
         tmp = libxl__xs_read(gc, t, GCSPRINTF("%s/frontend", libxl_path));
         if (!tmp)
         {
-            LOG(ERROR, "Internal error: %s does not exist",
-                GCSPRINTF("%s/frontend", libxl_path));
+            LOG(ERROR, "Domain %"PRIu32": Internal error: %s does not exist",
+                domid, GCSPRINTF("%s/frontend", libxl_path));
             rc = ERROR_FAIL;
             goto out;
         }
@@ -2787,8 +2803,8 @@ int libxl_cdrom_insert(libxl_ctx *ctx, uint32_t domid, libxl_device_disk *disk,
         tmp = libxl__xs_read(gc, t, GCSPRINTF("%s/frontend", libxl_path));
         if (!tmp)
         {
-            LOG(ERROR, "Internal error: %s does not exist",
-                GCSPRINTF("%s/frontend", libxl_path));
+            LOG(ERROR, "Domain %"PRIu32": Internal error: %s does not exist",
+                domid, GCSPRINTF("%s/frontend", libxl_path));
             rc = ERROR_FAIL;
             goto out;
         }
@@ -2908,8 +2924,8 @@ char *libxl__device_disk_find_local_path(libxl__gc *gc,
         int rc;
 
         LOG(DEBUG,
-            "Run from a script; checking for physical-device-path (vdev %s)",
-            disk->vdev);
+            "Domain %"PRIu32": Run from a script; checking for physical-device-path (vdev %s)",
+            guest_domid, disk->vdev);
 
         rc = libxl__device_from_disk(gc, guest_domid, disk, &device);
         if (rc < 0)
@@ -2919,13 +2935,13 @@ char *libxl__device_disk_find_local_path(libxl__gc *gc,
 
         pdpath = libxl__sprintf(gc, "%s/physical-device-path", be_path);
 
-        LOG(DEBUG, "Attempting to read node %s", pdpath);
+        LOG(DEBUG, "Domain %"PRIu32": Attempting to read node %s", guest_domid, pdpath);
         path = libxl__xs_read(gc, XBT_NULL, pdpath);
 
         if (path)
-            LOG(DEBUG, "Accessing cooked block device %s", path);
+            LOG(DEBUG, "Domain %"PRIu32": Accessing cooked block device %s", guest_domid, path);
         else
-            LOG(DEBUG, "No physical-device-path, can't access locally.");
+            LOG(DEBUG, "Domain %"PRIu32": No physical-device-path, can't access locally.", guest_domid);
 
         goto out;
     }
@@ -3066,7 +3082,8 @@ static void local_device_detach_cb(libxl__egc *egc, libxl__ao_device *aodev)
     int rc;
 
     if (aodev->rc) {
-        LOGE(ERROR, "unable to %s %s with id %u",
+        LOGE(ERROR, "Domain %"PRIu32": unable to %s %s with id %u",
+                    aodev->dev->domid,
                     libxl__device_action_to_string(aodev->action),
                     libxl__device_kind_to_string(aodev->dev->kind),
                     aodev->dev->devid);
@@ -3099,7 +3116,7 @@ int libxl__device_console_add(libxl__gc *gc, uint32_t domid,
         goto out;
     }
     if (!console->devid && (console->name || console->path)) {
-        LOG(ERROR, "Primary console has invalid configuration");
+        LOG(ERROR, "Domain %"PRIu32": Primary console has invalid configuration", domid);
         rc = ERROR_INVAL;
         goto out;
     }
@@ -3337,7 +3354,7 @@ libxl_device_channel *libxl_device_channel_list(libxl_ctx *ctx,
     return channels;
 
 out_err:
-    LOG(ERROR, "Unable to list channels");
+    LOG(ERROR, "Domain %"PRIu32": Unable to list channels", domid);
     while (*num) {
         (*num)--;
         libxl_device_channel_dispose(&channels[*num]);
@@ -3449,7 +3466,7 @@ int libxl_device_vkb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vkb *vkb,
 
     rc = libxl__device_vkb_add(gc, domid, vkb);
     if (rc) {
-        LOG(ERROR, "unable to add vkb device");
+        LOG(ERROR, "Domain %"PRIu32": unable to add vkb device", domid);
         goto out;
     }
 
@@ -3549,7 +3566,7 @@ int libxl_device_vfb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vfb *vfb,
 
     rc = libxl__device_vfb_add(gc, domid, vfb);
     if (rc) {
-        LOG(ERROR, "unable to add vfb device");
+        LOG(ERROR, "Domain %"PRIu32": unable to add vfb device", domid);
         goto out;
     }
 
@@ -3730,7 +3747,7 @@ static void qdisk_spawn_outcome(libxl__egc *egc, libxl__dm_spawn_state *dmss,
 {
     STATE_AO_GC(dmss->spawn.ao);
 
-    LOG(DEBUG, "qdisk backend spawn for domain %u %s", dmss->guest_domid,
+    LOG(DEBUG, "Domain %"PRIu32": qdisk backend spawn %s", dmss->guest_domid,
                rc ? "failed" : "succeed");
 
     libxl__nested_ao_free(dmss->spawn.ao);
@@ -3884,7 +3901,7 @@ static void backend_watch_callback(libxl__egc *egc, libxl__ev_xswatch *watch,
         dguest->domid = dev->domid;
         LIBXL_SLIST_INIT(&dguest->devices);
         LIBXL_SLIST_INSERT_HEAD(&ddomain->guests, dguest, next);
-        LOG(DEBUG, "added domain %u to the list of active guests",
+        LOG(DEBUG, "Domain %"PRIu32": added domain to the list of active guests",
                    dguest->domid);
     }
     ddev = search_for_device(dguest, dev);
@@ -3902,7 +3919,8 @@ static void backend_watch_callback(libxl__egc *egc, libxl__ev_xswatch *watch,
         ddev = libxl__zalloc(NOGC, sizeof(*ddev));
         ddev->dev = dev;
         LIBXL_SLIST_INSERT_HEAD(&dguest->devices, ddev, next);
-        LOG(DEBUG, "added device %s to the list of active devices", path);
+        LOG(DEBUG, "Domain %"PRIu32": added device %s to the list of active devices",
+            dev->domid, path);
         rc = add_device(egc, nested_ao, dguest, ddev);
         if (rc > 0)
             free_ao = true;
@@ -3916,7 +3934,8 @@ static void backend_watch_callback(libxl__egc *egc, libxl__ev_xswatch *watch,
          */
         LIBXL_SLIST_REMOVE(&dguest->devices, ddev, libxl__ddomain_device,
                            next);
-        LOG(DEBUG, "removed device %s from the list of active devices", path);
+        LOG(DEBUG, "Domain %"PRIu32": removed device %s from the list of active devices",
+            dev->domid, path);
         rc = remove_device(egc, nested_ao, dguest, ddev);
         if (rc > 0)
             free_ao = true;
@@ -3927,7 +3946,7 @@ static void backend_watch_callback(libxl__egc *egc, libxl__ev_xswatch *watch,
         if (num_devs == 0) {
             LIBXL_SLIST_REMOVE(&ddomain->guests, dguest, libxl__ddomain_guest,
                                next);
-            LOG(DEBUG, "removed domain %u from the list of active guests",
+            LOG(DEBUG, "Domain %"PRIu32": removed domain from the list of active guests",
                        dguest->domid);
             /* Clear any leftovers in libxl/<domid> */
             libxl__xs_rm_checked(gc, XBT_NULL,
@@ -4037,24 +4056,27 @@ int libxl_domain_setmaxmem(libxl_ctx *ctx, uint32_t domid, uint64_t max_memkb)
 
     mem = libxl__xs_read(gc, XBT_NULL, GCSPRINTF("%s/memory/target", dompath));
     if (!mem) {
-        LOGE(ERROR, "cannot get memory info from %s/memory/target", dompath);
+        LOGE(ERROR, "Domain %"PRIu32": cannot get memory info from %s/memory/target",
+             domid, dompath);
         goto out;
     }
     memorykb = strtoull(mem, &endptr, 10);
     if (*endptr != '\0') {
-        LOGE(ERROR, "invalid memory %s from %s/memory/target\n", mem, dompath);
+        LOGE(ERROR, "Domain %"PRIu32": invalid memory %s from %s/memory/target\n",
+             domid, mem, dompath);
         goto out;
     }
 
     if (max_memkb < memorykb) {
         LOGE(ERROR,
-             "memory_static_max must be greater than or or equal to memory_dynamic_max");
+             "Domain %"PRIu32": memory_static_max must be greater than or or equal to memory_dynamic_max",
+             domid);
         goto out;
     }
     rc = xc_domain_setmaxmem(ctx->xch, domid, max_memkb + LIBXL_MAXMEM_CONSTANT);
     if (rc != 0) {
         LOGE(ERROR,
-             "xc_domain_setmaxmem domid=%d memkb=%"PRIu64" failed ""rc=%d\n",
+             "Domain %"PRIu32": xc_domain_setmaxmem memkb=%"PRIu64" failed ""rc=%d\n",
              domid, max_memkb + LIBXL_MAXMEM_CONSTANT, rc);
         goto out;
     }
@@ -4094,7 +4116,7 @@ retry_transaction:
     if (target) {
         *target_memkb = strtoull(target, &endptr, 10);
         if (*endptr != '\0') {
-            LOGE(ERROR, "invalid memory target %s from %s\n", target,
+            LOGE(ERROR, "Domain %"PRIu32": invalid memory target %s from %s\n", 0, target,
                  target_path);
             rc = ERROR_FAIL;
             goto out;
@@ -4104,7 +4126,8 @@ retry_transaction:
     if (staticmax) {
         *max_memkb = strtoull(staticmax, &endptr, 10);
         if (*endptr != '\0') {
-            LOGE(ERROR, "invalid memory static-max %s from %s\n", staticmax,
+            LOGE(ERROR, "Domain %"PRIu32": invalid memory static-max %s from %s\n", 0,
+                 staticmax,
                  max_path);
             rc = ERROR_FAIL;
             goto out;
@@ -4183,16 +4206,16 @@ retry_transaction:
         if (lrc < 0) { rc = ERROR_FAIL; goto out_no_transaction; }
         goto retry_transaction;
     } else if (!target) {
-        LOGE(ERROR, "cannot get target memory info from %s/memory/target",
-             dompath);
+        LOGE(ERROR, "Domain %"PRIu32": cannot get target memory info from %s/memory/target",
+             domid, dompath);
         abort_transaction = 1;
         rc = ERROR_FAIL;
         goto out;
     } else {
         current_target_memkb = strtoull(target, &endptr, 10);
         if (*endptr != '\0') {
-            LOGE(ERROR, "invalid memory target %s from %s/memory/target\n",
-                 target, dompath);
+            LOGE(ERROR, "Domain %"PRIu32": invalid memory target %s from %s/memory/target\n",
+                 domid, target, dompath);
             abort_transaction = 1;
             rc = ERROR_FAIL;
             goto out;
@@ -4200,16 +4223,16 @@ retry_transaction:
     }
     memmax = libxl__xs_read(gc, t, GCSPRINTF("%s/memory/static-max", dompath));
     if (!memmax) {
-        LOGE(ERROR, "cannot get memory info from %s/memory/static-max",
-             dompath);
+        LOGE(ERROR, "Domain %"PRIu32": cannot get memory info from %s/memory/static-max",
+             domid, dompath);
         abort_transaction = 1;
         rc = ERROR_FAIL;
         goto out;
     }
     memorykb = strtoull(memmax, &endptr, 10);
     if (*endptr != '\0') {
-        LOGE(ERROR, "invalid max memory %s from %s/memory/static-max\n",
-             memmax, dompath);
+        LOGE(ERROR, "Domain %"PRIu32": invalid max memory %s from %s/memory/static-max\n",
+             domid, memmax, dompath);
         abort_transaction = 1;
         rc = ERROR_FAIL;
         goto out;
@@ -4228,8 +4251,8 @@ retry_transaction:
         new_target_memkb = target_memkb - videoram;
     if (new_target_memkb > memorykb) {
         LOG(ERROR,
-            "memory_dynamic_max must be less than or equal to"
-            " memory_static_max\n");
+            "Domain %"PRIu32": memory_dynamic_max must be less than or equal to"
+            " memory_static_max\n", domid);
         abort_transaction = 1;
         rc = ERROR_INVAL;
         goto out;
@@ -4237,8 +4260,8 @@ retry_transaction:
 
     if (!domid && new_target_memkb < LIBXL_MIN_DOM0_MEM) {
         LOG(ERROR,
-            "new target %"PRIu64" for dom0 is below the minimum threshold",
-            new_target_memkb);
+            "Domain %"PRIu32": new target %"PRIu64" for dom0 is below the minimum threshold",
+            domid, new_target_memkb);
         abort_transaction = 1;
         rc = ERROR_INVAL;
         goto out;
@@ -4250,7 +4273,7 @@ retry_transaction:
                 LIBXL_MAXMEM_CONSTANT);
         if (r != 0) {
             LOGE(ERROR,
-                 "xc_domain_setmaxmem domid=%u memkb=%"PRIu64" failed ""rc=%d\n",
+                 "Domain %"PRIu32": xc_domain_setmaxmem memkb=%"PRIu64" failed ""rc=%d\n",
                  domid,
                  memorykb + LIBXL_MAXMEM_CONSTANT,
                  r);
@@ -4264,7 +4287,7 @@ retry_transaction:
             (new_target_memkb + LIBXL_MAXMEM_CONSTANT) / 4, NULL, NULL, NULL);
     if (r != 0) {
         LOGE(ERROR,
-             "xc_domain_set_pod_target domid=%d, memkb=%"PRIu64" failed rc=%d\n",
+             "Domain %"PRIu32": xc_domain_set_pod_target, memkb=%"PRIu64" failed rc=%d\n",
              domid,
              new_target_memkb / 4,
              r);
@@ -4319,25 +4342,26 @@ static int libxl__get_memory_target(libxl__gc *gc, uint32_t domid,
         if (rc < 0)
             goto out;
     } else if (!target) {
-        LOGE(ERROR, "cannot get target memory info from %s/memory/target",
-             dompath);
+        LOGE(ERROR, "Domain %"PRIu32": cannot get target memory info from %s/memory/target",
+             domid, dompath);
         goto out;
     } else if (!static_max) {
         LOGE(ERROR,
-             "cannot get target memory info from %s/memory/static-max",
-             dompath);
+             "Domain %"PRIu32": cannot get target memory info from %s/memory/static-max",
+             domid, dompath);
         goto out;
     } else {
         target_memkb = strtoull(target, &endptr, 10);
         if (*endptr != '\0') {
-            LOGE(ERROR, "invalid memory target %s from %s/memory/target\n",
-                 target, dompath);
+            LOGE(ERROR, "Domain %"PRIu32": invalid memory target %s from %s/memory/target\n",
+                 domid, target, dompath);
             goto out;
         }
         max_memkb = strtoull(static_max, &endptr, 10);
         if (*endptr != '\0') {
             LOGE(ERROR,
-                 "invalid memory target %s from %s/memory/static-max\n",
+                 "Domain %"PRIu32": invalid memory target %s from %s/memory/static-max\n",
+                 domid,
                  static_max,
                  dompath);
             goto out;
@@ -4831,7 +4855,7 @@ libxl_vcpuinfo *libxl_list_vcpu(libxl_ctx *ctx, uint32_t domid,
     xc_vcpuinfo_t vcpuinfo;
 
     if (xc_domain_getinfolist(ctx->xch, domid, 1, &domaininfo) != 1) {
-        LOGE(ERROR, "getting infolist");
+        LOGE(ERROR, "Domain %"PRIu32": getting infolist", domid);
         GC_FREE;
         return NULL;
     }
@@ -4855,14 +4879,14 @@ libxl_vcpuinfo *libxl_list_vcpu(libxl_ctx *ctx, uint32_t domid,
         if (libxl_cpu_bitmap_alloc(ctx, &ptr->cpumap_soft, 0))
             goto err;
         if (xc_vcpu_getinfo(ctx->xch, domid, *nr_vcpus_out, &vcpuinfo) == -1) {
-            LOGE(ERROR, "getting vcpu info");
+            LOGE(ERROR, "Domain %"PRIu32": getting vcpu info", domid);
             goto err;
         }
 
         if (xc_vcpu_getaffinity(ctx->xch, domid, *nr_vcpus_out,
                                 ptr->cpumap.map, ptr->cpumap_soft.map,
                                 XEN_VCPUAFFINITY_SOFT|XEN_VCPUAFFINITY_HARD) == -1) {
-            LOGE(ERROR, "getting vcpu affinity");
+            LOGE(ERROR, "Domain %"PRIu32": getting vcpu affinity", domid);
             goto err;
         }
         ptr->vcpuid = *nr_vcpus_out;
@@ -4926,7 +4950,7 @@ static int libxl__set_vcpuaffinity(libxl_ctx *ctx, uint32_t domid,
                             cpumap_hard ? hard.map : NULL,
                             cpumap_soft ? soft.map : NULL,
                             flags)) {
-        LOGE(ERROR, "setting vcpu affinity");
+        LOGE(ERROR, "Domain %"PRIu32": setting vcpu affinity", domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -4938,20 +4962,20 @@ static int libxl__set_vcpuaffinity(libxl_ctx *ctx, uint32_t domid,
      */
     if (cpumap_hard &&
         !libxl_bitmap_equal(cpumap_hard, &hard, 0))
-        LOG(DEBUG, "New hard affinity for vcpu %d has unreachable cpus",
-        vcpuid);
+        LOG(DEBUG, "Domain %"PRIu32": New hard affinity for vcpu %d has unreachable cpus",
+            domid, vcpuid);
     /*
      * Soft affinity can both be different from what asked and empty. Check
      * for (and report) both.
      */
     if (cpumap_soft) {
         if (!libxl_bitmap_equal(cpumap_soft, &soft, 0))
-            LOG(DEBUG, "New soft affinity for vcpu %d has unreachable cpus",
-                vcpuid);
+            LOG(DEBUG, "Domain %"PRIu32": New soft affinity for vcpu %d has unreachable cpus",
+                domid, vcpuid);
         if (libxl_bitmap_is_empty(&soft))
-            LOG(WARN, "all cpus in soft affinity of vcpu %d are unreachable."
+            LOG(WARN, "Domain %"PRIu32": all cpus in soft affinity of vcpu %d are unreachable."
                 " Only hard affinity will be considered for scheduling",
-                vcpuid);
+                domid, vcpuid);
     }
 
     rc = 0;
@@ -4989,7 +5013,7 @@ int libxl_set_vcpuaffinity_all(libxl_ctx *ctx, uint32_t domid,
 
     for (i = 0; i < max_vcpus; i++) {
         if (libxl_set_vcpuaffinity(ctx, domid, i, cpumap_hard, cpumap_soft)) {
-            LOG(WARN, "failed to set affinity for %d", i);
+            LOG(WARN, "Domain %"PRIu32": failed to set affinity for %d", domid, i);
             rc = ERROR_FAIL;
         }
     }
@@ -5003,7 +5027,7 @@ int libxl_domain_set_nodeaffinity(libxl_ctx *ctx, uint32_t domid,
 {
     GC_INIT(ctx);
     if (xc_domain_node_setaffinity(ctx->xch, domid, nodemap->map)) {
-        LOGE(ERROR, "setting node affinity");
+        LOGE(ERROR, "Domain %"PRIu32": setting node affinity", domid);
         GC_FREE;
         return ERROR_FAIL;
     }
@@ -5016,7 +5040,7 @@ int libxl_domain_get_nodeaffinity(libxl_ctx *ctx, uint32_t domid,
 {
     GC_INIT(ctx);
     if (xc_domain_node_getaffinity(ctx->xch, domid, nodemap->map)) {
-        LOGE(ERROR, "getting node affinity");
+        LOGE(ERROR, "Domain %"PRIu32": getting node affinity", domid);
         GC_FREE;
         return ERROR_FAIL;
     }
@@ -5064,7 +5088,7 @@ static int libxl__set_vcpuonline_qmp(libxl__gc *gc, uint32_t domid,
     libxl_bitmap_set_none(&current_map);
     rc = libxl__qmp_query_cpus(gc, domid, &current_map);
     if (rc) {
-        LOG(ERROR, "failed to query cpus for domain %d", domid);
+        LOG(ERROR, "Domain %"PRIu32": failed to query cpus", domid);
         goto out;
     }
 
@@ -5076,7 +5100,7 @@ static int libxl__set_vcpuonline_qmp(libxl__gc *gc, uint32_t domid,
     libxl_for_each_set_bit(i, final_map) {
         rc = libxl__qmp_cpu_add(gc, domid, i);
         if (rc) {
-            LOG(ERROR, "failed to add cpu %d to domain %d", i, domid);
+            LOG(ERROR, "Domain %"PRIu32": failed to add cpu %d", domid, i);
             goto out;
         }
     }
@@ -5098,15 +5122,15 @@ int libxl_set_vcpuonline(libxl_ctx *ctx, uint32_t domid, libxl_bitmap *cpumap)
 
     rc = libxl_domain_info(CTX, &info, domid);
     if (rc < 0) {
-        LOGE(ERROR, "getting domain info list");
+        LOGE(ERROR, "Domain %"PRIu32": getting domain info list", domid);
         goto out;
     }
 
     maxcpus = libxl_bitmap_count_set(cpumap);
     if (maxcpus > info.vcpu_max_id + 1)
     {
-        LOGE(ERROR, "Requested %d VCPUs, however maxcpus is %d!",
-             maxcpus, info.vcpu_max_id + 1);
+        LOGE(ERROR, "Domain %"PRIu32": Requested %d VCPUs, however maxcpus is %d!",
+             domid, maxcpus, info.vcpu_max_id + 1);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -5167,7 +5191,7 @@ static int sched_credit_domain_get(libxl__gc *gc, uint32_t domid,
 
     rc = xc_sched_credit_domain_get(CTX->xch, domid, &sdom);
     if (rc != 0) {
-        LOGE(ERROR, "getting domain sched credit");
+        LOGE(ERROR, "Domain %"PRIu32": getting domain sched credit", domid);
         return ERROR_FAIL;
     }
 
@@ -5188,7 +5212,7 @@ static int sched_credit_domain_set(libxl__gc *gc, uint32_t domid,
 
     rc = xc_domain_getinfolist(CTX->xch, domid, 1, &domaininfo);
     if (rc < 0) {
-        LOGE(ERROR, "getting domain info list");
+        LOGE(ERROR, "Domain %"PRIu32": getting domain info list", domid);
         return ERROR_FAIL;
     }
     if (rc != 1 || domaininfo.domain != domid)
@@ -5196,14 +5220,14 @@ static int sched_credit_domain_set(libxl__gc *gc, uint32_t domid,
 
     rc = xc_sched_credit_domain_get(CTX->xch, domid, &sdom);
     if (rc != 0) {
-        LOGE(ERROR, "getting domain sched credit");
+        LOGE(ERROR, "Domain %"PRIu32": getting domain sched credit", domid);
         return ERROR_FAIL;
     }
 
     if (scinfo->weight != LIBXL_DOMAIN_SCHED_PARAM_WEIGHT_DEFAULT) {
         if (scinfo->weight < 1 || scinfo->weight > 65535) {
-            LOG(ERROR, "Cpu weight out of range, "
-                "valid values are within range from 1 to 65535");
+            LOG(ERROR, "Domain %"PRIu32": Cpu weight out of range, "
+                "valid values are within range from 1 to 65535", domid);
             return ERROR_INVAL;
         }
         sdom.weight = scinfo->weight;
@@ -5212,9 +5236,9 @@ static int sched_credit_domain_set(libxl__gc *gc, uint32_t domid,
     if (scinfo->cap != LIBXL_DOMAIN_SCHED_PARAM_CAP_DEFAULT) {
         if (scinfo->cap < 0
             || scinfo->cap > (domaininfo.max_vcpu_id + 1) * 100) {
-            LOG(ERROR, "Cpu cap out of range, "
+            LOG(ERROR, "Domain %"PRIu32": Cpu cap out of range, "
                 "valid range is from 0 to %d for specified number of vcpus",
-                ((domaininfo.max_vcpu_id + 1) * 100));
+                domid, ((domaininfo.max_vcpu_id + 1) * 100));
             return ERROR_INVAL;
         }
         sdom.cap = scinfo->cap;
@@ -5222,7 +5246,7 @@ static int sched_credit_domain_set(libxl__gc *gc, uint32_t domid,
 
     rc = xc_sched_credit_domain_set(CTX->xch, domid, &sdom);
     if ( rc < 0 ) {
-        LOGE(ERROR, "setting domain sched credit");
+        LOGE(ERROR, "Domain %"PRIu32": setting domain sched credit", domid);
         return ERROR_FAIL;
     }
 
@@ -5302,7 +5326,7 @@ static int sched_credit2_domain_get(libxl__gc *gc, uint32_t domid,
 
     rc = xc_sched_credit2_domain_get(CTX->xch, domid, &sdom);
     if (rc != 0) {
-        LOGE(ERROR, "getting domain sched credit2");
+        LOGE(ERROR, "Domain %"PRIu32": getting domain sched credit2", domid);
         return ERROR_FAIL;
     }
 
@@ -5321,14 +5345,14 @@ static int sched_credit2_domain_set(libxl__gc *gc, uint32_t domid,
 
     rc = xc_sched_credit2_domain_get(CTX->xch, domid, &sdom);
     if (rc != 0) {
-        LOGE(ERROR, "getting domain sched credit2");
+        LOGE(ERROR, "Domain %"PRIu32": getting domain sched credit2", domid);
         return ERROR_FAIL;
     }
 
     if (scinfo->weight != LIBXL_DOMAIN_SCHED_PARAM_WEIGHT_DEFAULT) {
         if (scinfo->weight < 1 || scinfo->weight > 65535) {
-            LOG(ERROR, "Cpu weight out of range, "
-                       "valid values are within range from 1 to 65535");
+            LOG(ERROR, "Domain %"PRIu32": Cpu weight out of range, "
+                       "valid values are within range from 1 to 65535", domid);
             return ERROR_INVAL;
         }
         sdom.weight = scinfo->weight;
@@ -5336,7 +5360,7 @@ static int sched_credit2_domain_set(libxl__gc *gc, uint32_t domid,
 
     rc = xc_sched_credit2_domain_set(CTX->xch, domid, &sdom);
     if ( rc < 0 ) {
-        LOGE(ERROR, "setting domain sched credit2");
+        LOGE(ERROR, "Domain %"PRIu32": setting domain sched credit2", domid);
         return ERROR_FAIL;
     }
 
@@ -5381,7 +5405,7 @@ static int sched_rtds_vcpu_get(libxl__gc *gc, uint32_t domid,
 
     r = xc_domain_getinfo(CTX->xch, domid, 1, &info);
     if (r < 0) {
-        LOGE(ERROR, "getting domain info");
+        LOGE(ERROR, "Domain %"PRIu32": getting domain info", domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -5395,9 +5419,9 @@ static int sched_rtds_vcpu_get(libxl__gc *gc, uint32_t domid,
         for (i = 0; i < num_vcpus; i++) {
             if (scinfo->vcpus[i].vcpuid < 0 ||
                 scinfo->vcpus[i].vcpuid > info.max_vcpu_id) {
-                LOG(ERROR, "VCPU index is out of range, "
+                LOG(ERROR, "Domain %"PRIu32": VCPU index is out of range, "
                            "valid values are within range from 0 to %d",
-                           info.max_vcpu_id);
+                           domid, info.max_vcpu_id);
                 rc = ERROR_INVAL;
                 goto out;
             }
@@ -5407,7 +5431,7 @@ static int sched_rtds_vcpu_get(libxl__gc *gc, uint32_t domid,
 
     r = xc_sched_rtds_vcpu_get(CTX->xch, domid, vcpus, num_vcpus);
     if (r != 0) {
-        LOGE(ERROR, "getting vcpu sched rtds");
+        LOGE(ERROR, "Domain %"PRIu32": getting vcpu sched rtds", domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -5433,7 +5457,7 @@ static int sched_rtds_vcpu_get_all(libxl__gc *gc, uint32_t domid,
 
     r = xc_domain_getinfo(CTX->xch, domid, 1, &info);
     if (r < 0) {
-        LOGE(ERROR, "getting domain info");
+        LOGE(ERROR, "Domain %"PRIu32": getting domain info", domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -5450,7 +5474,7 @@ static int sched_rtds_vcpu_get_all(libxl__gc *gc, uint32_t domid,
 
     r = xc_sched_rtds_vcpu_get(CTX->xch, domid, vcpus, num_vcpus);
     if (r != 0) {
-        LOGE(ERROR, "getting vcpu sched rtds");
+        LOGE(ERROR, "Domain %"PRIu32": getting vcpu sched rtds", domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -5481,7 +5505,7 @@ static int sched_rtds_vcpu_set(libxl__gc *gc, uint32_t domid,
 
     r = xc_domain_getinfo(CTX->xch, domid, 1, &info);
     if (r < 0) {
-        LOGE(ERROR, "getting domain info");
+        LOGE(ERROR, "Domain %"PRIu32": getting domain info", domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -5494,8 +5518,8 @@ static int sched_rtds_vcpu_set(libxl__gc *gc, uint32_t domid,
     for (i = 0; i < scinfo->num_vcpus; i++) {
         if (scinfo->vcpus[i].vcpuid < 0 ||
             scinfo->vcpus[i].vcpuid > max_vcpuid) {
-            LOG(ERROR, "Invalid VCPU %d: valid range is [0, %d]",
-                       scinfo->vcpus[i].vcpuid, max_vcpuid);
+            LOG(ERROR, "Domain %"PRIu32": Invalid VCPU %d: valid range is [0, %d]",
+                       domid, scinfo->vcpus[i].vcpuid, max_vcpuid);
             rc = ERROR_INVAL;
             goto out;
         }
@@ -5516,7 +5540,7 @@ static int sched_rtds_vcpu_set(libxl__gc *gc, uint32_t domid,
     r = xc_sched_rtds_vcpu_set(CTX->xch, domid,
                                vcpus, scinfo->num_vcpus);
     if (r != 0) {
-        LOGE(ERROR, "setting vcpu sched rtds");
+        LOGE(ERROR, "Domain %"PRIu32": setting vcpu sched rtds", domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -5538,7 +5562,7 @@ static int sched_rtds_vcpu_set_all(libxl__gc *gc, uint32_t domid,
 
     r = xc_domain_getinfo(CTX->xch, domid, 1, &info);
     if (r < 0) {
-        LOGE(ERROR, "getting domain info");
+        LOGE(ERROR, "Domain %"PRIu32": getting domain info", domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -5564,7 +5588,7 @@ static int sched_rtds_vcpu_set_all(libxl__gc *gc, uint32_t domid,
     r = xc_sched_rtds_vcpu_set(CTX->xch, domid,
                                vcpus, num_vcpus);
     if (r != 0) {
-        LOGE(ERROR, "setting vcpu sched rtds");
+        LOGE(ERROR, "Domain %"PRIu32": setting vcpu sched rtds", domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -5581,7 +5605,7 @@ static int sched_rtds_domain_get(libxl__gc *gc, uint32_t domid,
 
     rc = xc_sched_rtds_domain_get(CTX->xch, domid, &sdom);
     if (rc != 0) {
-        LOGE(ERROR, "getting domain sched rtds");
+        LOGE(ERROR, "Domain %"PRIu32": getting domain sched rtds", domid);
         return ERROR_FAIL;
     }
 
@@ -5602,7 +5626,7 @@ static int sched_rtds_domain_set(libxl__gc *gc, uint32_t domid,
 
     rc = xc_sched_rtds_domain_get(CTX->xch, domid, &sdom);
     if (rc != 0) {
-        LOGE(ERROR, "getting domain sched rtds");
+        LOGE(ERROR, "Domain %"PRIu32": getting domain sched rtds", domid);
         return ERROR_FAIL;
     }
     if (scinfo->period != LIBXL_DOMAIN_SCHED_PARAM_PERIOD_DEFAULT)
@@ -5614,7 +5638,7 @@ static int sched_rtds_domain_set(libxl__gc *gc, uint32_t domid,
 
     rc = xc_sched_rtds_domain_set(CTX->xch, domid, &sdom);
     if (rc < 0) {
-        LOGE(ERROR, "setting domain sched rtds");
+        LOGE(ERROR, "Domain %"PRIu32": setting domain sched rtds", domid);
         return ERROR_FAIL;
     }
 
@@ -5633,7 +5657,7 @@ int libxl_domain_sched_params_set(libxl_ctx *ctx, uint32_t domid,
 
     switch (sched) {
     case LIBXL_SCHEDULER_SEDF:
-        LOG(ERROR, "SEDF scheduler no longer available");
+        LOG(ERROR, "Domain %"PRIu32": SEDF scheduler no longer available", domid);
         ret=ERROR_FEATURE_REMOVED;
         break;
     case LIBXL_SCHEDULER_CREDIT:
@@ -5649,7 +5673,7 @@ int libxl_domain_sched_params_set(libxl_ctx *ctx, uint32_t domid,
         ret=sched_rtds_domain_set(gc, domid, scinfo);
         break;
     default:
-        LOG(ERROR, "Unknown scheduler");
+        LOG(ERROR, "Domain %"PRIu32": Unknown scheduler", domid);
         ret=ERROR_INVAL;
         break;
     }
@@ -5670,20 +5694,21 @@ int libxl_vcpu_sched_params_set(libxl_ctx *ctx, uint32_t domid,
 
     switch (sched) {
     case LIBXL_SCHEDULER_SEDF:
-        LOG(ERROR, "SEDF scheduler no longer available");
+        LOG(ERROR, "Domain %"PRIu32": SEDF scheduler no longer available", domid);
         rc = ERROR_FEATURE_REMOVED;
         break;
     case LIBXL_SCHEDULER_CREDIT:
     case LIBXL_SCHEDULER_CREDIT2:
     case LIBXL_SCHEDULER_ARINC653:
-        LOG(ERROR, "per-VCPU parameter setting not supported for this scheduler");
+        LOG(ERROR, "Domain %"PRIu32": per-VCPU parameter setting not supported for this scheduler",
+            domid);
         rc = ERROR_INVAL;
         break;
     case LIBXL_SCHEDULER_RTDS:
         rc = sched_rtds_vcpu_set(gc, domid, scinfo);
         break;
     default:
-        LOG(ERROR, "Unknown scheduler");
+        LOG(ERROR, "Domain %"PRIu32": Unknown scheduler", domid);
         rc = ERROR_INVAL;
         break;
     }
@@ -5704,20 +5729,21 @@ int libxl_vcpu_sched_params_set_all(libxl_ctx *ctx, uint32_t domid,
 
     switch (sched) {
     case LIBXL_SCHEDULER_SEDF:
-        LOG(ERROR, "SEDF scheduler no longer available");
+        LOG(ERROR, "Domain %"PRIu32": SEDF scheduler no longer available", domid);
         rc = ERROR_FEATURE_REMOVED;
         break;
     case LIBXL_SCHEDULER_CREDIT:
     case LIBXL_SCHEDULER_CREDIT2:
     case LIBXL_SCHEDULER_ARINC653:
-        LOG(ERROR, "per-VCPU parameter setting not supported for this scheduler");
+        LOG(ERROR, "Domain %"PRIu32": per-VCPU parameter setting not supported for this scheduler",
+            domid);
         rc = ERROR_INVAL;
         break;
     case LIBXL_SCHEDULER_RTDS:
         rc = sched_rtds_vcpu_set_all(gc, domid, scinfo);
         break;
     default:
-        LOG(ERROR, "Unknown scheduler");
+        LOG(ERROR, "Domain %"PRIu32": Unknown scheduler", domid);
         rc = ERROR_INVAL;
         break;
     }
@@ -5738,7 +5764,7 @@ int libxl_domain_sched_params_get(libxl_ctx *ctx, uint32_t domid,
 
     switch (scinfo->sched) {
     case LIBXL_SCHEDULER_SEDF:
-        LOG(ERROR, "SEDF scheduler no longer available");
+        LOG(ERROR, "Domain %"PRIu32": SEDF scheduler no longer available", domid);
         ret=ERROR_FEATURE_REMOVED;
         break;
     case LIBXL_SCHEDULER_CREDIT:
@@ -5751,7 +5777,7 @@ int libxl_domain_sched_params_get(libxl_ctx *ctx, uint32_t domid,
         ret=sched_rtds_domain_get(gc, domid, scinfo);
         break;
     default:
-        LOG(ERROR, "Unknown scheduler");
+        LOG(ERROR, "Domain %"PRIu32": Unknown scheduler", domid);
         ret=ERROR_INVAL;
         break;
     }
@@ -5770,20 +5796,21 @@ int libxl_vcpu_sched_params_get(libxl_ctx *ctx, uint32_t domid,
 
     switch (scinfo->sched) {
     case LIBXL_SCHEDULER_SEDF:
-        LOG(ERROR, "SEDF scheduler is no longer available");
+        LOG(ERROR, "Domain %"PRIu32": SEDF scheduler is no longer available", domid);
         rc = ERROR_FEATURE_REMOVED;
         break;
     case LIBXL_SCHEDULER_CREDIT:
     case LIBXL_SCHEDULER_CREDIT2:
     case LIBXL_SCHEDULER_ARINC653:
-        LOG(ERROR, "per-VCPU parameter getting not supported for this scheduler");
+        LOG(ERROR, "Domain %"PRIu32": per-VCPU parameter getting not supported for this scheduler",
+            domid);
         rc = ERROR_INVAL;
         break;
     case LIBXL_SCHEDULER_RTDS:
         rc = sched_rtds_vcpu_get(gc, domid, scinfo);
         break;
     default:
-        LOG(ERROR, "Unknown scheduler");
+        LOG(ERROR, "Domain %"PRIu32": Unknown scheduler", domid);
         rc = ERROR_INVAL;
         break;
     }
@@ -5802,20 +5829,20 @@ int libxl_vcpu_sched_params_get_all(libxl_ctx *ctx, uint32_t domid,
 
     switch (scinfo->sched) {
     case LIBXL_SCHEDULER_SEDF:
-        LOG(ERROR, "SEDF scheduler is no longer available");
+        LOG(ERROR, "Domain %"PRIu32": SEDF scheduler is no longer available", domid);
         rc = ERROR_FEATURE_REMOVED;
         break;
     case LIBXL_SCHEDULER_CREDIT:
     case LIBXL_SCHEDULER_CREDIT2:
     case LIBXL_SCHEDULER_ARINC653:
-        LOG(ERROR, "per-VCPU parameter getting not supported for this scheduler");
+        LOG(ERROR, "Domain %"PRIu32": per-VCPU parameter getting not supported for this scheduler", domid);
         rc = ERROR_INVAL;
         break;
     case LIBXL_SCHEDULER_RTDS:
         rc = sched_rtds_vcpu_get_all(gc, domid, scinfo);
         break;
     default:
-        LOG(ERROR, "Unknown scheduler");
+        LOG(ERROR, "Domain %"PRIu32": Unknown scheduler", domid);
         rc = ERROR_INVAL;
         break;
     }
@@ -5887,8 +5914,8 @@ int libxl_send_trigger(libxl_ctx *ctx, uint32_t domid,
     }
 
     if (rc != 0) {
-        LOGE(ERROR, "Send trigger '%s' failed",
-             libxl_trigger_to_string(trigger));
+        LOGE(ERROR, "Domain %"PRIu32": Send trigger '%s' failed",
+             domid, libxl_trigger_to_string(trigger));
         rc = ERROR_FAIL;
     }
 
@@ -5996,7 +6023,7 @@ uint32_t libxl_vm_get_start_time(libxl_ctx *ctx, uint32_t domid)
     start_time = libxl__xs_read(
         gc, XBT_NULL, GCSPRINTF("%s/start_time", vm_path));
     if (start_time == NULL) {
-        LOGEV(ERROR, -1, "Can't get start time of domain '%d'", domid);
+        LOGEV(ERROR, -1, "Domain %"PRIu32": Can't get start time of domain", domid);
         ret = -1;
     }else{
         ret = strtoul(start_time, NULL, 10);
@@ -6014,7 +6041,7 @@ char *libxl_tmem_list(libxl_ctx *ctx, uint32_t domid, int use_long)
     r = xc_tmem_control(ctx->xch, -1, XEN_SYSCTL_TMEM_OP_LIST, domid, 32768,
                         use_long, _buf);
     if (r < 0) {
-        LOGE(ERROR, "Can not get tmem list");
+        LOGE(ERROR, "Domain %"PRIu32": Can not get tmem list", domid);
         GC_FREE;
         return NULL;
     }
@@ -6031,7 +6058,7 @@ int libxl_tmem_freeze(libxl_ctx *ctx, uint32_t domid)
     r = xc_tmem_control(ctx->xch, -1, XEN_SYSCTL_TMEM_OP_FREEZE, domid, 0, 0,
                         NULL);
     if (r < 0) {
-        LOGE(ERROR, "Can not freeze tmem pools");
+        LOGE(ERROR, "Domain %"PRIu32": Can not freeze tmem pools", domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -6050,7 +6077,7 @@ int libxl_tmem_thaw(libxl_ctx *ctx, uint32_t domid)
     r = xc_tmem_control(ctx->xch, -1, XEN_SYSCTL_TMEM_OP_THAW, domid, 0, 0,
                         NULL);
     if (r < 0) {
-        LOGE(ERROR, "Can not thaw tmem pools");
+        LOGE(ERROR, "Domain %"PRIu32": Can not thaw tmem pools", domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -6080,13 +6107,14 @@ int libxl_tmem_set(libxl_ctx *ctx, uint32_t domid, char* name, uint32_t set)
     GC_INIT(ctx);
 
     if (subop == -1) {
-        LOGEV(ERROR, -1, "Invalid set, valid sets are <weight|cap|compress>");
+        LOGEV(ERROR, -1, "Domain %"PRIu32": Invalid set, valid sets are <weight|cap|compress>",
+              domid);
         rc = ERROR_INVAL;
         goto out;
     }
     r = xc_tmem_control(ctx->xch, -1, subop, domid, set, 0, NULL);
     if (r < 0) {
-        LOGE(ERROR, "Can not set tmem %s", name);
+        LOGE(ERROR, "Domain %"PRIu32": Can not set tmem %s", domid, name);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -6105,7 +6133,7 @@ int libxl_tmem_shared_auth(libxl_ctx *ctx, uint32_t domid,
 
     r = xc_tmem_auth(ctx->xch, domid, uuid, auth);
     if (r < 0) {
-        LOGE(ERROR, "Can not set tmem shared auth");
+        LOGE(ERROR, "Domain %"PRIu32": Can not set tmem shared auth", domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -6450,7 +6478,8 @@ int libxl_cpupool_movedomain(libxl_ctx *ctx, uint32_t poolid, uint32_t domid)
 
     rc = xc_cpupool_movedomain(ctx->xch, poolid, domid);
     if (rc) {
-        LOGEV(ERROR, rc, "Error moving domain to cpupool");
+        LOGEV(ERROR, rc, "Domain %"PRIu32": Error moving domain to cpupool",
+              domid);
         GC_FREE;
         return ERROR_FAIL;
     }
@@ -6578,7 +6607,7 @@ static int libxl__update_avail_vcpus_qmp(libxl__gc *gc, uint32_t domid,
 
     rc = libxl__qmp_query_cpus(gc, domid, map);
     if (rc) {
-        LOG(ERROR, "fail to get number of cpus for domain %d", domid);
+        LOG(ERROR, "Domain %"PRIu32": fail to get number of cpus", domid);
         goto out;
     }
 
@@ -6632,7 +6661,7 @@ int libxl_retrieve_domain_configuration(libxl_ctx *ctx, uint32_t domid,
 
     rc = libxl__get_domain_configuration(gc, domid, d_config);
     if (rc) {
-        LOG(ERROR, "fail to get domain configuration for domain %d", domid);
+        LOG(ERROR, "Domain %"PRIu32": fail to get domain configuration", domid);
         rc = ERROR_FAIL;
         goto out;
     }
@@ -6642,7 +6671,7 @@ int libxl_retrieve_domain_configuration(libxl_ctx *ctx, uint32_t domid,
         char *domname;
         domname = libxl_domid_to_name(ctx, domid);
         if (!domname) {
-            LOG(ERROR, "fail to get domain name for domain %d", domid);
+            LOG(ERROR, "Domain %"PRIu32": fail to get domain name", domid);
             goto out;
         }
         free(d_config->c_info.name);
@@ -6655,7 +6684,7 @@ int libxl_retrieve_domain_configuration(libxl_ctx *ctx, uint32_t domid,
         libxl_dominfo_init(&info);
         rc = libxl_domain_info(ctx, &info, domid);
         if (rc) {
-            LOG(ERROR, "fail to get domain info for domain %d", domid);
+            LOG(ERROR, "Domain %"PRIu32": fail to get domain info", domid);
             libxl_dominfo_dispose(&info);
             goto out;
         }
@@ -6701,7 +6730,7 @@ int libxl_retrieve_domain_configuration(libxl_ctx *ctx, uint32_t domid,
         }
 
         if (rc) {
-            LOG(ERROR, "fail to update available cpu map for domain %d", domid);
+            LOG(ERROR, "Domain %"PRIu32": fail to update available cpu map", domid);
             goto out;
         }
     }
@@ -6723,7 +6752,7 @@ int libxl_retrieve_domain_configuration(libxl_ctx *ctx, uint32_t domid,
         /* "target" */
         rc = libxl__get_memory_target(gc, domid, &target_memkb, &max_memkb);
         if (rc) {
-            LOG(ERROR, "fail to get memory target for domain %d", domid);
+            LOG(ERROR, "Domain %"PRIu32": fail to get memory target", domid);
             goto out;
         }
 
@@ -6774,8 +6803,8 @@ int libxl_retrieve_domain_configuration(libxl_ctx *ctx, uint32_t domid,
             num_dev = libxl__device_type_get_num(dt, d_config);
             p = dt->list(CTX, domid, &num);
             if (p == NULL) {
-                LOG(DEBUG, "no %s from xenstore for domain %d",
-                    dt->type, domid);
+                LOG(DEBUG, "Domain %"PRIu32": no %s from xenstore",
+                    domid, dt->type);
             }
             devs = libxl__device_type_get_ptr(dt, d_config);
 
@@ -6793,7 +6822,8 @@ int libxl_retrieve_domain_configuration(libxl_ctx *ctx, uint32_t domid,
                         dt->merge(ctx, p + dt->dev_elem_size * j, q);
                 } else {                /* not found in xenstore */
                     LOG(WARN,
-                        "Device present in JSON but not in xenstore, ignored");
+                        "Domain %"PRIu32": Device present in JSON but not in xenstore, ignored",
+                        domid);
 
                     dt->dispose(q);
 
-- 
2.10.0


[-- Attachment #3: Type: text/plain, Size: 127 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-10-04  9:14         ` Cedric Bosdonnat
@ 2016-10-07 14:09           ` Wei Liu
  2016-10-07 15:37             ` Ian Jackson
  2016-10-10  7:03             ` Cedric Bosdonnat
  0 siblings, 2 replies; 17+ messages in thread
From: Wei Liu @ 2016-10-07 14:09 UTC (permalink / raw)
  To: Cedric Bosdonnat; +Cc: Wei Liu, Ian Jackson, xen-devel

On Tue, Oct 04, 2016 at 11:14:52AM +0200, Cedric Bosdonnat wrote:
> Hi Ian and Wei,
> 
> On Mon, 2016-09-19 at 16:23 +0100, Ian Jackson wrote:
> > Cedric Bosdonnat writes ("Re: [Xen-devel] per-domain logging"):
> > > On Thu, 2016-09-15 at 16:11 +0100, Wei Liu wrote:
> > > > IIRC there is already logfile abstraction inside libvirt -- can you just
> > > > pass in a libvirt logfile fd and try to demux there?
> > > 
> > > 
> > > The abstraction we have is something similar to the XenToolLogger,
> > > not something abstracting the log files. Even if we had that, how
> > > could we demux since there is no domain name in the libxl messages.
> 
> I came up with a commit on the libvirt side writing a custom xtl_logger
> that demuxes the log messages. Here it is for the curious ones:
> 
> https://github.com/cbosdo/libvirt/commit/5e28dd67c52a49b11635167469a8b60dcb4e287c
> 
> This way, libvirt would put all log messages containing ': Domain %u:' in a
> separate log file and all non-matching messages would go to the default
> libxl-driver.log file.
> 
> > Right.
> > 
> > It's not trivial to change the xtl API because there is no
> > negotiation, just a vops structure.  I can think of a way to do it,
> > but do we want to make all xtl logger users (that is, all generators
> > of log messages) pass a domid ?
> > 
> > Do we want to extend this to other information ?  (Not sure _what_
> > other information.)
> > 
> > Alternatively, we could have libxl (and perhaps libxc) put the domid
> > in a standard format in the message, so it could be extracted ?
> > 
> > However we do it, we would have to add a domid to every LOG call in
> > libxl.
> 
> Attached is a partial attempt at this that I wrote to test my libvirt code.
> How does that sound to you? Should I continue like this? Obviously I surely
> missed a few log messages that could get a domid, but it seems that even libxl
> has log messages that can't have a domid.
> 

Instead of trying to change all the format strings I think it would be
better to have a new set of LOG macros that takes domid.

Something like:
  LOGEVD(ERROR, errno, domid, "xxxx");

I would also like to have the log format written down in some document
or header file.

But let's step back a bit: have we agreed on the approach forward? This
thread doesn't seem to have a clear conclusion yet.  Obviously I don't
want you to waste your writing code that's going to be threw away.

If you're happy with demuxing in libvirt, I won't object to it. Looks
like there is relatively less code churn involved than other solutions,
say, libxl keeping track of a set of per-domain xtl loggers.

Wei.

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-10-07 14:09           ` Wei Liu
@ 2016-10-07 15:37             ` Ian Jackson
  2016-10-10  7:05               ` Cedric Bosdonnat
  2016-10-10  7:03             ` Cedric Bosdonnat
  1 sibling, 1 reply; 17+ messages in thread
From: Ian Jackson @ 2016-10-07 15:37 UTC (permalink / raw)
  To: Wei Liu; +Cc: Cedric Bosdonnat, xen-devel

Wei Liu writes ("Re: [Xen-devel] per-domain logging"):
> Instead of trying to change all the format strings I think it would be
> better to have a new set of LOG macros that takes domid.
> 
> Something like:
>   LOGEVD(ERROR, errno, domid, "xxxx");
> 
> I would also like to have the log format written down in some document
> or header file.

That would seem like a good idea to me.

> But let's step back a bit: have we agreed on the approach forward? This
> thread doesn't seem to have a clear conclusion yet.  Obviously I don't
> want you to waste your writing code that's going to be threw away.
> 
> If you're happy with demuxing in libvirt, I won't object to it. Looks
> like there is relatively less code churn involved than other solutions,
> say, libxl keeping track of a set of per-domain xtl loggers.

The libvirt solution is not particularly general.

Ian.

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-10-07 14:09           ` Wei Liu
  2016-10-07 15:37             ` Ian Jackson
@ 2016-10-10  7:03             ` Cedric Bosdonnat
  2016-10-10 10:06               ` Wei Liu
  1 sibling, 1 reply; 17+ messages in thread
From: Cedric Bosdonnat @ 2016-10-10  7:03 UTC (permalink / raw)
  To: Wei Liu; +Cc: Ian Jackson, xen-devel

On Fri, 2016-10-07 at 15:09 +0100, Wei Liu wrote:
> Instead of trying to change all the format strings I think it would be
> better to have a new set of LOG macros that takes domid.
> 
> Something like:
>   LOGEVD(ERROR, errno, domid, "xxxx");

Sounds good to me, even if LOGEVD will just concatenate something like
"Domain %d: " to the "xxxx". At least this would be much cleaner in the
libxl code

> I would also like to have the log format written down in some document
> or header file.

You mean as a documentation? That would be in libxl, not in xtl, right?
We could have a comment above the LOG*D macros explaining what the message
will look like (Prepending 'Domain %d: " to the message passed to normal log
functions). And a comment on top of the current functions explaining all the
different things that are passed on to xtl.

> But let's step back a bit: have we agreed on the approach forward? This
> thread doesn't seem to have a clear conclusion yet.  Obviously I don't
> want you to waste your writing code that's going to be threw away.

I don't want to loose time either, but sometimes it's better to write some
code to check that what we are mentioning is possible.

> If you're happy with demuxing in libvirt, I won't object to it. Looks
> like there is relatively less code churn involved than other solutions,
> say, libxl keeping track of a set of per-domain xtl loggers.

Having a set of per-domain xtl logger is also possible, but with one logger
demuxing all messages, it's fairly easy to support both old log format
and new ones. And the format we get in the callbacks from libxl is something
like "%s%s%s%s%s", with things like file, line, function and message. Thus
adding a domain in there doesn't make much sense. I'ld more in favor of the
LOG*D family in libxl.

--
Cedric

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-10-07 15:37             ` Ian Jackson
@ 2016-10-10  7:05               ` Cedric Bosdonnat
  0 siblings, 0 replies; 17+ messages in thread
From: Cedric Bosdonnat @ 2016-10-10  7:05 UTC (permalink / raw)
  To: Ian Jackson, Wei Liu; +Cc: xen-devel

On Fri, 2016-10-07 at 16:37 +0100, Ian Jackson wrote:
> > But let's step back a bit: have we agreed on the approach forward? This
> > thread doesn't seem to have a clear conclusion yet.  Obviously I don't
> > want you to waste your writing code that's going to be threw away.
> > 
> > If you're happy with demuxing in libvirt, I won't object to it. Looks
> > like there is relatively less code churn involved than other solutions,
> > say, libxl keeping track of a set of per-domain xtl loggers.
> 
> The libvirt solution is not particularly general.

It uses a bunch of libvirt-specific utility functions, but nothing that
can't be mimicked by other applications. After all xtl defines one logger
but anyone wan implement his own ;)

--
Cedric

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-10-10  7:03             ` Cedric Bosdonnat
@ 2016-10-10 10:06               ` Wei Liu
  2016-10-13  9:28                 ` Cedric Bosdonnat
  0 siblings, 1 reply; 17+ messages in thread
From: Wei Liu @ 2016-10-10 10:06 UTC (permalink / raw)
  To: Cedric Bosdonnat; +Cc: Ian Jackson, Wei Liu, xen-devel

On Mon, Oct 10, 2016 at 09:03:49AM +0200, Cedric Bosdonnat wrote:
> On Fri, 2016-10-07 at 15:09 +0100, Wei Liu wrote:
> > Instead of trying to change all the format strings I think it would be
> > better to have a new set of LOG macros that takes domid.
> > 
> > Something like:
> >   LOGEVD(ERROR, errno, domid, "xxxx");
> 
> Sounds good to me, even if LOGEVD will just concatenate something like
> "Domain %d: " to the "xxxx". At least this would be much cleaner in the
> libxl code
> 
> > I would also like to have the log format written down in some document
> > or header file.
> 
> You mean as a documentation? That would be in libxl, not in xtl, right?
> We could have a comment above the LOG*D macros explaining what the message
> will look like (Prepending 'Domain %d: " to the message passed to normal log
> functions). And a comment on top of the current functions explaining all the
> different things that are passed on to xtl.
> 

Presumably you will define LOG*D variants in libxl_internal.h, I think a
comment there right before those macros will be good enough.

> > But let's step back a bit: have we agreed on the approach forward? This
> > thread doesn't seem to have a clear conclusion yet.  Obviously I don't
> > want you to waste your writing code that's going to be threw away.
> 
> I don't want to loose time either, but sometimes it's better to write some
> code to check that what we are mentioning is possible.
> 
> > If you're happy with demuxing in libvirt, I won't object to it. Looks
> > like there is relatively less code churn involved than other solutions,
> > say, libxl keeping track of a set of per-domain xtl loggers.
> 
> Having a set of per-domain xtl logger is also possible, but with one logger
> demuxing all messages, it's fairly easy to support both old log format
> and new ones. And the format we get in the callbacks from libxl is something
> like "%s%s%s%s%s", with things like file, line, function and message. Thus
> adding a domain in there doesn't make much sense. I'ld more in favor of the
> LOG*D family in libxl.
> 

Sure, fine by me.

Wei.

> --
> Cedric

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-10-10 10:06               ` Wei Liu
@ 2016-10-13  9:28                 ` Cedric Bosdonnat
  2016-10-13  9:41                   ` Wei Liu
  0 siblings, 1 reply; 17+ messages in thread
From: Cedric Bosdonnat @ 2016-10-13  9:28 UTC (permalink / raw)
  To: Wei Liu; +Cc: Ian Jackson, xen-devel

Hi Wei, Ian,

In quite a number of places, the domid we have in the function calling LOG*
may be the one of a stubdom. In the log we want to output the domid of the
domain the user knows about. Would there be a way to get it?

An example of that is do_pci_add. It has a libxl_is_stubdom call, suggesting
that domid may not be the real domain id. An I wonder if there are other
places where domid may be the one of a stubdom and I don't know it.

--
Cedric

On Mon, 2016-10-10 at 11:06 +0100, Wei Liu wrote:
> On Mon, Oct 10, 2016 at 09:03:49AM +0200, Cedric Bosdonnat wrote:
> > On Fri, 2016-10-07 at 15:09 +0100, Wei Liu wrote:
> > > Instead of trying to change all the format strings I think it would be
> > > better to have a new set of LOG macros that takes domid.
> > > 
> > > Something like:
> > >   LOGEVD(ERROR, errno, domid, "xxxx");
> > 
> > 
> > Sounds good to me, even if LOGEVD will just concatenate something like
> > "Domain %d: " to the "xxxx". At least this would be much cleaner in the
> > libxl code
> > 
> > > I would also like to have the log format written down in some document
> > > or header file.
> > 
> > 
> > You mean as a documentation? That would be in libxl, not in xtl, right?
> > We could have a comment above the LOG*D macros explaining what the message
> > will look like (Prepending 'Domain %d: " to the message passed to normal log
> > functions). And a comment on top of the current functions explaining all the
> > different things that are passed on to xtl.
> > 
> 
> 
> Presumably you will define LOG*D variants in libxl_internal.h, I think a
> comment there right before those macros will be good enough.
> 
> > > But let's step back a bit: have we agreed on the approach forward? This
> > > thread doesn't seem to have a clear conclusion yet.  Obviously I don't
> > > want you to waste your writing code that's going to be threw away.
> > 
> > 
> > I don't want to loose time either, but sometimes it's better to write some
> > code to check that what we are mentioning is possible.
> > 
> > > If you're happy with demuxing in libvirt, I won't object to it. Looks
> > > like there is relatively less code churn involved than other solutions,
> > > say, libxl keeping track of a set of per-domain xtl loggers.
> > 
> > 
> > Having a set of per-domain xtl logger is also possible, but with one logger
> > demuxing all messages, it's fairly easy to support both old log format
> > and new ones. And the format we get in the callbacks from libxl is something
> > like "%s%s%s%s%s", with things like file, line, function and message. Thus
> > adding a domain in there doesn't make much sense. I'ld more in favor of the
> > LOG*D family in libxl.
> > 
> 
> 
> Sure, fine by me.
> 
> Wei.
> 
> > --
> > Cedric
> 
> 
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-10-13  9:28                 ` Cedric Bosdonnat
@ 2016-10-13  9:41                   ` Wei Liu
  2016-11-09 10:27                     ` Cedric Bosdonnat
  0 siblings, 1 reply; 17+ messages in thread
From: Wei Liu @ 2016-10-13  9:41 UTC (permalink / raw)
  To: Cedric Bosdonnat; +Cc: Ian Jackson, Wei Liu, xen-devel

On Thu, Oct 13, 2016 at 11:28:21AM +0200, Cedric Bosdonnat wrote:
> Hi Wei, Ian,
> 
> In quite a number of places, the domid we have in the function calling LOG*
> may be the one of a stubdom. In the log we want to output the domid of the
> domain the user knows about. Would there be a way to get it?
> 
> An example of that is do_pci_add. It has a libxl_is_stubdom call, suggesting
> that domid may not be the real domain id. An I wonder if there are other
> places where domid may be the one of a stubdom and I don't know it.
> 

The third argument of libxl_is_stubdom can be used to retrieve the
target domid.

If you find other places where you need to get the domid, please let me
know. I believe there are some fields embedded in various structs that
we can interrogate.

Wei.

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-10-13  9:41                   ` Wei Liu
@ 2016-11-09 10:27                     ` Cedric Bosdonnat
  2016-11-11  1:51                       ` Wei Liu
  2016-11-11 11:22                       ` Ian Jackson
  0 siblings, 2 replies; 17+ messages in thread
From: Cedric Bosdonnat @ 2016-11-09 10:27 UTC (permalink / raw)
  To: Wei Liu; +Cc: Ian Jackson, xen-devel

Hi Wei, Ian,

I now have a big lot of changes to use the LOG*D family through the libxl code.
What should be the best way to submit that for review? I guess a giant commit
won't be too easy to handle for review and maintenance, maybe I should have one
commit per changed file... any opinion on that?

--
Cedric

On Thu, 2016-10-13 at 10:41 +0100, Wei Liu wrote:
> On Thu, Oct 13, 2016 at 11:28:21AM +0200, Cedric Bosdonnat wrote:
> > Hi Wei, Ian,
> > 
> > In quite a number of places, the domid we have in the function calling LOG*
> > may be the one of a stubdom. In the log we want to output the domid of the
> > domain the user knows about. Would there be a way to get it?
> > 
> > An example of that is do_pci_add. It has a libxl_is_stubdom call, suggesting
> > that domid may not be the real domain id. An I wonder if there are other
> > places where domid may be the one of a stubdom and I don't know it.
> > 
> 
> The third argument of libxl_is_stubdom can be used to retrieve the
> target domid.
> 
> If you find other places where you need to get the domid, please let me
> know. I believe there are some fields embedded in various structs that
> we can interrogate.
> 
> Wei.
> 

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-11-09 10:27                     ` Cedric Bosdonnat
@ 2016-11-11  1:51                       ` Wei Liu
  2016-11-11 11:22                       ` Ian Jackson
  1 sibling, 0 replies; 17+ messages in thread
From: Wei Liu @ 2016-11-11  1:51 UTC (permalink / raw)
  To: Cedric Bosdonnat; +Cc: Ian Jackson, Wei Liu, xen-devel

On Wed, Nov 09, 2016 at 11:27:34AM +0100, Cedric Bosdonnat wrote:
> Hi Wei, Ian,
> 
> I now have a big lot of changes to use the LOG*D family through the libxl code.
> What should be the best way to submit that for review? I guess a giant commit
> won't be too easy to handle for review and maintenance, maybe I should have one
> commit per changed file... any opinion on that?
> 

Please have the first patch to be the one adding the LOG*D family
macros.

I don't really have an opinion on how to organise the actual changes to
various files. I think I would be more interested in how you classify
different LOG macros  and decide which ones to switch to LOGD family.

If the changes are done mechanically using tool like spatch, please
add the relevant runes into command message.

> --
> Cedric
> 
> On Thu, 2016-10-13 at 10:41 +0100, Wei Liu wrote:
> > On Thu, Oct 13, 2016 at 11:28:21AM +0200, Cedric Bosdonnat wrote:
> > > Hi Wei, Ian,
> > > 
> > > In quite a number of places, the domid we have in the function calling LOG*
> > > may be the one of a stubdom. In the log we want to output the domid of the
> > > domain the user knows about. Would there be a way to get it?
> > > 
> > > An example of that is do_pci_add. It has a libxl_is_stubdom call, suggesting
> > > that domid may not be the real domain id. An I wonder if there are other
> > > places where domid may be the one of a stubdom and I don't know it.
> > > 
> > 
> > The third argument of libxl_is_stubdom can be used to retrieve the
> > target domid.
> > 
> > If you find other places where you need to get the domid, please let me
> > know. I believe there are some fields embedded in various structs that
> > we can interrogate.
> > 
> > Wei.
> > 

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: per-domain logging
  2016-11-09 10:27                     ` Cedric Bosdonnat
  2016-11-11  1:51                       ` Wei Liu
@ 2016-11-11 11:22                       ` Ian Jackson
  1 sibling, 0 replies; 17+ messages in thread
From: Ian Jackson @ 2016-11-11 11:22 UTC (permalink / raw)
  To: Cedric Bosdonnat; +Cc: Wei Liu, xen-devel

Cedric Bosdonnat writes ("Re: [Xen-devel] per-domain logging"):
> I now have a big lot of changes to use the LOG*D family through the
> libxl code.  What should be the best way to submit that for review?
> I guess a giant commit won't be too easy to handle for review and
> maintenance, maybe I should have one commit per changed file... any
> opinion on that?

I don't disagree with what Wei has said.

I would suggest:

 * One patch to introduce the new macros, with no call sites

 * One or more patches containing only trivial changes to convert call sites
   Sort the changes by what they look like in the diff, so that if
   there are several different usage patterns each has one patch.

 * One patch to remove old macros, if any ought to be removed.

Although, bear in mind that we are currently frozen for the 4.8
release so your changes won't be committed right now.

Ian.

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2016-11-11 11:22 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-14 14:22 per-domain logging Cedric Bosdonnat
2016-09-15 14:50 ` Wei Liu
2016-09-15 15:11   ` Wei Liu
2016-09-15 15:41     ` Cedric Bosdonnat
2016-09-19 15:23       ` Ian Jackson
2016-09-19 16:53         ` Konrad Rzeszutek Wilk
2016-10-04  9:14         ` Cedric Bosdonnat
2016-10-07 14:09           ` Wei Liu
2016-10-07 15:37             ` Ian Jackson
2016-10-10  7:05               ` Cedric Bosdonnat
2016-10-10  7:03             ` Cedric Bosdonnat
2016-10-10 10:06               ` Wei Liu
2016-10-13  9:28                 ` Cedric Bosdonnat
2016-10-13  9:41                   ` Wei Liu
2016-11-09 10:27                     ` Cedric Bosdonnat
2016-11-11  1:51                       ` Wei Liu
2016-11-11 11:22                       ` Ian Jackson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.