diff --git a/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java index e18338b37be3..fe90cf55f562 100644 --- a/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/CompileServerManager.java @@ -62,7 +62,9 @@ import org.jetbrains.jps.server.Server; import javax.tools.JavaCompiler; import javax.tools.ToolProvider; import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; +import java.io.InputStream; import java.util.*; import java.util.concurrent.Future; import java.util.concurrent.RunnableFuture; @@ -75,6 +77,8 @@ import java.util.concurrent.TimeUnit; public class CompileServerManager implements ApplicationComponent{ private static final Logger LOG = Logger.getInstance("#com.intellij.compiler.CompileServerManager"); private static final String COMPILE_SERVER_SYSTEM_ROOT = "compile-server"; + private static final String LOGGER_CONFIG = "log.xml"; + private static final String DEFAULT_LOGGER_CONFIG = "defaultLogConfig.xml"; private volatile OSProcessHandler myProcessHandler; private final File mySystemDirectory; private volatile CompileServerClient myClient = new CompileServerClient(); @@ -465,14 +469,43 @@ public class CompileServerManager implements ApplicationComponent{ final File workDirectory = new File(mySystemDirectory, COMPILE_SERVER_SYSTEM_ROOT); workDirectory.mkdirs(); + ensureLogConfigExists(workDirectory); cmdLine.addParameter(FileUtil.toSystemIndependentName(workDirectory.getPath())); cmdLine.setWorkDirectory(workDirectory); + return cmdLine.createProcess(); } + private static void ensureLogConfigExists(File workDirectory) { + final File logConfig = new File(workDirectory, LOGGER_CONFIG); + if (!logConfig.exists()) { + FileUtil.createIfDoesntExist(logConfig); + try { + final InputStream in = Server.class.getResourceAsStream("/" + DEFAULT_LOGGER_CONFIG); + if (in != null) { + try { + final FileOutputStream out = new FileOutputStream(logConfig); + try { + FileUtil.copy(in, out); + } + finally { + out.close(); + } + } + finally { + in.close(); + } + } + } + catch (IOException e) { + LOG.error(e); + } + } + } + public void shutdownServer() { shutdownServer(myClient, myProcessHandler); } diff --git a/jps/jps-builders/src/defaultLogConfig.xml b/jps/jps-builders/src/defaultLogConfig.xml new file mode 100644 index 000000000000..6298b4ac324a --- /dev/null +++ b/jps/jps-builders/src/defaultLogConfig.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/jps/jps-builders/src/org/jetbrains/jps/server/Server.java b/jps/jps-builders/src/org/jetbrains/jps/server/Server.java index bca35537efce..8cdde853f06c 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/server/Server.java +++ b/jps/jps-builders/src/org/jetbrains/jps/server/Server.java @@ -34,6 +34,7 @@ public class Server { private static final int MAX_SIMULTANEOUS_BUILD_SESSIONS = Math.max(2, Runtime.getRuntime().availableProcessors()); public static final String SERVER_SUCCESS_START_MESSAGE = "Compile Server started successfully. Listening on port: "; public static final String SERVER_ERROR_START_MESSAGE = "Error starting Compile Server: "; + private static final String LOG_FILE_NAME = "log.xml"; private final ChannelGroup myAllOpenChannels = new DefaultChannelGroup("compile-server"); private final ChannelFactory myChannelFactory; @@ -98,72 +99,14 @@ public class Server { } final Server server = new Server(systemDir); - - if (new File("log.xml").exists()) { - DOMConfigurator.configure("log.xml"); - } - - Logger.setFactory(new Logger.Factory() { - @Override - public Logger getLoggerInstance(String category) { - final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(category); - - return new Logger(){ - @Override - public boolean isDebugEnabled() { - return logger.isDebugEnabled(); - } - - @Override - public void debug(@NonNls String message) { - logger.debug(message); - } - - @Override - public void debug(@Nullable Throwable t) { - logger.debug("", t); - } - - @Override - public void debug(@NonNls String message, @Nullable Throwable t) { - logger.debug(message, t); - } - - @Override - public void error(@NonNls String message, @Nullable Throwable t, @NonNls String... details) { - logger.debug(message, t); - } - - @Override - public void info(@NonNls String message) { - logger.info(message); - } - - @Override - public void info(@NonNls String message, @Nullable Throwable t) { - logger.info(message, t); - } - - @Override - public void warn(@NonNls String message, @Nullable Throwable t) { - logger.warn(message, t); - } - - @Override - public void setLevel(Level level) { - logger.setLevel(level); - } - }; - } - }); - - server.start(port); Runtime.getRuntime().addShutdownHook(new Thread("Shutdown hook thread") { public void run() { server.stop(); } }); + initLoggers(); + server.start(port); ServerState.getInstance().setKeepTempCachesInMemory(System.getProperty(GlobalOptions.USE_MEMORY_TEMP_CACHE_OPTION) != null); System.out.println("Server classpath: " + System.getProperty("java.class.path")); @@ -176,6 +119,66 @@ public class Server { } } + private static void initLoggers() { + if (new File(LOG_FILE_NAME).exists()) { + DOMConfigurator.configure(LOG_FILE_NAME); + } + + Logger.setFactory(new Logger.Factory() { + @Override + public Logger getLoggerInstance(String category) { + final org.apache.log4j.Logger logger = org.apache.log4j.Logger.getLogger(category); + + return new Logger() { + @Override + public boolean isDebugEnabled() { + return logger.isDebugEnabled(); + } + + @Override + public void debug(@NonNls String message) { + logger.debug(message); + } + + @Override + public void debug(@Nullable Throwable t) { + logger.debug("", t); + } + + @Override + public void debug(@NonNls String message, @Nullable Throwable t) { + logger.debug(message, t); + } + + @Override + public void error(@NonNls String message, @Nullable Throwable t, @NonNls String... details) { + logger.debug(message, t); + } + + @Override + public void info(@NonNls String message) { + logger.info(message); + } + + @Override + public void info(@NonNls String message, @Nullable Throwable t) { + logger.info(message, t); + } + + @Override + public void warn(@NonNls String message, @Nullable Throwable t) { + logger.warn(message, t); + } + + @Override + public void setLevel(Level level) { + logger.setLevel(level); + } + }; + } + }); + } + private class ChannelRegistrar extends SimpleChannelUpstreamHandler { public void channelOpen(ChannelHandlerContext ctx, ChannelStateEvent e) throws Exception { myAllOpenChannels.add(e.getChannel());