Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 0 additions & 3 deletions muted-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -369,9 +369,6 @@ tests:
- class: org.elasticsearch.xpack.sql.qa.mixed_node.SqlCompatIT
method: testNullsOrderWithMissingOrderSupportQueryingNewNode
issue: https://github.com/elastic/elasticsearch/issues/132249
- class: org.elasticsearch.common.logging.JULBridgeTests
method: testThrowable
issue: https://github.com/elastic/elasticsearch/issues/132280
- class: org.elasticsearch.xpack.ml.integration.AutodetectMemoryLimitIT
method: testManyDistinctOverFields
issue: https://github.com/elastic/elasticsearch/issues/132308
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -58,9 +58,18 @@ public static void install() {

private JULBridge() {}

// package private for tests. Prefix log4j logger names with "jul" to distinguish from other loggers
static String loggerName(String julLoggerName) {
String loggerName = "jul";
if (julLoggerName.isEmpty() == false) {
loggerName += "." + julLoggerName;
}
return loggerName;
}

@Override
public void publish(LogRecord record) {
Logger logger = LogManager.getLogger(record.getLoggerName());
Logger logger = LogManager.getLogger(loggerName(record.getLoggerName()));
Level level = translateJulLevel(record.getLevel());
Throwable thrown = record.getThrown();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,11 +59,12 @@ public static void restoreLoggerState() {
}
}

private void assertLogged(Runnable loggingCode, LoggingExpectation... expectations) {
Logger testLogger = LogManager.getLogger("");
private void assertLogged(String julLoggerName, Runnable loggingCode, LoggingExpectation... expectations) {
String loggerName = JULBridge.loggerName(julLoggerName);
Logger testLogger = LogManager.getLogger(loggerName);
Level savedLevel = testLogger.getLevel();

try (var mockLog = MockLog.capture("")) {
try (var mockLog = MockLog.capture(loggerName)) {
Loggers.setLevel(testLogger, Level.ALL);
for (var expectation : expectations) {
mockLog.addExpectation(expectation);
Expand All @@ -76,7 +77,7 @@ private void assertLogged(Runnable loggingCode, LoggingExpectation... expectatio
}

private void assertMessage(String msg, java.util.logging.Level julLevel, Level expectedLevel) {
assertLogged(() -> logger.log(julLevel, msg), new SeenEventExpectation(msg, "", expectedLevel, msg));
assertLogged("", () -> logger.log(julLevel, msg), new SeenEventExpectation(msg, "jul", expectedLevel, msg));
}

private static java.util.logging.Level julLevel(int value) {
Expand Down Expand Up @@ -113,41 +114,46 @@ public void testCustomLevels() {
public void testThrowable() {
JULBridge.install();
java.util.logging.Logger logger = java.util.logging.Logger.getLogger("");
assertLogged(() -> logger.log(java.util.logging.Level.SEVERE, "error msg", new Exception("some error")), new LoggingExpectation() {
boolean matched = false;

@Override
public void match(LogEvent event) {
Throwable thrown = event.getThrown();
matched = event.getLoggerName().equals("")
&& event.getMessage().getFormattedMessage().equals("error msg")
&& thrown != null
&& thrown.getMessage().equals("some error");
}

@Override
public void assertMatched() {
assertThat("expected to see error message but did not", matched, equalTo(true));
assertLogged(
"",
() -> logger.log(java.util.logging.Level.SEVERE, "error msg", new Exception("some error")),
new LoggingExpectation() {
boolean matched = false;

@Override
public void match(LogEvent event) {
Throwable thrown = event.getThrown();
matched = event.getLoggerName().equals("jul")
&& event.getMessage().getFormattedMessage().equals("error msg")
&& thrown != null
&& thrown.getMessage().equals("some error");
}

@Override
public void assertMatched() {
assertThat("expected to see error message but did not", matched, equalTo(true));
}
}
});
);
}

public void testChildLogger() {
JULBridge.install();
java.util.logging.Logger childLogger = java.util.logging.Logger.getLogger("foo");
assertLogged(() -> childLogger.info("child msg"), new SeenEventExpectation("child msg", "foo", Level.INFO, "child msg"));
assertLogged("foo", () -> childLogger.info("child msg"), new SeenEventExpectation("child msg", "jul.foo", Level.INFO, "child msg"));
}

public void testNullMessage() {
JULBridge.install();
assertLogged(() -> logger.info((String) null), new SeenEventExpectation("null msg", "", Level.INFO, "<null message>"));
assertLogged("", () -> logger.info((String) null), new SeenEventExpectation("null msg", "jul", Level.INFO, "<null message>"));
}

public void testFormattedMessage() {
JULBridge.install();
assertLogged(
"",
() -> logger.log(java.util.logging.Level.INFO, "{0}", "a var"),
new SeenEventExpectation("formatted msg", "", Level.INFO, "a var")
new SeenEventExpectation("formatted msg", "jul", Level.INFO, "a var")
);
}
}