diff --git a/pom.xml b/pom.xml
index c101484e36729383a59a19bb03c4757d886f0024..e92086cc70b16ea878f851fb8694038a2593bddb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -195,11 +195,15 @@
 		</dependency>
 		<dependency>
 			<groupId>org.slf4j</groupId>
-			<artifactId>slf4j-log4j12</artifactId>
+			<artifactId>jcl-over-slf4j</artifactId>
 		</dependency>
 		<dependency>
-			<groupId>log4j</groupId>
-			<artifactId>log4j</artifactId>
+			<groupId>ch.qos.logback</groupId>
+			<artifactId>logback-classic</artifactId>
+		</dependency>
+		<dependency>
+			<groupId>org.codehaus.janino</groupId>
+			<artifactId>janino</artifactId>
 		</dependency>
 		<dependency>
 			<groupId>org.ektorp</groupId>
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
new file mode 100644
index 0000000000000000000000000000000000000000..21fc14439d9d6ac5e44c31194c75aa1fe40bcbde
--- /dev/null
+++ b/src/main/resources/logback.xml
@@ -0,0 +1,39 @@
+<configuration>
+	<if condition='isDefined("arsnova.log.properties")'>
+		<then>
+			<property file="${arsnova.log.properties}" />
+		</then>
+	</if>
+	<if condition='!isDefined("arsnova.log.level")'>
+		<then>
+			<property name="arsnova.log.level" value="${arsnova.log.level.root:-INFO}" />
+		</then>
+	</if>
+	<if condition='!isDefined("arsnova.log.level.spring")'>
+		<then>
+			<property name="arsnova.log.level.spring" value="${arsnova.log.level.root:-INFO}" />
+		</then>
+	</if>
+
+	<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>%d{HH:mm:ss.SSS} %highlight(%-5level) %logger{36} - %msg%n%ex{${arsnova.log.exceptions:-short}}</pattern>
+		</encoder>
+	</appender>
+
+	<root level="${arsnova.log.level.root:-INFO}">
+		<appender-ref ref="STDOUT" />
+	</root>
+
+	<logger name="de.thm.arsnova" level="${arsnova.log.level}" />
+	<logger name="org.springframework" level="${arsnova.log.level.spring}" />
+
+	<logger name="com.corundumstudio.socketio" level="WARN" />
+	<logger name="com.corundumstudio.socketio.handler.AuthorizeHandler" level="OFF" />
+	<logger name="com.corundumstudio.socketio.handler.WrongUrlHandler" level="ERROR" />
+	<logger name="io.netty" level="WARN" />
+	<logger name="io.netty.channel.DefaultChannelPipeline" level="ERROR" />
+	<logger name="org.pac4j.oauth.profile" level="WARN" />
+	<logger name="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping" level="WARN" />
+	<logger name="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" level="WARN" />
+</configuration>
diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml
index 3195f1d88612682ef6c57f673c26bedc550fe578..12a4fd76825b2c7246efeb4ca20f6aa201661c98 100644
--- a/src/main/webapp/WEB-INF/web.xml
+++ b/src/main/webapp/WEB-INF/web.xml
@@ -15,10 +15,6 @@
 			de.thm.arsnova.config.SecurityConfig
 		</param-value>
 	</context-param>
-	<context-param>
-		<param-name>log4jConfigLocation</param-name>
-		<param-value>/WEB-INF/classes/log4j.properties</param-value>
-	</context-param>
 	<servlet>
 		<servlet-name>arsnova</servlet-name>
 		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>