[PATCH v5 2/2] Weston: Replace fprintf() by weston_log()

Martin Minarik minarik11 at student.fiit.stuba.sk
Thu Jun 7 09:01:59 PDT 2012


---

Added android shell
---
 src/clipboard.c               |    1 -
 src/compositor-android.c      |   18 ++++----
 src/compositor-drm.c          |  105 ++++++++++++++++++++---------------------
 src/compositor-openwfd.c      |   38 +++++++-------
 src/compositor-wayland.c      |   29 ++++++------
 src/compositor-x11.c          |   22 ++++----
 src/compositor.c              |   67 ++++++++++++--------------
 src/evdev-touchpad.c          |    1 -
 src/evdev.c                   |   12 ++--
 src/filter.c                  |    1 -
 src/shell.c                   |   15 +++---
 src/tablet-shell.c            |    9 ++--
 src/tty.c                     |   33 ++++++-------
 src/xwayland/launcher.c       |   30 ++++++------
 src/xwayland/selection.c      |   50 ++++++++++----------
 src/xwayland/window-manager.c |   72 ++++++++++++++--------------
 16 files changed, 246 insertions(+), 257 deletions(-)

diff --git a/src/clipboard.c b/src/clipboard.c
index f5caf41..92c8a83 100644
--- a/src/clipboard.c
+++ b/src/clipboard.c
@@ -23,7 +23,6 @@
 #define _GNU_SOURCE
 
 #include <stdlib.h>
-#include <stdio.h>
 #include <string.h>
 #include <linux/input.h>
 #include <fcntl.h>
diff --git a/src/compositor-android.c b/src/compositor-android.c
index 3343481..76b0ff1 100644
--- a/src/compositor-android.c
+++ b/src/compositor-android.c
@@ -96,7 +96,7 @@ print_egl_error_state(void)
 	EGLint code;
 
 	code = eglGetError();
-	fprintf(stderr, "EGL error state: %s (0x%04lx)\n",
+	weston_log("EGL error state: %s (0x%04lx)\n",
 		egl_error_string(code), (long)code);
 }
 
@@ -113,7 +113,7 @@ android_output_make_current(struct android_output *output)
 		if (errored)
 			return -1;
 		errored = 1;
-		fprintf(stderr, "Failed to make EGL context current.\n");
+		weston_log("Failed to make EGL context current.\n");
 		print_egl_error_state();
 		return -1;
 	}
@@ -151,7 +151,7 @@ android_output_repaint(struct weston_output *base, pixman_region32_t *damage)
 	ret = eglSwapBuffers(compositor->base.display, output->egl_surface);
 	if (ret == EGL_FALSE && !errored) {
 		errored = 1;
-		fprintf(stderr, "Failed in eglSwapBuffers.\n");
+		weston_log("Failed in eglSwapBuffers.\n");
 		print_egl_error_state();
 	}
 
@@ -325,27 +325,27 @@ android_init_egl(struct android_compositor *compositor,
 
 	compositor->base.display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
 	if (compositor->base.display == EGL_NO_DISPLAY) {
-		fprintf(stderr, "Failed to create EGL display.\n");
+		weston_log("Failed to create EGL display.\n");
 		print_egl_error_state();
 		return -1;
 	}
 
 	ret = eglInitialize(compositor->base.display, &eglmajor, &eglminor);
 	if (!ret) {
-		fprintf(stderr, "Failed to initialise EGL.\n");
+		weston_log("Failed to initialise EGL.\n");
 		print_egl_error_state();
 		return -1;
 	}
 
 	if (!eglBindAPI(EGL_OPENGL_ES_API)) {
-		fprintf(stderr, "Failed to bind EGL_OPENGL_ES_API.\n");
+		weston_log("Failed to bind EGL_OPENGL_ES_API.\n");
 		print_egl_error_state();
 		return -1;
 	}
 
 	ret = android_egl_choose_config(compositor, output->fb, config_attrs);
 	if (ret < 0) {
-		fprintf(stderr, "Failed to find an EGL config.\n");
+		weston_log("Failed to find an EGL config.\n");
 		print_egl_error_state();
 		return -1;
 	}
@@ -355,7 +355,7 @@ android_init_egl(struct android_compositor *compositor,
 						    EGL_NO_CONTEXT,
 						    context_attrs);
 	if (compositor->base.context == EGL_NO_CONTEXT) {
-		fprintf(stderr, "Failed to create a GL ES 2 context.\n");
+		weston_log("Failed to create a GL ES 2 context.\n");
 		print_egl_error_state();
 		return -1;
 	}
@@ -365,7 +365,7 @@ android_init_egl(struct android_compositor *compositor,
 						     output->fb->native_window,
 						     NULL);
 	if (output->egl_surface == EGL_NO_SURFACE) {
-		fprintf(stderr, "Failed to create FB EGLSurface.\n");
+		weston_log("Failed to create FB EGLSurface.\n");
 		print_egl_error_state();
 		return -1;
 	}
diff --git a/src/compositor-drm.c b/src/compositor-drm.c
index 500ea7c..23b814c 100644
--- a/src/compositor-drm.c
+++ b/src/compositor-drm.c
@@ -24,7 +24,6 @@
 #define _GNU_SOURCE
 
 #include <errno.h>
-#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <fcntl.h>
@@ -41,6 +40,7 @@
 #include "compositor.h"
 #include "evdev.h"
 #include "launcher-util.h"
+#include "log.h"
 
 struct drm_compositor {
 	struct weston_compositor base;
@@ -206,7 +206,7 @@ drm_fb_get_from_bo(struct gbm_bo *bo, struct drm_output *output)
 	ret = drmModeAddFB(compositor->drm.fd, width, height, 24, 32,
 			   stride, handle, &fb->fb_id);
 	if (ret) {
-		fprintf(stderr, "failed to create kms fb: %m\n");
+		weston_log("failed to create kms fb: %m\n");
 		free(fb);
 		return NULL;
 	}
@@ -292,7 +292,7 @@ drm_output_render(struct drm_output *output, pixman_region32_t *damage)
 
 	if (!eglMakeCurrent(compositor->base.display, output->egl_surface,
 			    output->egl_surface, compositor->base.context)) {
-		fprintf(stderr, "failed to make current\n");
+		weston_log("failed to make current\n");
 		return;
 	}
 
@@ -304,13 +304,13 @@ drm_output_render(struct drm_output *output, pixman_region32_t *damage)
 	eglSwapBuffers(compositor->base.display, output->egl_surface);
 	bo = gbm_surface_lock_front_buffer(output->surface);
 	if (!bo) {
-		fprintf(stderr, "failed to lock front buffer: %m\n");
+		weston_log("failed to lock front buffer: %m\n");
 		return;
 	}
 
 	output->next = drm_fb_get_from_bo(bo, output);
 	if (!output->next) {
-		fprintf(stderr, "failed to get drm_fb for bo\n");
+		weston_log("failed to get drm_fb for bo\n");
 		gbm_surface_release_buffer(output->surface, bo);
 		return;
 	}
@@ -340,7 +340,7 @@ drm_output_repaint(struct weston_output *output_base,
 				     &output->connector_id, 1,
 				     &mode->mode_info);
 		if (ret) {
-			fprintf(stderr, "set mode failed: %m\n");
+			weston_log("set mode failed: %m\n");
 			return;
 		}
 	}
@@ -348,7 +348,7 @@ drm_output_repaint(struct weston_output *output_base,
 	if (drmModePageFlip(compositor->drm.fd, output->crtc_id,
 			    output->next->fb_id,
 			    DRM_MODE_PAGE_FLIP_EVENT, output) < 0) {
-		fprintf(stderr, "queueing pageflip failed: %m\n");
+		weston_log("queueing pageflip failed: %m\n");
 		return;
 	}
 
@@ -372,7 +372,7 @@ drm_output_repaint(struct weston_output *output_base,
 				      s->src_x, s->src_y,
 				      s->src_w, s->src_h);
 		if (ret)
-			fprintf(stderr, "setplane failed: %d: %s\n",
+			weston_log("setplane failed: %d: %s\n",
 				ret, strerror(errno));
 
 		/*
@@ -382,7 +382,7 @@ drm_output_repaint(struct weston_output *output_base,
 		vbl.request.signal = (unsigned long)s;
 		ret = drmWaitVBlank(compositor->drm.fd, &vbl);
 		if (ret) {
-			fprintf(stderr, "vblank event request failed: %d: %s\n",
+			weston_log("vblank event request failed: %d: %s\n",
 				ret, strerror(errno));
 		}
 	}
@@ -488,8 +488,7 @@ drm_disable_unused_sprites(struct weston_output *output_base)
 				      output->crtc_id, 0, 0,
 				      0, 0, 0, 0, 0, 0, 0, 0);
 		if (ret)
-			fprintf(stderr,
-				"failed to disable plane: %d: %s\n",
+			weston_log("failed to disable plane: %d: %s\n",
 				ret, strerror(errno));
 		drmModeRmFB(c->drm.fd, s->fb_id);
 		s->surface = NULL;
@@ -574,7 +573,7 @@ drm_output_prepare_overlay_surface(struct weston_output *output_base,
 			    format, handles, pitches, offsets,
 			    &fb_id, 0);
 	if (ret) {
-		fprintf(stderr, "addfb2 failed: %d\n", ret);
+		weston_log("addfb2 failed: %d\n", ret);
 		c->sprites_are_broken = 1;
 		return -1;
 	}
@@ -769,7 +768,7 @@ drm_output_set_cursor(struct weston_output *output_base,
 	handle = gbm_bo_get_handle(bo).s32;
 	ret = drmModeSetCursor(c->drm.fd, output->crtc_id, handle, 64, 64);
 	if (ret) {
-		fprintf(stderr, "failed to set cursor: %s\n", strerror(-ret));
+		weston_log("failed to set cursor: %s\n", strerror(-ret));
 		goto out;
 	}
 
@@ -777,7 +776,7 @@ drm_output_set_cursor(struct weston_output *output_base,
 				es->sprite->geometry.x - output->base.x,
 				es->sprite->geometry.y - output->base.y);
 	if (ret) {
-		fprintf(stderr, "failed to move cursor: %s\n", strerror(-ret));
+		weston_log("failed to move cursor: %s\n", strerror(-ret));
 		goto out;
 	}
 
@@ -855,12 +854,12 @@ drm_output_switch_mode(struct weston_output *output_base, struct weston_mode *mo
 	EGLSurface egl_surface;
 
 	if (output_base == NULL) {
-		fprintf(stderr, "output is NULL.\n");
+		weston_log("output is NULL.\n");
 		return -1;
 	}
 
 	if (mode == NULL) {
-		fprintf(stderr, "mode is NULL.\n");
+		weston_log("mode is NULL.\n");
 		return -1;
 	}
 
@@ -869,7 +868,7 @@ drm_output_switch_mode(struct weston_output *output_base, struct weston_mode *mo
 	drm_mode  = choose_mode (output, mode);
 
 	if (!drm_mode) {
-		printf("%s, invalid resolution:%dx%d\n", __func__, mode->width, mode->height);
+		weston_log("%s, invalid resolution:%dx%d\n", __func__, mode->width, mode->height);
 		return -1;
 	} else if (&drm_mode->base == output->base.current) {
 		return 0;
@@ -882,7 +881,7 @@ drm_output_switch_mode(struct weston_output *output_base, struct weston_mode *mo
 				     &output->connector_id, 1, &drm_mode->mode_info);
 
 		if (ret) {
-			fprintf(stderr, "failed to set mode (%dx%d) %u Hz\n",
+			weston_log("failed to set mode (%dx%d) %u Hz\n",
 				drm_mode->base.width,
 				drm_mode->base.height,
 				drm_mode->base.refresh / 1000);
@@ -908,7 +907,7 @@ drm_output_switch_mode(struct weston_output *output_base, struct weston_mode *mo
 				 GBM_BO_USE_SCANOUT |
 				 GBM_BO_USE_RENDERING);
 	if (!surface) {
-		fprintf(stderr, "failed to create gbm surface\n");
+		weston_log("failed to create gbm surface\n");
 		return -1;
 	}
 
@@ -918,7 +917,7 @@ drm_output_switch_mode(struct weston_output *output_base, struct weston_mode *mo
 				       surface, NULL);
 
 	if (egl_surface == EGL_NO_SURFACE) {
-		fprintf(stderr, "failed to create egl surface\n");
+		weston_log("failed to create egl surface\n");
 		goto err;
 	}
 
@@ -927,7 +926,7 @@ drm_output_switch_mode(struct weston_output *output_base, struct weston_mode *mo
 			     output->current->fb_id, 0, 0,
 			     &output->connector_id, 1, &drm_mode->mode_info);
 	if (ret) {
-		fprintf(stderr, "failed to set mode\n");
+		weston_log("failed to set mode\n");
 		goto err;
 	}
 
@@ -1006,7 +1005,7 @@ init_egl(struct drm_compositor *ec, struct udev_device *device)
 	if (sysnum)
 		ec->drm.id = atoi(sysnum);
 	if (!sysnum || ec->drm.id < 0) {
-		fprintf(stderr, "cannot get device sysnum\n");
+		weston_log("cannot get device sysnum\n");
 		return -1;
 	}
 
@@ -1014,7 +1013,7 @@ init_egl(struct drm_compositor *ec, struct udev_device *device)
 	fd = open(filename, O_RDWR | O_CLOEXEC);
 	if (fd < 0) {
 		/* Probably permissions error */
-		fprintf(stderr, "couldn't open %s, skipping\n",
+		weston_log("couldn't open %s, skipping\n",
 			udev_device_get_devnode(device));
 		return -1;
 	}
@@ -1023,30 +1022,30 @@ init_egl(struct drm_compositor *ec, struct udev_device *device)
 	ec->gbm = gbm_create_device(ec->drm.fd);
 	ec->base.display = eglGetDisplay(ec->gbm);
 	if (ec->base.display == NULL) {
-		fprintf(stderr, "failed to create display\n");
+		weston_log("failed to create display\n");
 		return -1;
 	}
 
 	if (!eglInitialize(ec->base.display, &major, &minor)) {
-		fprintf(stderr, "failed to initialize display\n");
+		weston_log("failed to initialize display\n");
 		return -1;
 	}
 
 	if (!eglBindAPI(EGL_OPENGL_ES_API)) {
-		fprintf(stderr, "failed to bind api EGL_OPENGL_ES_API\n");
+		weston_log("failed to bind api EGL_OPENGL_ES_API\n");
 		return -1;
 	}
 
 	if (!eglChooseConfig(ec->base.display, config_attribs,
 			     &ec->base.config, 1, &n) || n != 1) {
-		fprintf(stderr, "failed to choose config: %d\n", n);
+		weston_log("failed to choose config: %d\n", n);
 		return -1;
 	}
 
 	ec->base.context = eglCreateContext(ec->base.display, ec->base.config,
 					    EGL_NO_CONTEXT, context_attribs);
 	if (ec->base.context == NULL) {
-		fprintf(stderr, "failed to create context\n");
+		weston_log("failed to create context\n");
 		return -1;
 	}
 
@@ -1054,7 +1053,7 @@ init_egl(struct drm_compositor *ec, struct udev_device *device)
 					       GBM_FORMAT_XRGB8888,
 					       GBM_BO_USE_RENDERING);
 	if (!ec->dummy_surface) {
-		fprintf(stderr, "failed to create dummy gbm surface\n");
+		weston_log("failed to create dummy gbm surface\n");
 		return -1;
 	}
 
@@ -1062,13 +1061,13 @@ init_egl(struct drm_compositor *ec, struct udev_device *device)
 		eglCreateWindowSurface(ec->base.display, ec->base.config,
 				       ec->dummy_surface, NULL);
 	if (ec->dummy_egl_surface == EGL_NO_SURFACE) {
-		fprintf(stderr, "failed to create egl surface\n");
+		weston_log("failed to create egl surface\n");
 		return -1;
 	}
 
 	if (!eglMakeCurrent(ec->base.display, ec->dummy_egl_surface,
 			    ec->dummy_egl_surface, ec->base.context)) {
-		fprintf(stderr, "failed to make context current\n");
+		weston_log("failed to make context current\n");
 		return -1;
 	}
 
@@ -1252,7 +1251,7 @@ create_output_for_connector(struct drm_compositor *ec,
 
 	encoder = drmModeGetEncoder(ec->drm.fd, connector->encoders[0]);
 	if (encoder == NULL) {
-		fprintf(stderr, "No encoder for connector.\n");
+		weston_log("No encoder for connector.\n");
 		return -1;
 	}
 
@@ -1262,7 +1261,7 @@ create_output_for_connector(struct drm_compositor *ec,
 			break;
 	}
 	if (i == resources->count_crtcs) {
-		fprintf(stderr, "No usable crtc for encoder.\n");
+		weston_log("No usable crtc for encoder.\n");
 		drmModeFreeEncoder(encoder);
 		return -1;
 	}
@@ -1312,7 +1311,7 @@ create_output_for_connector(struct drm_compositor *ec,
 					     GBM_BO_USE_SCANOUT |
 					     GBM_BO_USE_RENDERING);
 	if (!output->surface) {
-		fprintf(stderr, "failed to create gbm surface\n");
+		weston_log("failed to create gbm surface\n");
 		goto err_free;
 	}
 
@@ -1320,7 +1319,7 @@ create_output_for_connector(struct drm_compositor *ec,
 		eglCreateWindowSurface(ec->base.display, ec->base.config,
 				       output->surface, NULL);
 	if (output->egl_surface == EGL_NO_SURFACE) {
-		fprintf(stderr, "failed to create egl surface\n");
+		weston_log("failed to create egl surface\n");
 		goto err_surface;
 	}
 
@@ -1380,7 +1379,7 @@ create_sprites(struct drm_compositor *ec)
 
 	plane_res = drmModeGetPlaneResources(ec->drm.fd);
 	if (!plane_res) {
-		fprintf(stderr, "failed to get plane resources: %s\n",
+		weston_log("failed to get plane resources: %s\n",
 			strerror(errno));
 		return;
 	}
@@ -1393,7 +1392,7 @@ create_sprites(struct drm_compositor *ec)
 		sprite = malloc(sizeof(*sprite) + ((sizeof(uint32_t)) *
 						   plane->count_formats));
 		if (!sprite) {
-			fprintf(stderr, "%s: out of memory\n",
+			weston_log("%s: out of memory\n",
 				__func__);
 			free(plane);
 			continue;
@@ -1453,7 +1452,7 @@ create_outputs(struct drm_compositor *ec, uint32_t option_connector,
 
 	resources = drmModeGetResources(ec->drm.fd);
 	if (!resources) {
-		fprintf(stderr, "drmModeGetResources failed\n");
+		weston_log("drmModeGetResources failed\n");
 		return -1;
 	}
 
@@ -1491,7 +1490,7 @@ create_outputs(struct drm_compositor *ec, uint32_t option_connector,
 	}
 
 	if (wl_list_empty(&ec->base.output_list)) {
-		fprintf(stderr, "No currently active connector found.\n");
+		weston_log("No currently active connector found.\n");
 		drmModeFreeResources(resources);
 		return -1;
 	}
@@ -1514,7 +1513,7 @@ update_outputs(struct drm_compositor *ec, struct udev_device *drm_device)
 
 	resources = drmModeGetResources(ec->drm.fd);
 	if (!resources) {
-		fprintf(stderr, "drmModeGetResources failed\n");
+		weston_log("drmModeGetResources failed\n");
 		return;
 	}
 
@@ -1547,7 +1546,7 @@ update_outputs(struct drm_compositor *ec, struct udev_device *drm_device)
 			create_output_for_connector(ec, resources,
 						    connector, x, y,
 						    drm_device);
-			printf("connector %d connected\n", connector_id);
+			weston_log("connector %d connected\n", connector_id);
 
 		}
 		drmModeFreeConnector(connector);
@@ -1566,7 +1565,7 @@ update_outputs(struct drm_compositor *ec, struct udev_device *drm_device)
 
 			if (disconnects & (1 << output->connector_id)) {
 				disconnects &= ~(1 << output->connector_id);
-				printf("connector %d disconnected\n",
+				weston_log("connector %d disconnected\n",
 				       output->connector_id);
 				x_offset += output->base.current->width;
 				drm_output_destroy(&output->base);
@@ -1635,7 +1634,7 @@ drm_destroy(struct weston_compositor *ec)
 	gbm_device_destroy(d->gbm);
 	destroy_sprites(d);
 	if (weston_launcher_drm_set_master(&d->base, d->drm.fd, 0) < 0)
-		fprintf(stderr, "failed to drop master: %m\n");
+		weston_log("failed to drop master: %m\n");
 	tty_destroy(d->tty);
 
 	free(d);
@@ -1655,7 +1654,7 @@ drm_compositor_set_modes(struct drm_compositor *compositor)
 				     &output->connector_id, 1,
 				     &drm_mode->mode_info);
 		if (ret < 0) {
-			fprintf(stderr,
+			weston_log(
 				"failed to set mode %dx%d for output at %d,%d: %m\n",
 				drm_mode->base.width, drm_mode->base.height, 
 				output->base.x, output->base.y);
@@ -1676,7 +1675,7 @@ vt_func(struct weston_compositor *compositor, int event)
 	case TTY_ENTER_VT:
 		compositor->focus = 1;
 		if (weston_launcher_drm_set_master(&ec->base, ec->drm.fd, 1)) {
-			fprintf(stderr, "failed to set master: %m\n");
+			weston_log("failed to set master: %m\n");
 			wl_display_terminate(compositor->wl_display);
 		}
 		compositor->state = ec->prev_state;
@@ -1720,7 +1719,7 @@ vt_func(struct weston_compositor *compositor, int event)
 					0, 0, 0, 0, 0, 0, 0, 0);
 
 		if (weston_launcher_drm_set_master(&ec->base, ec->drm.fd, 0) < 0)
-			fprintf(stderr, "failed to drop master: %m\n");
+			weston_log("failed to drop master: %m\n");
 
 		break;
 	};
@@ -1756,14 +1755,14 @@ drm_compositor_create(struct wl_display *display,
 	memset(ec, 0, sizeof *ec);
 	ec->udev = udev_new();
 	if (ec->udev == NULL) {
-		fprintf(stderr, "failed to initialize udev context\n");
+		weston_log("failed to initialize udev context\n");
 		return NULL;
 	}
 
 	ec->base.wl_display = display;
 	ec->tty = tty_create(&ec->base, vt_func, tty);
 	if (!ec->tty) {
-		fprintf(stderr, "failed to initialize tty\n");
+		weston_log("failed to initialize tty\n");
 		free(ec);
 		return NULL;
 	}
@@ -1789,12 +1788,12 @@ drm_compositor_create(struct wl_display *display,
 	}
 
 	if (drm_device == NULL) {
-		fprintf(stderr, "no drm device found\n");
+		weston_log("no drm device found\n");
 		return NULL;
 	}
 
 	if (init_egl(ec, drm_device) < 0) {
-		fprintf(stderr, "failed to initialize egl\n");
+		weston_log("failed to initialize egl\n");
 		return NULL;
 	}
 
@@ -1818,7 +1817,7 @@ drm_compositor_create(struct wl_display *display,
 	create_sprites(ec);
 
 	if (create_outputs(ec, connector, drm_device) < 0) {
-		fprintf(stderr, "failed to create output for %s\n", path);
+		weston_log("failed to create output for %s\n", path);
 		return NULL;
 	}
 
@@ -1835,7 +1834,7 @@ drm_compositor_create(struct wl_display *display,
 
 	ec->udev_monitor = udev_monitor_new_from_netlink(ec->udev, "udev");
 	if (ec->udev_monitor == NULL) {
-		fprintf(stderr, "failed to intialize udev monitor\n");
+		weston_log("failed to intialize udev monitor\n");
 		return NULL;
 	}
 	udev_monitor_filter_add_match_subsystem_devtype(ec->udev_monitor,
@@ -1846,7 +1845,7 @@ drm_compositor_create(struct wl_display *display,
 				     WL_EVENT_READABLE, udev_drm_event, ec);
 
 	if (udev_monitor_enable_receiving(ec->udev_monitor) < 0) {
-		fprintf(stderr, "failed to enable udev-monitor receiving\n");
+		weston_log("failed to enable udev-monitor receiving\n");
 		return NULL;
 	}
 
diff --git a/src/compositor-openwfd.c b/src/compositor-openwfd.c
index 3548dfb..aac8064 100644
--- a/src/compositor-openwfd.c
+++ b/src/compositor-openwfd.c
@@ -23,7 +23,6 @@
 
 #define _GNU_SOURCE
 
-#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -36,6 +35,7 @@
 
 #include "compositor.h"
 #include "evdev.h"
+#include "log.h"
 
 struct wfd_compositor {
 	struct weston_compositor base;
@@ -137,36 +137,36 @@ init_egl(struct wfd_compositor *ec)
 	ec->gbm = gbm_create_device(ec->wfd_fd);
 	ec->base.display = eglGetDisplay(ec->gbm);
 	if (ec->base.display == NULL) {
-		fprintf(stderr, "failed to create display\n");
+		weston_log("failed to create display\n");
 		return -1;
 	}
 
 	if (!eglInitialize(ec->base.display, &major, &minor)) {
-		fprintf(stderr, "failed to initialize display\n");
+		weston_log("failed to initialize display\n");
 		return -1;
 	}
 
 	extensions = eglQueryString(ec->base.display, EGL_EXTENSIONS);
 	if (!strstr(extensions, "EGL_KHR_surfaceless_gles2")) {
-		fprintf(stderr, "EGL_KHR_surfaceless_gles2 not available\n");
+		weston_log("EGL_KHR_surfaceless_gles2 not available\n");
 		return -1;
 	}
 
 	if (!eglBindAPI(EGL_OPENGL_ES_API)) {
-		fprintf(stderr, "failed to bind api EGL_OPENGL_ES_API\n");
+		weston_log("failed to bind api EGL_OPENGL_ES_API\n");
 		return -1;
 	}
 
 	ec->base.context = eglCreateContext(ec->base.display, NULL,
 					    EGL_NO_CONTEXT, context_attribs);
 	if (ec->base.context == NULL) {
-		fprintf(stderr, "failed to create context\n");
+		weston_log("failed to create context\n");
 		return -1;
 	}
 
 	if (!eglMakeCurrent(ec->base.display, EGL_NO_SURFACE,
 			    EGL_NO_SURFACE, ec->base.context)) {
-		fprintf(stderr, "failed to make context current\n");
+		weston_log("failed to make context current\n");
 		return -1;
 	}
 
@@ -272,7 +272,7 @@ create_output_for_port(struct wfd_compositor *ec,
 
 	num_modes = wfdGetPortModes(ec->dev, output->port, NULL, 0);
 	if (num_modes < 1) {
-		fprintf(stderr, "failed to get port mode\n");
+		weston_log("failed to get port mode\n");
 		goto cleanup_port;
 	}
 
@@ -300,7 +300,7 @@ create_output_for_port(struct wfd_compositor *ec,
 		}
 	}
 	if (output->base.current == NULL) {
-		fprintf(stderr, "failed to find a native mode\n");
+		weston_log("failed to find a native mode\n");
 		goto cleanup_port;
 	}
 
@@ -314,7 +314,7 @@ create_output_for_port(struct wfd_compositor *ec,
 	num_pipelines = wfdGetPortAttribi(ec->dev, output->port,
 					  WFD_PORT_PIPELINE_ID_COUNT);
 	if (num_pipelines < 1) {
-		fprintf(stderr, "failed to get a bindable pipeline\n");
+		weston_log("failed to get a bindable pipeline\n");
 		goto cleanup_port;
 	}
 	pipelines = calloc(num_pipelines, sizeof *pipelines);
@@ -333,7 +333,7 @@ create_output_for_port(struct wfd_compositor *ec,
 		}
 	}
 	if (output->pipeline_id == WFD_INVALID_PIPELINE_ID) {
-		fprintf(stderr, "no pipeline found for port: %d\n", port);
+		weston_log("no pipeline found for port: %d\n", port);
 		goto cleanup_pipelines;
 	}
 
@@ -348,7 +348,7 @@ create_output_for_port(struct wfd_compositor *ec,
 
 	output->pipeline = wfdCreatePipeline(ec->dev, output->pipeline_id, NULL);
 	if (output->pipeline == WFD_INVALID_HANDLE) {
-		fprintf(stderr, "failed to create a pipeline\n");
+		weston_log("failed to create a pipeline\n");
 		goto cleanup_weston_output;
 	}
 
@@ -367,7 +367,7 @@ create_output_for_port(struct wfd_compositor *ec,
 							 EGL_NATIVE_PIXMAP_KHR,
 							 output->bo[i], NULL);
 
-		printf("output->image[i]: %p\n", output->image[i]);
+		weston_log("output->image[i]: %p\n", output->image[i]);
 		ec->base.image_target_renderbuffer_storage(GL_RENDERBUFFER,
 							   output->image[i]);
 		output->source[i] =
@@ -375,7 +375,7 @@ create_output_for_port(struct wfd_compositor *ec,
 						 output->image[i], NULL);
 
 		if (output->source[i] == WFD_INVALID_HANDLE) {
-			fprintf(stderr, "failed to create source\n");
+			weston_log("failed to create source\n");
 			goto cleanup_pipeline;
 		}
 	}
@@ -616,25 +616,25 @@ wfd_compositor_create(struct wl_display *display,
 
 	ec->udev = udev_new();
 	if (ec->udev == NULL) {
-		fprintf(stderr, "failed to initialize udev context\n");
+		weston_log("failed to initialize udev context\n");
 		return NULL;
 	}
 
 	ec->dev = wfdCreateDevice(WFD_DEFAULT_DEVICE_ID, NULL);
 	if (ec->dev == WFD_INVALID_HANDLE) {
-		fprintf(stderr, "failed to create wfd device\n");
+		weston_log("failed to create wfd device\n");
 		return NULL;
 	}
 
 	ec->event = wfdCreateEvent(ec->dev, NULL);
 	if (ec->event == WFD_INVALID_HANDLE) {
-		fprintf(stderr, "failed to create wfd event\n");
+		weston_log("failed to create wfd event\n");
 		return NULL;
 	}
 
 	ec->base.wl_display = display;
 	if (init_egl(ec) < 0) {
-		fprintf(stderr, "failed to initialize egl\n");
+		weston_log("failed to initialize egl\n");
 		return NULL;
 	}
 
@@ -649,7 +649,7 @@ wfd_compositor_create(struct wl_display *display,
 		return NULL;
 
 	if (create_outputs(ec, connector) < 0) {
-		fprintf(stderr, "failed to create outputs\n");
+		weston_log("failed to create outputs\n");
 		return NULL;
 	}
 
diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c
index c25f093..f09463e 100644
--- a/src/compositor-wayland.c
+++ b/src/compositor-wayland.c
@@ -42,6 +42,7 @@
 #include <EGL/eglext.h>
 
 #include "compositor.h"
+#include "log.h"
 
 struct wayland_compositor {
 	struct weston_compositor	 base;
@@ -217,7 +218,7 @@ create_border(struct wayland_compositor *c)
 
 	image = load_image(DATADIR "/weston/border.png");
 	if (!image) {
-		fprintf(stderr, "could'nt load border image\n");
+		weston_log("could'nt load border image\n");
 		return;
 	}
 
@@ -266,35 +267,35 @@ wayland_compositor_init_egl(struct wayland_compositor *c)
 
 	c->base.display = eglGetDisplay(c->parent.display);
 	if (c->base.display == NULL) {
-		fprintf(stderr, "failed to create display\n");
+		weston_log("failed to create display\n");
 		return -1;
 	}
 
 	if (!eglInitialize(c->base.display, &major, &minor)) {
-		fprintf(stderr, "failed to initialize display\n");
+		weston_log("failed to initialize display\n");
 		return -1;
 	}
 
 	if (!eglBindAPI(EGL_OPENGL_ES_API)) {
-		fprintf(stderr, "failed to bind EGL_OPENGL_ES_API\n");
+		weston_log("failed to bind EGL_OPENGL_ES_API\n");
 		return -1;
 	}
    	if (!eglChooseConfig(c->base.display, config_attribs,
 			     &c->base.config, 1, &n) || n == 0) {
-		fprintf(stderr, "failed to choose config: %d\n", n);
+		weston_log("failed to choose config: %d\n", n);
 		return -1;
 	}
 
 	c->base.context = eglCreateContext(c->base.display, c->base.config,
 					   EGL_NO_CONTEXT, context_attribs);
 	if (c->base.context == NULL) {
-		fprintf(stderr, "failed to create context\n");
+		weston_log("failed to create context\n");
 		return -1;
 	}
 
 	c->dummy_pixmap = wl_egl_pixmap_create(10, 10, 0);
 	if (!c->dummy_pixmap) {
-		fprintf(stderr, "failure to create dummy_pixmap\n");
+		weston_log("failure to create dummy_pixmap\n");
 		return -1;
 	}
 
@@ -303,7 +304,7 @@ wayland_compositor_init_egl(struct wayland_compositor *c)
 				       c->dummy_pixmap, NULL);
 	if (!eglMakeCurrent(c->base.display, c->dummy_egl_surface,
 			    c->dummy_egl_surface, c->base.context)) {
-		fprintf(stderr, "failed to make context current\n");
+		weston_log("failed to make context current\n");
 		return -1;
 	}
 
@@ -335,7 +336,7 @@ wayland_output_repaint(struct weston_output *output_base,
 
 	if (!eglMakeCurrent(compositor->base.display, output->egl_surface,
 			    output->egl_surface, compositor->base.context)) {
-		fprintf(stderr, "failed to make current\n");
+		weston_log("failed to make current\n");
 		return;
 	}
 
@@ -405,7 +406,7 @@ wayland_compositor_create_output(struct wayland_compositor *c,
 				     width + c->border.left + c->border.right,
 				     height + c->border.top + c->border.bottom);
 	if (!output->parent.egl_window) {
-		fprintf(stderr, "failure to create wl_egl_window\n");
+		weston_log("failure to create wl_egl_window\n");
 		goto cleanup_output;
 	}
 
@@ -413,13 +414,13 @@ wayland_compositor_create_output(struct wayland_compositor *c,
 		eglCreateWindowSurface(c->base.display, c->base.config,
 				       output->parent.egl_window, NULL);
 	if (!output->egl_surface) {
-		fprintf(stderr, "failed to create window surface\n");
+		weston_log("failed to create window surface\n");
 		goto cleanup_window;
 	}
 
 	if (!eglMakeCurrent(c->base.display, output->egl_surface,
 			    output->egl_surface, c->base.context)) {
-		fprintf(stderr, "failed to make surface current\n");
+		weston_log("failed to make surface current\n");
 		goto cleanup_surface;
 		return -1;
 	}
@@ -591,7 +592,7 @@ input_handle_keymap(void *data, struct wl_keyboard *keyboard, uint32_t format,
 	close(fd);
 
 	if (!keymap) {
-		fprintf(stderr, "failed to compile keymap\n");
+		weston_log("failed to compile keymap\n");
 		return;
 	}
 
@@ -812,7 +813,7 @@ wayland_compositor_create(struct wl_display *display,
 	c->parent.display = wl_display_connect(display_name);
 
 	if (c->parent.display == NULL) {
-		fprintf(stderr, "failed to create display: %m\n");
+		weston_log("failed to create display: %m\n");
 		return NULL;
 	}
 
diff --git a/src/compositor-x11.c b/src/compositor-x11.c
index edb6f04..e32d9ff 100644
--- a/src/compositor-x11.c
+++ b/src/compositor-x11.c
@@ -26,7 +26,6 @@
 #endif
 
 #include <stddef.h>
-#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <fcntl.h>
@@ -46,6 +45,7 @@
 
 #include "compositor.h"
 #include "../shared/config-parser.h"
+#include "log.h"
 
 struct x11_compositor {
 	struct weston_compositor	 base;
@@ -193,29 +193,29 @@ x11_compositor_init_egl(struct x11_compositor *c)
 
 	c->base.display = eglGetDisplay(c->dpy);
 	if (c->base.display == NULL) {
-		fprintf(stderr, "failed to create display\n");
+		weston_log("failed to create display\n");
 		return -1;
 	}
 
 	if (!eglInitialize(c->base.display, &major, &minor)) {
-		fprintf(stderr, "failed to initialize display\n");
+		weston_log("failed to initialize display\n");
 		return -1;
 	}
 
 	if (!eglBindAPI(EGL_OPENGL_ES_API)) {
-		fprintf(stderr, "failed to bind EGL_OPENGL_ES_API\n");
+		weston_log("failed to bind EGL_OPENGL_ES_API\n");
 		return -1;
 	}
    	if (!eglChooseConfig(c->base.display, config_attribs,
 			     &c->base.config, 1, &n) || n == 0) {
-		fprintf(stderr, "failed to choose config: %d\n", n);
+		weston_log("failed to choose config: %d\n", n);
 		return -1;
 	}
 
 	c->base.context = eglCreateContext(c->base.display, c->base.config,
 					   EGL_NO_CONTEXT, context_attribs);
 	if (c->base.context == NULL) {
-		fprintf(stderr, "failed to create context\n");
+		weston_log("failed to create context\n");
 		return -1;
 	}
 
@@ -223,13 +223,13 @@ x11_compositor_init_egl(struct x11_compositor *c)
 						   c->base.config,
 						   pbuffer_attribs);
 	if (c->dummy_pbuffer == NULL) {
-		fprintf(stderr, "failed to create dummy pbuffer\n");
+		weston_log("failed to create dummy pbuffer\n");
 		return -1;
 	}
 
 	if (!eglMakeCurrent(c->base.display, c->dummy_pbuffer,
 			    c->dummy_pbuffer, c->base.context)) {
-		fprintf(stderr, "failed to make context current\n");
+		weston_log("failed to make context current\n");
 		return -1;
 	}
 
@@ -258,7 +258,7 @@ x11_output_repaint(struct weston_output *output_base,
 
 	if (!eglMakeCurrent(compositor->base.display, output->egl_surface,
 			    output->egl_surface, compositor->base.context)) {
-		fprintf(stderr, "failed to make current\n");
+		weston_log("failed to make current\n");
 		return;
 	}
 
@@ -493,12 +493,12 @@ x11_compositor_create_output(struct x11_compositor *c, int x, int y,
 		eglCreateWindowSurface(c->base.display, c->base.config,
 				       output->window, NULL);
 	if (!output->egl_surface) {
-		fprintf(stderr, "failed to create window surface\n");
+		weston_log("failed to create window surface\n");
 		return -1;
 	}
 	if (!eglMakeCurrent(c->base.display, output->egl_surface,
 			    output->egl_surface, c->base.context)) {
-		fprintf(stderr, "failed to make surface current\n");
+		weston_log("failed to make surface current\n");
 		return -1;
 	}
 
diff --git a/src/compositor.c b/src/compositor.c
index 7d3bad8..472e1aa 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -70,7 +70,7 @@ sigchld_handler(int signal_number, void *data)
 	}
 
 	if (&p->link == &child_process_list) {
-		fprintf(stderr, "unknown child process exited\n");
+		weston_log("unknown child process exited\n");
 		return 1;
 	}
 
@@ -113,7 +113,7 @@ child_client_exec(int sockfd, const char *path)
 	 * non-CLOEXEC fd to pass through exec. */
 	clientfd = dup(sockfd);
 	if (clientfd == -1) {
-		fprintf(stderr, "compositor: dup failed: %m\n");
+		weston_log("compositor: dup failed: %m\n");
 		return;
 	}
 
@@ -121,7 +121,7 @@ child_client_exec(int sockfd, const char *path)
 	setenv("WAYLAND_SOCKET", s, 1);
 
 	if (execl(path, path, NULL) < 0)
-		fprintf(stderr, "compositor: executing '%s' failed: %m\n",
+		weston_log("compositor: executing '%s' failed: %m\n",
 			path);
 }
 
@@ -136,7 +136,7 @@ weston_client_launch(struct weston_compositor *compositor,
 	struct wl_client *client;
 
 	if (os_socketpair_cloexec(AF_UNIX, SOCK_STREAM, 0, sv) < 0) {
-		fprintf(stderr, "weston_client_launch: "
+		weston_log("weston_client_launch: "
 			"socketpair failed while launching '%s': %m\n",
 			path);
 		return NULL;
@@ -146,7 +146,7 @@ weston_client_launch(struct weston_compositor *compositor,
 	if (pid == -1) {
 		close(sv[0]);
 		close(sv[1]);
-		fprintf(stderr,  "weston_client_launch: "
+		weston_log("weston_client_launch: "
 			"fork failed while launching '%s': %m\n", path);
 		return NULL;
 	}
@@ -161,7 +161,7 @@ weston_client_launch(struct weston_compositor *compositor,
 	client = wl_client_create(compositor->wl_display, sv[0]);
 	if (!client) {
 		close(sv[0]);
-		fprintf(stderr, "weston_client_launch: "
+		weston_log("weston_client_launch: "
 			"wl_client_create failed while launching '%s'.\n",
 			path);
 		return NULL;
@@ -279,7 +279,7 @@ surface_to_global_float(struct weston_surface *surface,
 		weston_matrix_transform(&surface->transform.matrix, &v);
 
 		if (fabsf(v.f[3]) < 1e-6) {
-			fprintf(stderr, "warning: numerical instability in "
+			weston_log("warning: numerical instability in "
 				"weston_surface_to_global(), divisor = %g\n",
 				v.f[3]);
 			*x = 0;
@@ -387,7 +387,7 @@ weston_surface_update_transform_enable(struct weston_surface *surface)
 
 	if (weston_matrix_invert(inverse, matrix) < 0) {
 		/* Oops, bad total transformation, not invertible */
-		fprintf(stderr, "error: weston_surface %p"
+		weston_log("error: weston_surface %p"
 			" transformation not invertible.\n", surface);
 		return -1;
 	}
@@ -482,7 +482,7 @@ surface_from_global_float(struct weston_surface *surface,
 		weston_matrix_transform(&surface->transform.inverse, &v);
 
 		if (fabsf(v.f[3]) < 1e-6) {
-			fprintf(stderr, "warning: numerical instability in "
+			weston_log("warning: numerical instability in "
 				"weston_surface_from_global(), divisor = %g\n",
 				v.f[3]);
 			*sx = 0;
@@ -1967,7 +1967,7 @@ touch_set_focus(struct weston_seat *ws, struct wl_surface *surface)
 			find_resource_for_client(&seat->touch->resource_list,
 						 surface->resource.client);
 		if (!resource) {
-			fprintf(stderr, "couldn't find resource\n");
+			weston_log("couldn't find resource\n");
 			return;
 		}
 
@@ -2238,7 +2238,7 @@ static void weston_compositor_xkb_init(struct weston_compositor *ec,
 	if (ec->xkb_context == NULL) {
 		ec->xkb_context = xkb_context_new(0);
 		if (ec->xkb_context == NULL) {
-			fprintf(stderr, "failed to create XKB context\n");
+			weston_log("failed to create XKB context\n");
 			exit(1);
 		}
 	}
@@ -2297,15 +2297,14 @@ weston_xkb_info_new_keymap(struct weston_xkb_info *xkb_info)
 
 	keymap_str = xkb_map_get_as_string(xkb_info->keymap);
 	if (keymap_str == NULL) {
-		fprintf(stderr, "failed to get string version of keymap\n");
+		weston_log("failed to get string version of keymap\n");
 		exit(EXIT_FAILURE);
 	}
 	xkb_info->keymap_size = strlen(keymap_str) + 1;
 
 	xkb_info->keymap_fd = os_create_anonymous_file(xkb_info->keymap_size);
 	if (xkb_info->keymap_fd < 0) {
-		fprintf(stderr,
-			"creating a keymap file for %lu bytes failed: %m\n",
+		weston_log("creating a keymap file for %lu bytes failed: %m\n",
 			(unsigned long) xkb_info->keymap_size);
 		goto err_keymap_str;
 	}
@@ -2314,7 +2313,7 @@ weston_xkb_info_new_keymap(struct weston_xkb_info *xkb_info)
 				     PROT_READ | PROT_WRITE,
 				     MAP_SHARED, xkb_info->keymap_fd, 0);
 	if (xkb_info->keymap_area == MAP_FAILED) {
-		fprintf(stderr, "failed to mmap() %lu bytes\n",
+		weston_log("failed to mmap() %lu bytes\n",
 			(unsigned long) xkb_info->keymap_size);
 		goto err_dev_zero;
 	}
@@ -2341,9 +2340,8 @@ weston_compositor_build_global_keymap(struct weston_compositor *ec)
 						     &ec->xkb_names,
 						     0);
 	if (ec->xkb_info.keymap == NULL) {
-		fprintf(stderr, "failed to compile global XKB keymap\n");
-		fprintf(stderr,
-			"  tried rules %s, model %s, layout %s, variant %s, "
+		weston_log("failed to compile global XKB keymap\n");
+		weston_log("  tried rules %s, model %s, layout %s, variant %s, "
 			"options %s",
 			ec->xkb_names.rules, ec->xkb_names.model,
 			ec->xkb_names.layout, ec->xkb_names.variant,
@@ -2372,7 +2370,7 @@ weston_seat_init_keyboard(struct weston_seat *seat, struct xkb_keymap *keymap)
 
 	seat->xkb_state.state = xkb_state_new(seat->xkb_info.keymap);
 	if (seat->xkb_state.state == NULL) {
-		fprintf(stderr, "failed to initialise XKB state\n");
+		weston_log("failed to initialise XKB state\n");
 		exit(1);
 	}
 
@@ -2654,7 +2652,7 @@ compile_shader(GLenum type, const char *source)
 	glGetShaderiv(s, GL_COMPILE_STATUS, &status);
 	if (!status) {
 		glGetShaderInfoLog(s, sizeof msg, NULL, msg);
-		fprintf(stderr, "shader info: %s\n", msg);
+		weston_log("shader info: %s\n", msg);
 		return GL_NONE;
 	}
 
@@ -2683,7 +2681,7 @@ weston_shader_init(struct weston_shader *shader,
 	glGetProgramiv(shader->program, GL_LINK_STATUS, &status);
 	if (!status) {
 		glGetProgramInfoLog(shader->program, sizeof msg, NULL, msg);
-		fprintf(stderr, "link info: %s\n", msg);
+		weston_log("link info: %s\n", msg);
 		return -1;
 	}
 
@@ -2931,13 +2929,12 @@ weston_compositor_init(struct weston_compositor *ec,
 
 	extensions = (const char *) glGetString(GL_EXTENSIONS);
 	if (!extensions) {
-		fprintf(stderr, "Retrieving GL extension string failed.\n");
+		weston_log("Retrieving GL extension string failed.\n");
 		return -1;
 	}
 
 	if (!strstr(extensions, "GL_EXT_texture_format_BGRA8888")) {
-		fprintf(stderr,
-			"GL_EXT_texture_format_BGRA8888 not available\n");
+		weston_log("GL_EXT_texture_format_BGRA8888 not available\n");
 		return -1;
 	}
 
@@ -2952,7 +2949,7 @@ weston_compositor_init(struct weston_compositor *ec,
 	extensions =
 		(const char *) eglQueryString(ec->display, EGL_EXTENSIONS);
 	if (!extensions) {
-		fprintf(stderr, "Retrieving EGL extension string failed.\n");
+		weston_log("Retrieving EGL extension string failed.\n");
 		return -1;
 	}
 
@@ -3032,7 +3029,7 @@ static int on_term_signal(int signal_number, void *data)
 {
 	struct wl_display *display = data;
 
-	fprintf(stderr, "caught signal %d\n", signal_number);
+	weston_log("caught signal %d\n", signal_number);
 	wl_display_terminate(display);
 
 	return 1;
@@ -3045,12 +3042,12 @@ on_segv_signal(int s, siginfo_t *siginfo, void *context)
 	int i, count;
 	Dl_info info;
 
-	fprintf(stderr, "caught segv\n");
+	weston_log("caught segv\n");
 
 	count = backtrace(buffer, ARRAY_LENGTH(buffer));
 	for (i = 0; i < count; i++) {
 		dladdr(buffer[i], &info);
-		fprintf(stderr, "  [%016lx]  %s  (%s)\n",
+		weston_log("  [%016lx]  %s  (%s)\n",
 			(long) buffer[i],
 			info.dli_sname ? info.dli_sname : "--",
 			info.dli_fname);
@@ -3073,15 +3070,13 @@ load_module(const char *name, const char *entrypoint, void **handle)
 
 	module = dlopen(path, RTLD_LAZY);
 	if (!module) {
-		fprintf(stderr,
-			"failed to load module '%s': %s\n", path, dlerror());
+		weston_log("failed to load module '%s': %s\n", path, dlerror());
 		return NULL;
 	}
 
 	init = dlsym(module, entrypoint);
 	if (!init) {
-		fprintf(stderr,
-			"failed to lookup init function in '%s': %s\n",
+		weston_log("failed to lookup init function in '%s': %s\n",
 			path, dlerror());
 		return NULL;
 	}
@@ -3139,7 +3134,7 @@ int main(int argc, char *argv[])
 			     ARRAY_LENGTH(core_options), argc, argv);
 
 	if (!getenv("XDG_RUNTIME_DIR")) {
-		fprintf(stderr, xdg_error_message);
+		weston_log(xdg_error_message);
 		exit(EXIT_FAILURE);
 	}
 
@@ -3184,12 +3179,12 @@ int main(int argc, char *argv[])
 
 	ec = backend_init(display, argc, argv, config_file);
 	if (ec == NULL) {
-		fprintf(stderr, "failed to create compositor\n");
+		weston_log("failed to create compositor\n");
 		exit(EXIT_FAILURE);
 	}
 
 	for (i = 1; argv[i]; i++)
-		fprintf(stderr, "unhandled option: %s\n", argv[i]);
+		weston_log("unhandled option: %s\n", argv[i]);
 	if (argv[1])
 		exit(EXIT_FAILURE);
 
@@ -3220,7 +3215,7 @@ int main(int argc, char *argv[])
 		exit(EXIT_FAILURE);
 
 	if (wl_display_add_socket(display, socket_name)) {
-		fprintf(stderr, "failed to add socket: %m\n");
+		weston_log("failed to add socket: %m\n");
 		exit(EXIT_FAILURE);
 	}
 
diff --git a/src/evdev-touchpad.c b/src/evdev-touchpad.c
index d371a65..7e167d1 100644
--- a/src/evdev-touchpad.c
+++ b/src/evdev-touchpad.c
@@ -20,7 +20,6 @@
  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#include <stdio.h>
 #include <stdlib.h>
 #include <math.h>
 #include <string.h>
diff --git a/src/evdev.c b/src/evdev.c
index 23d22d7..9660996 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -20,7 +20,6 @@
  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  */
 
-#include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <linux/input.h>
@@ -32,6 +31,7 @@
 #include "evdev.h"
 #include "evdev-private.h"
 #include "launcher-util.h"
+#include "log.h"
 
 static void
 evdev_led_update(struct weston_seat *seat_base, enum weston_led leds)
@@ -498,7 +498,7 @@ evdev_input_device_create(struct evdev_seat *master,
 	if (device->is_mt) {
 		device->mtdev = mtdev_new_open(device->fd);
 		if (!device->mtdev)
-			fprintf(stderr, "mtdev failed to open for %s\n", path);
+			weston_log("mtdev failed to open for %s\n", path);
 	}
 
 	device->source = wl_event_loop_add_fd(ec->input_loop, device->fd,
@@ -576,7 +576,7 @@ evdev_notify_keyboard_focus(struct evdev_seat *seat)
 		ret = ioctl(device->fd,
 			    EVIOCGKEY(sizeof evdev_keys), evdev_keys);
 		if (ret < 0) {
-			fprintf(stderr, "failed to get keys for device %s\n",
+			weston_log("failed to get keys for device %s\n",
 				device->devnode);
 			continue;
 		}
@@ -629,7 +629,7 @@ evdev_add_devices(struct udev *udev, struct weston_seat *seat_base)
 	evdev_notify_keyboard_focus(seat);
 
 	if (wl_list_empty(&seat->devices_list)) {
-		fprintf(stderr,
+		weston_log(
 			"warning: no input devices on entering Weston. "
 			"Possible causes:\n"
 			"\t- no permissions to read /dev/input/event*\n"
@@ -685,7 +685,7 @@ evdev_enable_udev_monitor(struct udev *udev, struct weston_seat *seat_base)
 
 	master->udev_monitor = udev_monitor_new_from_netlink(udev, "udev");
 	if (!master->udev_monitor) {
-		fprintf(stderr, "udev: failed to create the udev monitor\n");
+		weston_log("udev: failed to create the udev monitor\n");
 		return 0;
 	}
 
@@ -693,7 +693,7 @@ evdev_enable_udev_monitor(struct udev *udev, struct weston_seat *seat_base)
 			"input", NULL);
 
 	if (udev_monitor_enable_receiving(master->udev_monitor)) {
-		fprintf(stderr, "udev: failed to bind the udev monitor\n");
+		weston_log("udev: failed to bind the udev monitor\n");
 		udev_monitor_unref(master->udev_monitor);
 		return 0;
 	}
diff --git a/src/filter.c b/src/filter.c
index 72ef9be..91e588d 100644
--- a/src/filter.c
+++ b/src/filter.c
@@ -21,7 +21,6 @@
  */
 
 #include <stdlib.h>
-#include <stdio.h>
 #include <stdint.h>
 #include <limits.h>
 #include <math.h>
diff --git a/src/shell.c b/src/shell.c
index e25bf71..32dfbbf 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -36,6 +36,7 @@
 #include "compositor.h"
 #include "desktop-shell-server-protocol.h"
 #include "../shared/config-parser.h"
+#include "log.h"
 
 enum animation_type {
 	ANIMATION_NONE,
@@ -974,7 +975,7 @@ create_black_surface(struct weston_compositor *ec,
 
 	surface = weston_surface_create(ec);
 	if (surface == NULL) {
-		fprintf(stderr, "no memory\n");
+		weston_log("no memory\n");
 		return NULL;
 	}
 
@@ -1313,13 +1314,13 @@ create_shell_surface(void *shell, struct weston_surface *surface,
 	struct shell_surface *shsurf;
 
 	if (surface->configure) {
-		fprintf(stderr, "surface->configure already set\n");
+		weston_log("surface->configure already set\n");
 		return NULL;
 	}
 
 	shsurf = calloc(1, sizeof *shsurf);
 	if (!shsurf) {
-		fprintf(stderr, "no memory to allocate shell surface\n");
+		weston_log("no memory to allocate shell surface\n");
 		return NULL;
 	}
 
@@ -1412,7 +1413,7 @@ launch_screensaver(struct desktop_shell *shell)
 		return;
 
 	if (shell->screensaver.process.pid != 0) {
-		fprintf(stderr, "old screensaver still running\n");
+		weston_log("old screensaver still running\n");
 		return;
 	}
 
@@ -1495,7 +1496,7 @@ handle_lock_surface_destroy(struct wl_listener *listener, void *data)
 	struct desktop_shell *shell =
 	    container_of(listener, struct desktop_shell, lock_surface_listener);
 
-	fprintf(stderr, "lock surface gone\n");
+	weston_log("lock surface gone\n");
 	shell->lock_surface = NULL;
 }
 
@@ -2324,11 +2325,11 @@ desktop_shell_sigchld(struct weston_process *process, int status)
 
 	shell->child.deathcount++;
 	if (shell->child.deathcount > 5) {
-		fprintf(stderr, "weston-desktop-shell died, giving up.\n");
+		weston_log("weston-desktop-shell died, giving up.\n");
 		return;
 	}
 
-	fprintf(stderr, "weston-desktop-shell died, respawning...\n");
+	weston_log("weston-desktop-shell died, respawning...\n");
 	launch_desktop_shell_process(shell);
 }
 
diff --git a/src/tablet-shell.c b/src/tablet-shell.c
index 925817c..91b1514 100644
--- a/src/tablet-shell.c
+++ b/src/tablet-shell.c
@@ -23,12 +23,12 @@
 #include <sys/wait.h>
 #include <unistd.h>
 #include <stdlib.h>
-#include <stdio.h>
 #include <string.h>
 #include <linux/input.h>
 
 #include "compositor.h"
 #include "tablet-shell-server-protocol.h"
+#include "log.h"
 
 /*
  * TODO: Don't fade back from black until we've received a lockscreen
@@ -104,8 +104,7 @@ tablet_shell_sigchld(struct weston_process *process, int status)
 
 	shell->process.pid = 0;
 
-	fprintf(stderr,
-		"weston-tablet-shell crashed, exit code %d\n", status);
+	weston_log("weston-tablet-shell crashed, exit code %d\n", status);
 }
 
 static void
@@ -115,7 +114,7 @@ tablet_shell_set_state(struct tablet_shell *shell, int state)
 		"STARTING", "LOCKED", "HOME", "SWITCHER", "TASK"
 	};
 
-	fprintf(stderr, "switching to state %s (from %s)\n",
+	weston_log("switching to state %s (from %s)\n",
 		states[state], states[shell->state]);
 	shell->previous_state = shell->state;
 	shell->state = state;
@@ -363,7 +362,7 @@ tablet_shell_create_client(struct wl_client *client,
 	tablet_client->surface = NULL;
 	shell->current_client = tablet_client;
 
-	fprintf(stderr, "created client %p, id %d, name %s, fd %d\n",
+	weston_log("created client %p, id %d, name %s, fd %d\n",
 		tablet_client->client, id, name, fd);
 }
 
diff --git a/src/tty.c b/src/tty.c
index 78d5ba5..a8b2aed 100644
--- a/src/tty.c
+++ b/src/tty.c
@@ -35,6 +35,7 @@
 #include <sys/stat.h>
 
 #include "compositor.h"
+#include "log.h"
 
 /* Introduced in 2.6.38 */
 #ifndef K_OFF
@@ -91,19 +92,19 @@ try_open_vt(struct tty *tty)
 
 	tty0 = open("/dev/tty0", O_WRONLY | O_CLOEXEC);
 	if (tty0 < 0) {
-		fprintf(stderr, "could not open tty0: %m\n");
+		weston_log("could not open tty0: %m\n");
 		return -1;
 	}
 
 	if (ioctl(tty0, VT_OPENQRY, &tty->vt) < 0 || tty->vt == -1) {
-		fprintf(stderr, "could not open tty0: %m\n");
+		weston_log("could not open tty0: %m\n");
 		close(tty0);
 		return -1;
 	}
 
 	close(tty0);
 	snprintf(filename, sizeof filename, "/dev/tty%d", tty->vt);
-	fprintf(stderr, "compositor: using new vt %s\n", filename);
+	weston_log("compositor: using new vt %s\n", filename);
 	fd = open(filename, O_RDWR | O_NOCTTY | O_CLOEXEC);
 	if (fd < 0)
 		return fd;
@@ -144,7 +145,7 @@ tty_create(struct weston_compositor *compositor, tty_vt_func_t vt_func,
 
 	if (tty_nr > 0) {
 		snprintf(filename, sizeof filename, "/dev/tty%d", tty_nr);
-		fprintf(stderr, "compositor: using %s\n", filename);
+		weston_log("compositor: using %s\n", filename);
 		tty->fd = open(filename, O_RDWR | O_NOCTTY | O_CLOEXEC);
 		tty->vt = tty_nr;
 	} else if (fstat(tty->fd, &buf) == 0 &&
@@ -160,7 +161,7 @@ tty_create(struct weston_compositor *compositor, tty_vt_func_t vt_func,
 	}
 
 	if (tty->fd <= 0) {
-		fprintf(stderr, "failed to open tty: %m\n");
+		weston_log("failed to open tty: %m\n");
 		free(tty);
 		return NULL;
 	}
@@ -173,13 +174,13 @@ tty_create(struct weston_compositor *compositor, tty_vt_func_t vt_func,
 	if (tty->starting_vt != tty->vt) {
 		if (ioctl(tty->fd, VT_ACTIVATE, tty->vt) < 0 ||
 		    ioctl(tty->fd, VT_WAITACTIVE, tty->vt) < 0) {
-			fprintf(stderr, "failed to swtich to new vt\n");
+			weston_log("failed to swtich to new vt\n");
 			return NULL;
 		}
 	}
 
 	if (tcgetattr(tty->fd, &tty->terminal_attributes) < 0) {
-		fprintf(stderr, "could not get terminal attributes: %m\n");
+		weston_log("could not get terminal attributes: %m\n");
 		goto err;
 	}
 
@@ -191,7 +192,7 @@ tty_create(struct weston_compositor *compositor, tty_vt_func_t vt_func,
 	raw_attributes.c_oflag |= OPOST | OCRNL;
 
 	if (tcsetattr(tty->fd, TCSANOW, &raw_attributes) < 0)
-		fprintf(stderr, "could not put terminal into raw mode: %m\n");
+		weston_log("could not put terminal into raw mode: %m\n");
 
 	loop = wl_display_get_event_loop(compositor->wl_display);
 
@@ -210,13 +211,13 @@ tty_create(struct weston_compositor *compositor, tty_vt_func_t vt_func,
 	}
 
 	if (ret) {
-		fprintf(stderr, "failed to set K_OFF keyboard mode on tty: %m\n");
+		weston_log("failed to set K_OFF keyboard mode on tty: %m\n");
 		goto err_attr;
 	}
 
 	ret = ioctl(tty->fd, KDSETMODE, KD_GRAPHICS);
 	if (ret) {
-		fprintf(stderr, "failed to set KD_GRAPHICS mode on tty: %m\n");
+		weston_log("failed to set KD_GRAPHICS mode on tty: %m\n");
 		goto err_kdkbmode;
 	}
 
@@ -225,7 +226,7 @@ tty_create(struct weston_compositor *compositor, tty_vt_func_t vt_func,
 	mode.relsig = SIGUSR1;
 	mode.acqsig = SIGUSR1;
 	if (ioctl(tty->fd, VT_SETMODE, &mode) < 0) {
-		fprintf(stderr, "failed to take control of vt handling\n");
+		weston_log("failed to take control of vt handling\n");
 		goto err_kdmode;
 	}
 
@@ -265,19 +266,17 @@ tty_destroy(struct tty *tty)
 		wl_event_source_remove(tty->input_source);
 
 	if (ioctl(tty->fd, KDSKBMODE, tty->kb_mode))
-		fprintf(stderr, "failed to restore keyboard mode: %m\n");
+		weston_log("failed to restore keyboard mode: %m\n");
 
 	if (ioctl(tty->fd, KDSETMODE, KD_TEXT))
-		fprintf(stderr,
-			"failed to set KD_TEXT mode on tty: %m\n");
+		weston_log("failed to set KD_TEXT mode on tty: %m\n");
 
 	if (tcsetattr(tty->fd, TCSANOW, &tty->terminal_attributes) < 0)
-		fprintf(stderr,
-			"could not restore terminal to canonical mode\n");
+		weston_log("could not restore terminal to canonical mode\n");
 
 	mode.mode = VT_AUTO;
 	if (ioctl(tty->fd, VT_SETMODE, &mode) < 0)
-		fprintf(stderr, "could not reset vt handling\n");
+		weston_log("could not reset vt handling\n");
 
 	if (tty->has_vt && tty->vt != tty->starting_vt) {
 		ioctl(tty->fd, VT_ACTIVATE, tty->starting_vt);
diff --git a/src/xwayland/launcher.c b/src/xwayland/launcher.c
index d8880bd..0184c08 100644
--- a/src/xwayland/launcher.c
+++ b/src/xwayland/launcher.c
@@ -34,6 +34,7 @@
 
 #include "xwayland.h"
 #include "xserver-server-protocol.h"
+#include "../log.h"
 
 
 static int
@@ -44,7 +45,7 @@ weston_xserver_handle_event(int listen_fd, uint32_t mask, void *data)
 	int sv[2], client_fd;
 
 	if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, sv) < 0) {
-		fprintf(stderr, "socketpair failed\n");
+		weston_log("socketpair failed\n");
 		return 1;
 	}
 
@@ -71,11 +72,11 @@ weston_xserver_handle_event(int listen_fd, uint32_t mask, void *data)
 			  "-nolisten", "all",
 			  "-terminate",
 			  NULL) < 0)
-			fprintf(stderr, "exec failed: %m\n");
+			weston_log("exec failed: %m\n");
 		exit(-1);
 
 	default:
-		fprintf(stderr, "forked X server, pid %d\n", mxs->process.pid);
+		weston_log("forked X server, pid %d\n", mxs->process.pid);
 
 		close(sv[1]);
 		mxs->client = wl_client_create(mxs->wl_display, sv[0]);
@@ -87,7 +88,7 @@ weston_xserver_handle_event(int listen_fd, uint32_t mask, void *data)
 		break;
 
 	case -1:
-		fprintf(stderr, "failed to fork\n");
+		weston_log( "failed to fork\n");
 		break;
 	}
 
@@ -135,14 +136,14 @@ weston_xserver_cleanup(struct weston_process *process, int status)
 				     weston_xserver_handle_event, mxs);
 
 	if (mxs->wm) {
-		fprintf(stderr, "xserver exited, code %d\n", status);
+		weston_log("xserver exited, code %d\n", status);
 		weston_wm_destroy(mxs->wm);
 		mxs->wm = NULL;
 	} else {
 		/* If the X server crashes before it binds to the
 		 * xserver interface, shut down and don't try
 		 * again. */
-		fprintf(stderr, "xserver crashing too fast: %d\n", status);
+		weston_log("xserver crashing too fast: %d\n", status);
 		weston_xserver_shutdown(mxs);
 	}
 }
@@ -164,7 +165,7 @@ bind_xserver(struct wl_client *client,
 
 	wxs->wm = weston_wm_create(wxs);
 	if (wxs->wm == NULL) {
-		fprintf(stderr, "failed to create wm\n");
+		weston_log("failed to create wm\n");
 	}
 
 	xserver_send_listen_socket(wxs->resource, wxs->abstract_fd);
@@ -187,7 +188,7 @@ bind_to_abstract_socket(int display)
 			     "%c/tmp/.X11-unix/X%d", 0, display);
 	size = offsetof(struct sockaddr_un, sun_path) + name_size;
 	if (bind(fd, (struct sockaddr *) &addr, size) < 0) {
-		fprintf(stderr, "failed to bind to @%s: %s\n",
+		weston_log("failed to bind to @%s: %s\n",
 			addr.sun_path + 1, strerror(errno));
 		close(fd);
 		return -1;
@@ -218,7 +219,7 @@ bind_to_unix_socket(int display)
 	size = offsetof(struct sockaddr_un, sun_path) + name_size;
 	unlink(addr.sun_path);
 	if (bind(fd, (struct sockaddr *) &addr, size) < 0) {
-		fprintf(stderr, "failed to bind to %s (%s)\n",
+		weston_log("failed to bind to %s (%s)\n",
 			addr.sun_path, strerror(errno));
 		close(fd);
 		return -1;
@@ -245,7 +246,7 @@ create_lockfile(int display, char *lockfile, size_t lsize)
 	if (fd < 0 && errno == EEXIST) {
 		fd = open(lockfile, O_CLOEXEC, O_RDONLY);
 		if (fd < 0 || read(fd, pid, 11) != 11) {
-			fprintf(stderr, "can't read lock file %s: %s\n",
+			weston_log("can't read lock file %s: %s\n",
 				lockfile, strerror(errno));
 			errno = EEXIST;
 			return -1;
@@ -253,7 +254,7 @@ create_lockfile(int display, char *lockfile, size_t lsize)
 
 		other = strtol(pid, &end, 0);
 		if (end != pid + 10) {
-			fprintf(stderr, "can't parse lock file %s\n",
+			weston_log("can't parse lock file %s\n",
 				lockfile);
 			close(fd);
 			errno = EEXIST;
@@ -262,8 +263,7 @@ create_lockfile(int display, char *lockfile, size_t lsize)
 
 		if (kill(other, 0) < 0 && errno == ESRCH) {
 			/* stale lock file; unlink and try again */
-			fprintf(stderr,
-				"unlinking stale lock file %s\n", lockfile);
+			weston_log("unlinking stale lock file %s\n", lockfile);
 			close(fd);
 			if (unlink(lockfile))
 				/* If we fail to unlink, return EEXIST
@@ -277,7 +277,7 @@ create_lockfile(int display, char *lockfile, size_t lsize)
 		errno = EEXIST;
 		return -1;
 	} else if (fd < 0) {
-		fprintf(stderr, "failed to create lock file %s: %s\n",
+		weston_log("failed to create lock file %s: %s\n",
 			lockfile, strerror(errno));
 		return -1;
 	}
@@ -356,7 +356,7 @@ weston_xserver_init(struct weston_compositor *compositor)
 	}
 
 	snprintf(display_name, sizeof display_name, ":%d", mxs->display);
-	fprintf(stderr, "xserver listening on display %s\n", display_name);
+	weston_log("xserver listening on display %s\n", display_name);
 	setenv("DISPLAY", display_name, 1);
 
 	mxs->loop = wl_display_get_event_loop(display);
diff --git a/src/xwayland/selection.c b/src/xwayland/selection.c
index 579425b..21fbb59 100644
--- a/src/xwayland/selection.c
+++ b/src/xwayland/selection.c
@@ -23,12 +23,12 @@
 #define _GNU_SOURCE
 
 #include <stdlib.h>
-#include <stdio.h>
 #include <string.h>
 #include <unistd.h>
 #include <fcntl.h>
 
 #include "xwayland.h"
+#include "../log.h"
 
 static int
 weston_wm_write_property(int fd, uint32_t mask, void *data)
@@ -46,11 +46,11 @@ weston_wm_write_property(int fd, uint32_t mask, void *data)
 		free(wm->property_reply);
 		wl_event_source_remove(wm->property_source);
 		close(fd);
-		fprintf(stderr, "write error to target fd: %m\n");
+		weston_log("write error to target fd: %m\n");
 		return 1;
 	}
 
-	fprintf(stderr, "wrote %d (chunk size %d) of %d bytes\n",
+	weston_log("wrote %d (chunk size %d) of %d bytes\n",
 		wm->property_start + len,
 		len, xcb_get_property_value_length(wm->property_reply));
 
@@ -64,7 +64,7 @@ weston_wm_write_property(int fd, uint32_t mask, void *data)
 					    wm->selection_window,
 					    wm->atom.wl_selection);
 		} else {
-			fprintf(stderr, "transfer complete\n");
+			weston_log("transfer complete\n");
 			close(fd);
 		}
 	}
@@ -100,7 +100,7 @@ weston_wm_get_incr_chunk(struct weston_wm *wm)
 					     wm);
 		wm->property_reply = reply;
 	} else {
-		fprintf(stderr, "transfer complete\n");
+		weston_log("transfer complete\n");
 		close(wm->data_source_fd);
 		free(reply);
 	}
@@ -345,20 +345,20 @@ weston_wm_read_data_source(int fd, uint32_t mask, void *data)
 
 	len = read(fd, p, available);
 	if (len == -1) {
-		fprintf(stderr, "read error from data source: %m\n");
+		weston_log("read error from data source: %m\n");
 		weston_wm_send_selection_notify(wm, XCB_ATOM_NONE);
 		wl_event_source_remove(wm->property_source);
 		close(fd);
 		wl_array_release(&wm->source_data);
 	}
 
-	fprintf(stderr, "read %d (available %d, mask 0x%x) bytes: \"%.*s\"\n",
+	weston_log("read %d (available %d, mask 0x%x) bytes: \"%.*s\"\n",
 		len, available, mask, len, (char *) p);
 
 	wm->source_data.size = current + len;
 	if (wm->source_data.size >= incr_chunk_size) {
 		if (!wm->incr) {
-			fprintf(stderr, "got %zu bytes, starting incr\n",
+			weston_log("got %zu bytes, starting incr\n",
 				wm->source_data.size);
 			wm->incr = 1;
 			xcb_change_property(wm->conn,
@@ -373,19 +373,19 @@ weston_wm_read_data_source(int fd, uint32_t mask, void *data)
 			wl_event_source_remove(wm->property_source);
 			weston_wm_send_selection_notify(wm, wm->selection_request.property);
 		} else if (wm->selection_property_set) {
-			fprintf(stderr, "got %zu bytes, waiting for "
+			weston_log("got %zu bytes, waiting for "
 				"property delete\n", wm->source_data.size);
 
 			wm->flush_property_on_delete = 1;
 			wl_event_source_remove(wm->property_source);
 		} else {
-			fprintf(stderr, "got %zu bytes, "
+			weston_log("got %zu bytes, "
 				"property deleted, seting new property\n",
 				wm->source_data.size);
 			weston_wm_flush_source_data(wm);
 		}
 	} else if (len == 0 && !wm->incr) {
-		fprintf(stderr, "non-incr transfer complete\n");
+		weston_log("non-incr transfer complete\n");
 		/* Non-incr transfer all done. */
 		weston_wm_flush_source_data(wm);
 		weston_wm_send_selection_notify(wm, wm->selection_request.property);
@@ -395,14 +395,14 @@ weston_wm_read_data_source(int fd, uint32_t mask, void *data)
 		wl_array_release(&wm->source_data);
 		wm->selection_request.requestor = XCB_NONE;
 	} else if (len == 0 && wm->incr) {
-		fprintf(stderr, "incr transfer complete\n");
+		weston_log("incr transfer complete\n");
 
 		wm->flush_property_on_delete = 1;
 		if (wm->selection_property_set) {
-			fprintf(stderr, "got %zu bytes, waiting for "
+			weston_log("got %zu bytes, waiting for "
 				"property delete\n", wm->source_data.size);
 		} else {
-			fprintf(stderr, "got %zu bytes, "
+			weston_log("got %zu bytes, "
 				"property deleted, seting new property\n",
 				wm->source_data.size);
 			weston_wm_flush_source_data(wm);
@@ -413,7 +413,7 @@ weston_wm_read_data_source(int fd, uint32_t mask, void *data)
 		wm->data_source_fd = -1;
 		close(fd);
 	} else {
-		fprintf(stderr, "nothing happened, buffered the bytes\n");
+		weston_log("nothing happened, buffered the bytes\n");
 	}
 
 	return 1;
@@ -427,7 +427,7 @@ weston_wm_send_data(struct weston_wm *wm, xcb_atom_t target, const char *mime_ty
 	int p[2];
 
 	if (pipe2(p, O_CLOEXEC | O_NONBLOCK) == -1) {
-		fprintf(stderr, "pipe2 failed: %m\n");
+		weston_log("pipe2 failed: %m\n");
 		weston_wm_send_selection_notify(wm, XCB_ATOM_NONE);
 		return;
 	}
@@ -450,11 +450,11 @@ weston_wm_send_incr_chunk(struct weston_wm *wm)
 {
 	int length;
 
-	fprintf(stderr, "property deleted\n");
+	weston_log("property deleted\n");
 
 	wm->selection_property_set = 0;
 	if (wm->flush_property_on_delete) {
-		fprintf(stderr, "setting new property, %zu bytes\n",
+		weston_log("setting new property, %zu bytes\n",
 			wm->source_data.size);
 		wm->flush_property_on_delete = 0;
 		length = weston_wm_flush_source_data(wm);
@@ -510,11 +510,11 @@ weston_wm_handle_selection_request(struct weston_wm *wm,
 	xcb_selection_request_event_t *selection_request =
 		(xcb_selection_request_event_t *) event;
 
-	fprintf(stderr, "selection request, %s, ",
+	weston_log("selection request, %s, ",
 		get_atom_name(wm->conn, selection_request->selection));
-	fprintf(stderr, "target %s, ",
+	weston_log_continue("target %s, ",
 		get_atom_name(wm->conn, selection_request->target));
-	fprintf(stderr, "property %s\n",
+	weston_log_continue("property %s\n",
 		get_atom_name(wm->conn, selection_request->property));
 
 	wm->selection_request = *selection_request;
@@ -539,7 +539,7 @@ weston_wm_handle_selection_request(struct weston_wm *wm,
 		weston_wm_send_data(wm, wm->atom.utf8_string,
 				  "text/plain;charset=utf-8");
 	} else {
-		fprintf(stderr, "can only handle UTF8_STRING targets...\n");
+		weston_log("can only handle UTF8_STRING targets...\n");
 		weston_wm_send_selection_notify(wm, XCB_ATOM_NONE);
 	}
 }
@@ -553,7 +553,7 @@ weston_wm_handle_xfixes_selection_notify(struct weston_wm *wm,
 	struct weston_compositor *compositor;
 	uint32_t serial;
 
-	printf("xfixes selection notify event: owner %d\n",
+	weston_log("xfixes selection notify event: owner %d\n",
 	       xfixes_selection_notify->owner);
 
 	if (xfixes_selection_notify->owner == XCB_WINDOW_NONE) {
@@ -577,7 +577,7 @@ weston_wm_handle_xfixes_selection_notify(struct weston_wm *wm,
 	 * answer TIMESTAMP conversion requests correctly. */
 	if (xfixes_selection_notify->owner == wm->selection_window) {
 		wm->selection_timestamp = xfixes_selection_notify->timestamp;
-		fprintf(stderr, "our window, skipping\n");
+		weston_log("our window, skipping\n");
 		return;
 	}
 
@@ -641,7 +641,7 @@ weston_wm_set_selection(struct wl_listener *listener, void *data)
 	end = (const char **)
 		((char *) source->mime_types.data + source->mime_types.size);
 	while (p < end) {
-		fprintf(stderr, "  %s\n", *p);
+		weston_log("  %s\n", *p);
 		if (strcmp(*p, "text/plain") == 0 ||
 		    strcmp(*p, "text/plain;charset=utf-8") == 0)
 			has_text_plain = 1;
diff --git a/src/xwayland/window-manager.c b/src/xwayland/window-manager.c
index b79e477..da4d800 100644
--- a/src/xwayland/window-manager.c
+++ b/src/xwayland/window-manager.c
@@ -36,6 +36,7 @@
 
 #include "../../shared/cairo-util.h"
 #include "../compositor.h"
+#include "../log.h"
 #include "xserver-server-protocol.h"
 #include "hash.h"
 
@@ -149,13 +150,13 @@ dump_property(struct weston_wm *wm,
 	int width, len;
 	uint32_t i;
 
-	width = fprintf(stderr, "%s: ", get_atom_name(wm->conn, property));
+	width = weston_log_continue("%s: ", get_atom_name(wm->conn, property));
 	if (reply == NULL) {
-		fprintf(stderr, "(no reply)\n");
+		weston_log_continue("(no reply)\n");
 		return;
 	}
 
-	width += fprintf(stderr,
+	width += weston_log_continue(
 			 "%s/%d, length %d (value_len %d): ",
 			 get_atom_name(wm->conn, reply->type),
 			 reply->format,
@@ -164,7 +165,7 @@ dump_property(struct weston_wm *wm,
 
 	if (reply->type == wm->atom.incr) {
 		incr_value = xcb_get_property_value(reply);
-		fprintf(stderr, "%d\n", *incr_value);
+		weston_log_continue("%d\n", *incr_value);
 	} else if (reply->type == wm->atom.utf8_string ||
 	      reply->type == wm->atom.string) {
 		text_value = xcb_get_property_value(reply);
@@ -172,23 +173,23 @@ dump_property(struct weston_wm *wm,
 			len = 40;
 		else
 			len = reply->value_len;
-		fprintf(stderr, "\"%.*s\"\n", len, text_value);
+		weston_log_continue("\"%.*s\"\n", len, text_value);
 	} else if (reply->type == XCB_ATOM_ATOM) {
 		atom_value = xcb_get_property_value(reply);
 		for (i = 0; i < reply->value_len; i++) {
 			name = get_atom_name(wm->conn, atom_value[i]);
 			if (width + strlen(name) + 2 > 78) {
-				fprintf(stderr, "\n    ");
+				weston_log_continue("\n    ");
 				width = 4;
 			} else if (i > 0) {
-				width += fprintf(stderr, ", ");
+				width +=  weston_log_continue(", ");
 			}
 
-			width += fprintf(stderr, "%s", name);
+			width +=  weston_log_continue("%s", name);
 		}
-		fprintf(stderr, "\n");
+		weston_log_continue("\n");
 	} else {
-		fprintf(stderr, "huh?\n");
+		weston_log_continue("huh?\n");
 	}
 }
 
@@ -340,7 +341,7 @@ weston_wm_handle_configure_request(struct weston_wm *wm, xcb_generic_event_t *ev
 	uint32_t mask, values[16];
 	int x, y, width, height, i = 0;
 
-	fprintf(stderr, "XCB_CONFIGURE_REQUEST (window %d) %d,%d @ %dx%d\n",
+	weston_log("XCB_CONFIGURE_REQUEST (window %d) %d,%d @ %dx%d\n",
 		configure_request->window,
 		configure_request->x, configure_request->y,
 		configure_request->width, configure_request->height);
@@ -390,7 +391,7 @@ weston_wm_handle_configure_notify(struct weston_wm *wm, xcb_generic_event_t *eve
 
 	window = hash_table_lookup(wm->window_hash, configure_notify->window);
 
-	fprintf(stderr, "XCB_CONFIGURE_NOTIFY (%s window %d) %d,%d @ %dx%d\n",
+	weston_log("XCB_CONFIGURE_NOTIFY (%s window %d) %d,%d @ %dx%d\n",
 		configure_notify->window == window->id ? "client" : "frame",
 		configure_notify->window,
 		configure_notify->x, configure_notify->y,
@@ -476,7 +477,7 @@ weston_wm_handle_map_request(struct weston_wm *wm, xcb_generic_event_t *event)
 	int x, y, width, height;
 
 	if (our_resource(wm, map_request->window)) {
-		fprintf(stderr, "XCB_MAP_REQUEST (window %d, ours)\n",
+		weston_log("XCB_MAP_REQUEST (window %d, ours)\n",
 			map_request->window);
 		return;
 	}
@@ -516,7 +517,7 @@ weston_wm_handle_map_request(struct weston_wm *wm, xcb_generic_event_t *event)
 	xcb_configure_window(wm->conn, window->id,
 			     XCB_CONFIG_WINDOW_BORDER_WIDTH, values);
 
-	fprintf(stderr, "XCB_MAP_REQUEST (window %d, %p, frame %d)\n",
+	weston_log("XCB_MAP_REQUEST (window %d, %p, frame %d)\n",
 		window->id, window, window->frame_id);
 
 	xcb_map_window(wm->conn, map_request->window);
@@ -539,12 +540,12 @@ weston_wm_handle_map_notify(struct weston_wm *wm, xcb_generic_event_t *event)
 	xcb_map_notify_event_t *map_notify = (xcb_map_notify_event_t *) event;
 
 	if (our_resource(wm, map_notify->window)) {
-			fprintf(stderr, "XCB_MAP_NOTIFY (window %d, ours)\n",
+			weston_log("XCB_MAP_NOTIFY (window %d, ours)\n",
 				map_notify->window);
 			return;
 	}
 
-	fprintf(stderr, "XCB_MAP_NOTIFY (window %d)\n", map_notify->window);
+	weston_log("XCB_MAP_NOTIFY (window %d)\n", map_notify->window);
 }
 
 static void
@@ -554,8 +555,7 @@ weston_wm_handle_unmap_notify(struct weston_wm *wm, xcb_generic_event_t *event)
 		(xcb_unmap_notify_event_t *) event;
 	struct weston_wm_window *window;
 
-	fprintf(stderr,
-		"XCB_UNMAP_NOTIFY (window %d, event %d%s)\n",
+	weston_log("XCB_UNMAP_NOTIFY (window %d, event %d%s)\n",
 		unmap_notify->window,
 		unmap_notify->event,
 		our_resource(wm, unmap_notify->window) ? ", ours" : "");
@@ -677,10 +677,10 @@ weston_wm_handle_property_notify(struct weston_wm *wm, xcb_generic_event_t *even
 	if (window)
 		window->properties_dirty = 1;
 
-	fprintf(stderr, "XCB_PROPERTY_NOTIFY: window %d, ",
+	weston_log("XCB_PROPERTY_NOTIFY: window %d, ",
 		property_notify->window);
 	if (property_notify->state == XCB_PROPERTY_DELETE)
-		fprintf(stderr, "deleted\n");
+		weston_log("deleted\n");
 	else
 		read_and_dump_property(wm, property_notify->window,
 				       property_notify->atom);
@@ -699,7 +699,7 @@ weston_wm_window_create(struct weston_wm *wm,
 
 	window = malloc(sizeof *window);
 	if (window == NULL) {
-		fprintf(stderr, "failed to allocate window\n");
+		weston_log("failed to allocate window\n");
 		return;
 	}
 
@@ -730,8 +730,7 @@ weston_wm_handle_create_notify(struct weston_wm *wm, xcb_generic_event_t *event)
 	xcb_create_notify_event_t *create_notify =
 		(xcb_create_notify_event_t *) event;
 
-	fprintf(stderr,
-		"XCB_CREATE_NOTIFY (window %d, width %d, height %d%s%s)\n",
+	weston_log("XCB_CREATE_NOTIFY (window %d, width %d, height %d%s%s)\n",
 		create_notify->window,
 		create_notify->width, create_notify->height,
 		create_notify->override_redirect ? ", override" : "",
@@ -752,7 +751,7 @@ weston_wm_handle_destroy_notify(struct weston_wm *wm, xcb_generic_event_t *event
 		(xcb_destroy_notify_event_t *) event;
 	struct weston_wm_window *window;
 
-	fprintf(stderr, "XCB_DESTROY_NOTIFY, win %d, event %d%s\n",
+	weston_log("XCB_DESTROY_NOTIFY, win %d, event %d%s\n",
 		destroy_notify->window,
 		destroy_notify->event,
 		our_resource(wm, destroy_notify->window) ? ", ours" : "");
@@ -771,8 +770,7 @@ weston_wm_handle_reparent_notify(struct weston_wm *wm, xcb_generic_event_t *even
 		(xcb_reparent_notify_event_t *) event;
 	struct weston_wm_window *window;
 
-	fprintf(stderr,
-		"XCB_REPARENT_NOTIFY (window %d, parent %d, event %d)\n",
+	weston_log("XCB_REPARENT_NOTIFY (window %d, parent %d, event %d)\n",
 		reparent_notify->window,
 		reparent_notify->parent,
 		reparent_notify->event);
@@ -842,7 +840,7 @@ weston_wm_handle_client_message(struct weston_wm *wm,
 
 	window = hash_table_lookup(wm->window_hash, client_message->window);
 
-	fprintf(stderr, "XCB_CLIENT_MESSAGE (%s %d %d %d %d %d)\n",
+	weston_log("XCB_CLIENT_MESSAGE (%s %d %d %d %d %d)\n",
 		get_atom_name(wm->conn, client_message->type),
 		client_message->data.data32[0],
 		client_message->data.data32[1],
@@ -865,7 +863,7 @@ weston_wm_handle_button(struct weston_wm *wm, xcb_generic_event_t *event)
 	struct theme *t = wm->theme;
 	int width, height;
 
-	fprintf(stderr, "XCB_BUTTON_%s (detail %d)\n",
+	weston_log("XCB_BUTTON_%s (detail %d)\n",
 		button->response_type == XCB_BUTTON_PRESS ?
 		"PRESS" : "RELEASE", button->detail);
 
@@ -946,7 +944,7 @@ weston_wm_handle_event(int fd, uint32_t mask, void *data)
 			weston_wm_handle_destroy_notify(wm, event);
 			break;
 		case XCB_MAPPING_NOTIFY:
-			fprintf(stderr, "XCB_MAPPING_NOTIFY\n");
+			weston_log("XCB_MAPPING_NOTIFY\n");
 			break;
 		case XCB_PROPERTY_NOTIFY:
 			weston_wm_handle_property_notify(wm, event);
@@ -1048,7 +1046,7 @@ wxs_wm_get_resources(struct weston_wm *wm)
 
 	wm->xfixes = xcb_get_extension_data(wm->conn, &xcb_xfixes_id);
 	if (!wm->xfixes || !wm->xfixes->present)
-		fprintf(stderr, "xfixes not available\n");
+		weston_log("xfixes not available\n");
 
 	xfixes_cookie = xcb_xfixes_query_version(wm->conn,
 						 XCB_XFIXES_MAJOR_VERSION,
@@ -1056,7 +1054,7 @@ wxs_wm_get_resources(struct weston_wm *wm)
 	xfixes_reply = xcb_xfixes_query_version_reply(wm->conn,
 						      xfixes_cookie, NULL);
 
-	printf("xfixes version: %d.%d\n",
+	weston_log("xfixes version: %d.%d\n",
 	       xfixes_reply->major_version, xfixes_reply->minor_version);
 
 	free(xfixes_reply);
@@ -1147,7 +1145,7 @@ weston_wm_create(struct weston_xserver *wxs)
 	}
 
 	if (socketpair(AF_UNIX, SOCK_STREAM | SOCK_CLOEXEC, 0, sv) < 0) {
-		fprintf(stderr, "socketpair failed\n");
+		weston_log("socketpair failed\n");
 		hash_table_destroy(wm->window_hash);
 		free(wm);
 		return NULL;
@@ -1160,7 +1158,7 @@ weston_wm_create(struct weston_xserver *wxs)
 	/* xcb_connect_to_fd takes ownership of the fd. */
 	wm->conn = xcb_connect_to_fd(sv[0], NULL);
 	if (xcb_connection_has_error(wm->conn)) {
-		fprintf(stderr, "xcb_connect_to_fd failed\n");
+		weston_log("xcb_connect_to_fd failed\n");
 		close(sv[0]);
 		hash_table_destroy(wm->window_hash);
 		free(wm);
@@ -1206,7 +1204,7 @@ weston_wm_create(struct weston_xserver *wxs)
 	wl_signal_add(&wxs->compositor->activate_signal,
 		      &wm->activate_listener);
 
-	fprintf(stderr, "created wm\n");
+	weston_log("created wm\n");
 
 	return wm;
 }
@@ -1231,7 +1229,7 @@ surface_destroy(struct wl_listener *listener, void *data)
 		container_of(listener,
 			     struct weston_wm_window, surface_destroy_listener);
 
-	fprintf(stderr, "surface for xid %d destroyed\n", window->id);
+	weston_log("surface for xid %d destroyed\n", window->id);
 }
 
 static struct weston_wm_window *
@@ -1351,11 +1349,11 @@ xserver_set_window_id(struct wl_client *client, struct wl_resource *resource,
 
 	window = hash_table_lookup(wm->window_hash, id);
 	if (window == NULL) {
-		fprintf(stderr, "set_window_id for unknown window %d\n", id);
+		weston_log("set_window_id for unknown window %d\n", id);
 		return;
 	}
 
-	fprintf(stderr, "set_window_id %d for surface %p\n", id, surface);
+	weston_log("set_window_id %d for surface %p\n", id, surface);
 
 	weston_wm_window_read_properties(window);
 
-- 
1.7.5.4



More information about the wayland-devel mailing list