Index: uspace/srv/logger/Makefile
===================================================================
--- uspace/srv/logger/Makefile	(revision cba45affa1185205ef668562c3239439a610819d)
+++ uspace/srv/logger/Makefile	(revision 330a59fe7c66811911a74643fc111d0def861908)
@@ -33,4 +33,5 @@
 SOURCES = \
 	ctl.c \
+	initlvl.c \
 	level.c \
 	logs.c \
Index: uspace/srv/logger/initlvl.c
===================================================================
--- uspace/srv/logger/initlvl.c	(revision 330a59fe7c66811911a74643fc111d0def861908)
+++ uspace/srv/logger/initlvl.c	(revision 330a59fe7c66811911a74643fc111d0def861908)
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2012 Vojtech Horky
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * - Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * - Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * - The name of the author may not be used to endorse or promote products
+ *   derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * @addtogroup logger
+ * @{
+ */
+
+/** @file
+ */
+#include <errno.h>
+#include <sysinfo.h>
+#include <str.h>
+#include "logger.h"
+
+static void parse_single_level_setting(char *setting)
+{
+	char *tmp;
+	char *key = strtok_r(setting, "=", &tmp);
+	char *value = strtok_r(NULL, "=", &tmp);
+	if (key == NULL)
+		return;
+	if (value == NULL) {
+		log_level_t level;
+		int rc = log_level_from_str(key, &level);
+		if (rc != EOK)
+			return;
+		set_default_logging_level(level);
+		return;
+	}
+
+
+	log_level_t level;
+	int rc = log_level_from_str(value, &level);
+	if (rc != EOK)
+		return;
+
+	logger_toplevel_log_t *log = find_or_create_toplevel_log(key);
+	if (log == NULL)
+		return;
+
+	log->logged_level = level;
+}
+
+void parse_level_settings(char *settings)
+{
+	char *tmp;
+	char *single_setting = strtok_r(settings, " ", &tmp);
+	while (single_setting != NULL) {
+		parse_single_level_setting(single_setting);
+		single_setting = strtok_r(NULL, " ", &tmp);
+	}
+}
+
+void parse_initial_settings(void)
+{
+	size_t argument_size;
+	void *argument = sysinfo_get_data("init_args.logger", &argument_size);
+	if (argument == NULL)
+		return;
+
+	char level_str[200];
+	str_cpy(level_str, 200, (const char *) argument);
+
+	parse_level_settings(level_str);
+}
+
+/**
+ * @}
+ */
Index: uspace/srv/logger/logger.h
===================================================================
--- uspace/srv/logger/logger.h	(revision cba45affa1185205ef668562c3239439a610819d)
+++ uspace/srv/logger/logger.h	(revision 330a59fe7c66811911a74643fc111d0def861908)
@@ -76,4 +76,7 @@
 void logger_connection_handler_writer(ipc_callid_t);
 
+void parse_initial_settings(void);
+void parse_level_settings(char *);
+
 #endif
 
Index: uspace/srv/logger/main.c
===================================================================
--- uspace/srv/logger/main.c	(revision cba45affa1185205ef668562c3239439a610819d)
+++ uspace/srv/logger/main.c	(revision 330a59fe7c66811911a74643fc111d0def861908)
@@ -69,16 +69,12 @@
 	printf(NAME ": HelenOS Logging Service\n");
 	
-	/* Get default logging level from sysinfo (if available). */
-	log_level_t boot_logging_level = LVL_NOTE;
-	int rc = logctl_get_boot_level(&boot_logging_level);
-	if (rc == EOK)
-		set_default_logging_level(boot_logging_level);
-	else
-		printf(NAME ": Warn: failed to get logging level from sysinfo: %s.\n",
-		    str_error(rc));
+	parse_initial_settings();
+	for (int i = 1; i < argc; i++) {
+		parse_level_settings(argv[i]);
+	}
 
 	async_set_client_connection(connection_handler);
 	
-	rc = service_register(SERVICE_LOGGER);
+	int rc = service_register(SERVICE_LOGGER);
 	if (rc != EOK) {
 		printf(NAME ": failed to register: %s.\n", str_error(rc));
