diff --git a/tests/unit/framework/log/LoggerTest.php b/tests/unit/framework/log/LoggerTest.php
new file mode 100644
index 0000000..31a4c3b
--- /dev/null
+++ b/tests/unit/framework/log/LoggerTest.php
@@ -0,0 +1,33 @@
+<?php
+/**
+ * @author Carsten Brandt <mail@cebe.cc>
+ */
+
+namespace yiiunit\framework\log;
+
+
+use yii\debug\LogTarget;
+use yii\log\FileTarget;
+use yii\log\Logger;
+use yiiunit\TestCase;
+
+class LoggerTest extends TestCase
+{
+
+	public function testLog()
+	{
+		$logger = new Logger();
+
+		$logger->log('test1', Logger::LEVEL_INFO);
+		$this->assertEquals(1, count($logger->messages));
+		$this->assertEquals('test1', $logger->messages[0][0]);
+		$this->assertEquals(Logger::LEVEL_INFO, $logger->messages[0][1]);
+		$this->assertEquals('application', $logger->messages[0][2]);
+
+		$logger->log('test2', Logger::LEVEL_ERROR, 'category');
+		$this->assertEquals(2, count($logger->messages));
+		$this->assertEquals('test2', $logger->messages[1][0]);
+		$this->assertEquals(Logger::LEVEL_ERROR, $logger->messages[1][1]);
+		$this->assertEquals('category', $logger->messages[1][2]);
+	}
+}
\ No newline at end of file
diff --git a/tests/unit/framework/log/TargetTest.php b/tests/unit/framework/log/TargetTest.php
new file mode 100644
index 0000000..b4ceb4c
--- /dev/null
+++ b/tests/unit/framework/log/TargetTest.php
@@ -0,0 +1,90 @@
+<?php
+/**
+ * @author Carsten Brandt <mail@cebe.cc>
+ */
+
+namespace yiiunit\framework\log;
+
+
+use yii\debug\LogTarget;
+use yii\log\FileTarget;
+use yii\log\Logger;
+use yii\log\Target;
+use yiiunit\TestCase;
+
+class TargetTest extends TestCase
+{
+	public static $messages;
+
+	public function filters()
+	{
+		return [
+			[[], ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']],
+
+			[['levels' => 0], ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']],
+			[
+				['levels' => Logger::LEVEL_INFO | Logger::LEVEL_WARNING | Logger::LEVEL_ERROR | Logger::LEVEL_TRACE],
+				['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
+			],
+			[['levels' => ['error']], ['B', 'G', 'H']],
+			[['levels' => Logger::LEVEL_ERROR], ['B', 'G', 'H']],
+			[['levels' => ['error', 'warning']], ['B', 'C', 'G', 'H']],
+			[['levels' => Logger::LEVEL_ERROR | Logger::LEVEL_WARNING], ['B', 'C', 'G', 'H']],
+
+			[['categories' => ['application']], ['A', 'B', 'C', 'D', 'E']],
+			[['categories' => ['application*']], ['A', 'B', 'C', 'D', 'E', 'F']],
+			[['categories' => ['application.*']], ['F']],
+			[['categories' => ['application.components']], []],
+			[['categories' => ['application.components.Test']], ['F']],
+			[['categories' => ['application.components.*']], ['F']],
+			[['categories' => ['application.*', 'yii.db.*']], ['F', 'G', 'H']],
+			[['categories' => ['application.*', 'yii.db.*'], 'except' => ['yii.db.Command.*']], ['F', 'G']],
+
+			[['categories' => ['application', 'yii.db.*'], 'levels' => Logger::LEVEL_ERROR], ['B', 'G', 'H']],
+			[['categories' => ['application'], 'levels' => Logger::LEVEL_ERROR], ['B']],
+			[['categories' => ['application'], 'levels' => Logger::LEVEL_ERROR | Logger::LEVEL_WARNING], ['B', 'C']],
+		];
+	}
+
+	/**
+	 * @dataProvider filters
+	 */
+	public function testFilter($filter, $expected)
+	{
+		static::$messages = [];
+
+		$logger = new Logger([
+			'targets' => [new TestTarget(array_merge($filter, ['logVars' => []]))],
+			'flushInterval' => 1,
+		]);
+		$logger->log('testA', Logger::LEVEL_INFO);
+		$logger->log('testB', Logger::LEVEL_ERROR);
+		$logger->log('testC', Logger::LEVEL_WARNING);
+		$logger->log('testD', Logger::LEVEL_TRACE);
+		$logger->log('testE', Logger::LEVEL_INFO, 'application');
+		$logger->log('testF', Logger::LEVEL_INFO, 'application.components.Test');
+		$logger->log('testG', Logger::LEVEL_ERROR, 'yii.db.Command');
+		$logger->log('testH', Logger::LEVEL_ERROR, 'yii.db.Command.whatever');
+
+		$this->assertEquals(count($expected), count(static::$messages));
+		$i = 0;
+		foreach($expected as $e) {
+			$this->assertEquals('test' . $e, static::$messages[$i++][0]);
+		}
+	}
+}
+
+class TestTarget extends Target
+{
+	public $exportInterval = 1;
+
+	/**
+	 * Exports log [[messages]] to a specific destination.
+	 * Child classes must implement this method.
+	 */
+	public function export()
+	{
+		TargetTest::$messages = array_merge(TargetTest::$messages, $this->messages);
+		$this->messages = [];
+	}
+}
\ No newline at end of file