+++ /dev/null
-<?xml version="1.0" encoding="UTF-8" ?>
-
-<!--
- Logging configuration.
- By default logs are generated in logs/sonar.log.
-
- See http://logback.qos.ch/manual/configuration.html
--->
-<configuration debug="false">
- <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"/>
-
- <appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <File>${SONAR_HOME}/logs/sonar.log</File>
- <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
- <param name="FileNamePattern" value="${SONAR_HOME}/logs/sonar.%i.log"/>
- <param name="MinIndex" value="1"/>
- <param name="MaxIndex" value="3"/>
- </rollingPolicy>
- <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
- <param name="MaxFileSize" value="5MB"/>
- </triggeringPolicy>
- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <!-- Use %d{yyyy.MM.dd HH:mm:ss.SSS} to display milliseconds -->
- <pattern>
- %d{yyyy.MM.dd HH:mm:ss} %-5level %thread [%logger{20}] %X %msg%n
- </pattern>
- </encoder>
- </appender>
-
- <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
- <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
- <pattern>
- %d{yyyy.MM.dd HH:mm:ss} %-5level %msg%n
- </pattern>
- </encoder>
- </appender>
-
- <logger name="console" additivity="false">
- <level value="INFO"/>
- <appender-ref ref="CONSOLE"/>
- </logger>
-
- <!-- Display Rails warnings and errors -->
- <logger name="rails">
- <level value="WARN"/>
- </logger>
-
- <logger name="org.hibernate.cache.ReadWriteCache">
- <!-- removing "An item was expired by the cache while it was locked (increase your cache timeout)" msg -->
- <level value="ERROR"/>
- </logger>
- <logger name="org.hibernate">
- <level value="WARN"/>
- </logger>
-
- <!-- Display SQL requests and results by setting the following loggers to level DEBUG -->
- <logger name="org.hibernate.SQL">
- <level value="WARN"/>
- </logger>
- <logger name="org.apache.ibatis">
- <level value="WARN"/>
- </logger>
- <logger name="java.sql">
- <level value="WARN"/>
- </logger>
- <logger name="java.sql.ResultSet">
- <level value="WARN"/>
- </logger>
-
- <!-- Execution of measure filters -->
- <logger name="org.sonar.MEASURE_FILTER">
- <level value="WARN"/>
- </logger>
-
- <!-- Turn off ElasticSearch logging -->
- <logger name="org.elasticsearch">
- <level value="OFF"/>
- </logger>
- <logger name="org.elasticsearch.node">
- <level value="INFO"/>
- </logger>
- <logger name="org.elasticsearch.http">
- <level value="INFO"/>
- </logger>
- <!-- ElasticSearch profiling information -->
- <!--
- <logger name="org.sonar.server.search">
- <level value="DEBUG"/>
- </logger>
- -->
-
- <!-- Export of dry run database -->
- <!--
- <logger name="org.sonar.core.persistence.DbTemplate">
- <level value="DEBUG"/>
- </logger>
- <logger name="org.sonar.core.persistence.DryRunDatabaseFactory">
- <level value="DEBUG"/>
- </logger>
- -->
-
- <root>
- <level value="INFO"/>
- <appender-ref ref="LOGFILE"/>
- </root>
-
-</configuration>
private static final String JRUBY_MAX_RUNTIMES = "jruby.max.runtimes";
private static final String RAILS_ENV = "rails.env";
private static final String PROPERTY_CONTEXT = "sonar.web.context";
+ private static final String PROPERTY_LOG_VERBOSE = "sonar.log.verbose";
static void configure(Tomcat tomcat, Env env, Props props) {
String ctx = getContext(props);
try {
Context context = tomcat.addWebapp(ctx, env.file("web").getAbsolutePath());
context.setConfigFile(env.file("web/META-INF/context.xml").toURI().toURL());
+ context.addParameter(PROPERTY_LOG_VERBOSE, props.of(PROPERTY_LOG_VERBOSE, "false"));
configureRailsMode(props, context);
context.setJarScanner(new NullJarScanner());
<sonar.runtime.mode>development</sonar.runtime.mode>
<sonar.es.http.host>127.0.0.1</sonar.es.http.host>
<sonar.es.http.port>9200</sonar.es.http.port>
+ <sonar.log.verbose>true</sonar.log.verbose>
<sonar.log.profilingLevel>FULL</sonar.log.profilingLevel>
</systemProperties>
</configuration>
*/
package org.sonar.server.platform;
+import com.google.common.collect.ImmutableMap;
import org.slf4j.LoggerFactory;
import org.sonar.core.config.Logback;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
-import java.io.File;
-import java.util.Collections;
+
+import java.util.Map;
public final class PlatformLifecycleListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent event) {
try {
- configureLogback();
+ configureLogback(event);
Platform.getInstance().init(event.getServletContext());
Platform.getInstance().start();
} catch (Throwable t) {
}
/**
- * Configure Logback with $SONAR_HOME/conf/logback.xml
+ * Configure Logback from classpath, with configuration from sonar.properties
*/
- private void configureLogback() {
- Logback.configure(new File(SonarHome.getHome(), "conf/logback.xml"), Collections.<String, String>emptyMap());
+ private void configureLogback(ServletContextEvent event) {
+ boolean sonarLogVerbose = Boolean.valueOf(event.getServletContext().getInitParameter("sonar.log.verbose"));
+ Map<String, String> variables = ImmutableMap.of("ROOT_LOGGER_LEVEL", sonarLogVerbose ? "DEBUG" : "INFO");
+ Logback.configure("/org/sonar/server/platform/logback.xml", variables);
}
}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!--
+ Logging configuration.
+ By default logs are generated in logs/sonar.log.
+
+ See http://logback.qos.ch/manual/configuration.html
+-->
+<configuration debug="false">
+ <contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"/>
+
+ <appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
+ <File>${SONAR_HOME}/logs/sonar.log</File>
+ <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
+ <param name="FileNamePattern" value="${SONAR_HOME}/logs/sonar.%i.log"/>
+ <param name="MinIndex" value="1"/>
+ <param name="MaxIndex" value="3"/>
+ </rollingPolicy>
+ <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
+ <param name="MaxFileSize" value="5MB"/>
+ </triggeringPolicy>
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <!-- Use %d{yyyy.MM.dd HH:mm:ss.SSS} to display milliseconds -->
+ <pattern>
+ %d{yyyy.MM.dd HH:mm:ss} %-5level %thread [%logger{20}] %X %msg%n
+ </pattern>
+ </encoder>
+ </appender>
+
+ <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
+ <pattern>
+ %d{yyyy.MM.dd HH:mm:ss} %-5level %msg%n
+ </pattern>
+ </encoder>
+ </appender>
+
+ <logger name="console" additivity="false">
+ <level value="INFO"/>
+ <appender-ref ref="CONSOLE"/>
+ </logger>
+
+ <!-- Display Rails warnings and errors -->
+ <logger name="rails">
+ <level value="WARN"/>
+ </logger>
+
+ <logger name="org.hibernate.cache.ReadWriteCache">
+ <!-- removing "An item was expired by the cache while it was locked (increase your cache timeout)" msg -->
+ <level value="ERROR"/>
+ </logger>
+ <logger name="org.hibernate">
+ <level value="WARN"/>
+ </logger>
+
+ <!-- Display SQL requests and results by setting the following loggers to level DEBUG -->
+ <logger name="org.hibernate.SQL">
+ <level value="WARN"/>
+ </logger>
+ <logger name="org.apache.ibatis">
+ <level value="WARN"/>
+ </logger>
+ <logger name="java.sql">
+ <level value="WARN"/>
+ </logger>
+ <logger name="java.sql.ResultSet">
+ <level value="WARN"/>
+ </logger>
+
+ <!-- Execution of measure filters -->
+ <logger name="org.sonar.MEASURE_FILTER">
+ <level value="WARN"/>
+ </logger>
+
+ <!-- Turn off ElasticSearch logging -->
+ <logger name="org.elasticsearch">
+ <level value="OFF"/>
+ </logger>
+ <logger name="org.elasticsearch.node">
+ <level value="INFO"/>
+ </logger>
+ <logger name="org.elasticsearch.http">
+ <level value="INFO"/>
+ </logger>
+
+ <root>
+ <level value="${ROOT_LOGGER_LEVEL}"/>
+ <appender-ref ref="LOGFILE"/>
+ </root>
+
+</configuration>