Skip to content
This repository was archived by the owner on Oct 18, 2024. It is now read-only.

Commit fc96f28

Browse files
committed
fix(tooling-api): logs are not properly appended in tooling API tests
1 parent 0abaeca commit fc96f28

File tree

6 files changed

+30
-42
lines changed

6 files changed

+30
-42
lines changed

logger/src/main/java/com/itsaky/androidide/logging/encoder/IDELogFormatEncoder.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,18 @@
1717

1818
package com.itsaky.androidide.logging.encoder;
1919

20+
import ch.qos.logback.classic.spi.ILoggingEvent;
2021
import ch.qos.logback.core.encoder.LayoutWrappingEncoder;
2122

2223
/**
2324
* Encoder to format the log events in AndroidIDE.
2425
*
2526
* @author Akash Yadav
2627
*/
27-
public class IDELogFormatEncoder extends LayoutWrappingEncoder<IDELogFormatLayout> {
28+
public class IDELogFormatEncoder extends LayoutWrappingEncoder<ILoggingEvent> {
2829

30+
public IDELogFormatEncoder() {
31+
super();
32+
setLayout(new IDELogFormatLayout());
33+
}
2934
}

logger/src/main/resources/logback.xml

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,21 @@
1616
-->
1717

1818
<configuration>
19-
<appender name="LOGCAT" class="com.itsaky.androidide.logging.LogcatAppender">
19+
<!-- From Logback docs: -->
20+
<!-- Recommendation: place status listeners towards the the top of the configuration file -->
21+
<statuslistener class="com.itsaky.androidide.tooling.impl.util.LogbackStatusListener" />
22+
23+
<appender class="com.itsaky.androidide.logging.LogcatAppender" name="LOGCAT">
2024
<checkLoggable>false</checkLoggable>
2125
<encoder class="com.itsaky.androidide.logging.encoder.IDELogFormatEncoder" />
2226
</appender>
23-
<appender name="JVM_STDERR" class="com.itsaky.androidide.logging.JvmStdErrAppender">
27+
<appender class="com.itsaky.androidide.logging.JvmStdErrAppender" name="JVM_STDERR">
2428
<encoder class="com.itsaky.androidide.logging.encoder.IDELogFormatEncoder" />
2529
</appender>
26-
30+
<appender class="com.itsaky.androidide.tooling.impl.logging.ToolingApiAppender" name="TOOLING" />
2731
<root level="DEBUG">
2832
<appender-ref ref="LOGCAT" />
2933
<appender-ref ref="JVM_STDERR" />
34+
<appender-ref ref="TOOLING" />
3035
</root>
31-
3236
</configuration>

subprojects/tooling-api-impl/src/main/java/com/itsaky/androidide/tooling/impl/Main.java

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import com.itsaky.androidide.tooling.api.IToolingApiClient;
2323
import com.itsaky.androidide.tooling.api.util.ToolingApiLauncher;
2424
import com.itsaky.androidide.tooling.impl.internal.ProjectImpl;
25-
import com.itsaky.androidide.tooling.impl.logging.ToolingApiAppender;
2625
import com.itsaky.androidide.tooling.impl.progress.ForwardingProgressListener;
2726
import com.itsaky.androidide.tooling.impl.util.LogbackStatusListener;
2827
import java.io.ByteArrayInputStream;
@@ -44,14 +43,10 @@ public class Main {
4443
public static IToolingApiClient client;
4544
public static Future<Void> future;
4645

47-
private static ToolingApiAppender toolingApiLogAppender;
48-
4946
public static void main(String[] args) {
5047

5148
// disable the JVM std.err appender
5249
System.setProperty(JvmStdErrAppender.PROP_JVM_STDERR_APPENDER_ENABLED, "false");
53-
System.setProperty(CoreConstants.STATUS_LISTENER_CLASS_KEY,
54-
LogbackStatusListener.class.getName());
5550

5651
LOG.debug("Starting Tooling API server...");
5752
final var project = new ProjectImpl();
@@ -62,9 +57,6 @@ public static void main(String[] args) {
6257
Main.client = (IToolingApiClient) launcher.getRemoteProxy();
6358
server.connect(client);
6459

65-
Main.toolingApiLogAppender = new ToolingApiAppender(client);
66-
Main.toolingApiLogAppender.attachToRoot();
67-
6860
LOG.debug("Server started. Will run until shutdown message is received...");
6961
LOG.debug("Running on Java version: {}", System.getProperty("java.version", "<unknown>"));
7062

@@ -89,14 +81,11 @@ public static void main(String[] args) {
8981
server.shutdown().get();
9082
}
9183
} catch (InterruptedException | ExecutionException e) {
92-
e.printStackTrace();
84+
LOG.error("An error occurred while shutting down tooling API server", e);
9385
} finally {
9486
Main.future = null;
9587
Main.client = null;
9688

97-
Main.toolingApiLogAppender.detachFromRoot();
98-
Main.toolingApiLogAppender = null;
99-
10089
LOG.info("Tooling API server shutdown complete");
10190
}
10291
}

subprojects/tooling-api-impl/src/main/java/com/itsaky/androidide/tooling/impl/logging/ToolingApiAppender.kt

Lines changed: 3 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -17,44 +17,24 @@
1717

1818
package com.itsaky.androidide.tooling.impl.logging
1919

20-
import ch.qos.logback.classic.Logger
21-
import ch.qos.logback.classic.LoggerContext
2220
import ch.qos.logback.classic.spi.ILoggingEvent
2321
import ch.qos.logback.core.AppenderBase
24-
import com.itsaky.androidide.tooling.api.IToolingApiClient
2522
import com.itsaky.androidide.tooling.api.messages.LogMessageParams
26-
import org.slf4j.LoggerFactory
23+
import com.itsaky.androidide.tooling.impl.Main
2724

2825
/**
2926
* [AppenderBase] implementation which forwards all logs to the tooling API client.
3027
*
3128
* @author Akash Yadav
3229
*/
33-
class ToolingApiAppender(
34-
private val client: IToolingApiClient
35-
) : AppenderBase<ILoggingEvent>() {
36-
37-
fun attachToRoot() {
38-
val rootLogger = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME) as Logger
39-
setContext(LoggerFactory.getILoggerFactory() as LoggerContext)
40-
start()
41-
42-
rootLogger.addAppender(this)
43-
}
44-
45-
fun detachFromRoot() {
46-
stop()
47-
48-
val rootLogger = LoggerFactory.getLogger(Logger.ROOT_LOGGER_NAME) as Logger
49-
rootLogger.detachAppender(this)
50-
}
30+
class ToolingApiAppender : AppenderBase<ILoggingEvent>() {
5131

5232
override fun append(eventObject: ILoggingEvent?) {
5333
if (eventObject == null || !isStarted) {
5434
return
5535
}
5636

57-
client.logMessage(
37+
Main.client?.logMessage(
5838
LogMessageParams(
5939
eventObject.level.levelStr[0],
6040
eventObject.loggerName,

testing/common/src/main/java/com/itsaky/androidide/testing/common/CIOnlyTestRule.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,15 @@ import org.junit.runners.model.Statement
77
/**
88
* A [TestRule] which only runs the tests in a CI environment.
99
*/
10-
class CIOnlyTestRule : TestRule {
10+
class CIOnlyTestRule(
11+
var isEnabled: Boolean = true
12+
) : TestRule {
1113

1214
override fun apply(base: Statement, description: Description?): Statement {
15+
if (!isEnabled) {
16+
return base
17+
}
18+
1319
return object : Statement() {
1420
override fun evaluate() {
1521
if (isCi()) {

testing/tooling/src/main/java/com/itsaky/androidide/testing/tooling/ToolingApiTestLauncher.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
package com.itsaky.androidide.testing.tooling
1919

20-
import com.google.common.truth.Truth.assertThat
20+
import ch.qos.logback.core.CoreConstants
2121
import com.itsaky.androidide.testing.tooling.models.ToolingApiTestLauncherParams
2222
import com.itsaky.androidide.testing.tooling.models.ToolingApiTestScope
2323
import com.itsaky.androidide.tooling.api.IProject
@@ -33,6 +33,7 @@ import com.itsaky.androidide.tooling.api.messages.toLogLine
3333
import com.itsaky.androidide.tooling.api.util.ToolingApiLauncher
3434
import com.itsaky.androidide.tooling.api.util.ToolingProps
3535
import com.itsaky.androidide.tooling.events.ProgressEvent
36+
import com.itsaky.androidide.tooling.impl.util.LogbackStatusListener
3637
import com.itsaky.androidide.utils.FileProvider
3738
import com.itsaky.androidide.utils.ILogger
3839
import org.slf4j.Logger
@@ -182,6 +183,9 @@ object ToolingApiTestLauncher {
182183
cmd.add("-D$key=$value")
183184
}
184185

186+
cmd.add(
187+
"-D${CoreConstants.STATUS_LISTENER_CLASS_KEY}=${LogbackStatusListener::class.java.name}")
188+
185189
Collections.addAll(cmd, "-jar", jar)
186190

187191
println(

0 commit comments

Comments
 (0)