Browse Source

Log in console when server is up

tags/4.0
Simon Brandhof 10 years ago
parent
commit
37f6f8a9ef

+ 16
- 14
sonar-application/src/main/assembly/conf/logback.xml View File

@@ -9,7 +9,7 @@
<configuration debug="false">
<contextListener class="ch.qos.logback.classic.jul.LevelChangePropagator"/>

<appender name="SONAR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<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"/>
@@ -27,21 +27,23 @@
</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" additivity="false">
<logger name="rails">
<level value="WARN"/>
<appender-ref ref="SONAR_FILE"/>
</logger>
<!--
Profiling of HTTP and SQL requests in Rails:
<logger name="rails" additivity="false">
<level value="DEBUG"/>
</logger>
Example of command-line to get the HTTP requests with execution time greater than 10s :
grep 'rails Completed in [0-9]\{5,\}ms' < sonar.log
-->

<logger name="org.hibernate.cache.ReadWriteCache">
<!-- removing "An item was expired by the cache while it was locked (increase your cache timeout)" msg -->
@@ -82,7 +84,7 @@

<root>
<level value="INFO"/>
<appender-ref ref="SONAR_FILE"/>
<appender-ref ref="LOGFILE"/>
</root>

</configuration>

+ 1
- 1
sonar-application/src/main/assembly/conf/wrapper.conf View File

@@ -71,7 +71,7 @@ wrapper.console.loglevel=INFO
wrapper.logfile=../../logs/sonar.log

# Format of output for the log file. (See docs for formats)
wrapper.logfile.format=TLM
wrapper.logfile.format=M

# Log Level for log file output. (See docs for log levels)
wrapper.logfile.loglevel=INFO

+ 1
- 1
sonar-application/src/main/java/org/sonar/application/EmbeddedTomcat.java View File

@@ -42,7 +42,7 @@ class EmbeddedTomcat {

void start() throws IOException, LifecycleException {
if (tomcat != null || hook != null) {
throw new IllegalStateException("Tomcat is already started");
throw new IllegalStateException("Server is already started");
}

// '%2F' (slash /) and '%5C' (backslash \) are permitted as path delimiters in URLs

+ 11
- 5
sonar-application/src/main/java/org/sonar/application/Logging.java View File

@@ -42,11 +42,14 @@ class Logging {

static void configure(Tomcat tomcat, Env env, Props props) {
tomcat.setSilent(false);
tomcat.getService().addLifecycleListener(new StartupLogger(LoggerFactory.getLogger(Logging.class)));

tomcat.getService().addLifecycleListener(new LifecycleLogger(console()));
configureLogbackAccess(tomcat, env, props);
}

static Logger console() {
return LoggerFactory.getLogger("console");
}

private static void configureLogbackAccess(Tomcat tomcat, Env env, Props props) {
if (props.booleanOf(PROPERTY_ENABLE_ACCESS_LOGS, true)) {
LogbackValve valve = new LogbackValve();
@@ -56,17 +59,20 @@ class Logging {
}
}

static class StartupLogger implements LifecycleListener {
static class LifecycleLogger implements LifecycleListener {
private Logger logger;

StartupLogger(Logger logger) {
LifecycleLogger(Logger logger) {
this.logger = logger;
}

@Override
public void lifecycleEvent(LifecycleEvent event) {
if ("after_start".equals(event.getType())) {
logger.info("Web server is up");
logger.info("Web server is started");

} else if ("after_destroy".equals(event.getType())) {
logger.info("Web server is stopped");
}
}
}

+ 7
- 6
sonar-application/src/test/java/org/sonar/application/LoggingTest.java View File

@@ -31,11 +31,8 @@ import org.mockito.ArgumentMatcher;
import org.mockito.Mockito;
import org.slf4j.Logger;

import java.io.File;
import java.util.Properties;

import static org.fest.assertions.Assertions.assertThat;
import static org.fest.assertions.Fail.fail;
import static org.mockito.Matchers.argThat;
import static org.mockito.Mockito.*;

@@ -63,9 +60,9 @@ public class LoggingTest {
}

@Test
public void log_when_started() {
public void log_when_started_and_stopped() {
Logger logger = mock(Logger.class);
Logging.StartupLogger listener = new Logging.StartupLogger(logger);
Logging.LifecycleLogger listener = new Logging.LifecycleLogger(logger);

LifecycleEvent event = new LifecycleEvent(mock(Lifecycle.class), "before_init", null);
listener.lifecycleEvent(event);
@@ -73,6 +70,10 @@ public class LoggingTest {

event = new LifecycleEvent(mock(Lifecycle.class), "after_start", null);
listener.lifecycleEvent(event);
verify(logger).info("Web server is up");
verify(logger).info("Web server is started");

event = new LifecycleEvent(mock(Lifecycle.class), "after_destroy", null);
listener.lifecycleEvent(event);
verify(logger).info("Web server is stopped");
}
}

+ 1
- 1
sonar-application/src/test/java/org/sonar/application/StartServerTest.java View File

@@ -114,7 +114,7 @@ public class StartServerTest {
starter.start();
fail();
} catch (IllegalStateException e) {
assertThat(e.getMessage()).isEqualTo("Tomcat is already started");
assertThat(e.getMessage()).isEqualTo("Server is already started");
started = true;
break;
}

+ 0
- 2
sonar-server/src/main/java/org/sonar/server/platform/Platform.java View File

@@ -410,12 +410,10 @@ public final class Platform {
public void stop() {
if (rootContainer != null) {
try {
TimeProfiler profiler = new TimeProfiler().start("Stop server");
rootContainer.stopComponents();
rootContainer = null;
connected = false;
started = false;
profiler.stop();
} catch (Exception e) {
LoggerFactory.getLogger(getClass()).debug("Fail to stop server - ignored", e);
}

Loading…
Cancel
Save