You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@brooklyn.apache.org by tb...@apache.org on 2018/02/15 10:49:20 UTC
[01/13] brooklyn-server git commit: Make cosmetic tweak to logging
output
Repository: brooklyn-server
Updated Branches:
refs/heads/master 1fcc80eca -> 95698eadb
Make cosmetic tweak to logging output
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/1fb6e3de
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/1fb6e3de
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/1fb6e3de
Branch: refs/heads/master
Commit: 1fb6e3deb5030467b50fb50998d8b3e1961f169c
Parents: eac895e
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Mon Feb 5 16:25:49 2018 +0000
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Fri Feb 9 21:09:20 2018 +0000
----------------------------------------------------------------------
.../core/entity/ApplicationLoggingTest.java | 16 ++++++++--------
.../resources/brooklyn/logback-appender-stdout.xml | 2 +-
2 files changed, 9 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/1fb6e3de/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
index f5ec4b9..66c2e92 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
@@ -166,14 +166,14 @@ public class ApplicationLoggingTest extends BrooklynAppUnitTestSupport {
assertHealthEventually(app, Lifecycle.STOPPED, false);
// Look for output like
-// 2018-02-02 18:00:39,351 INFO xJTIhVuy@[ixxmgfzjos,m5it71jfiw,kw18pflnqp] Hello from entity kw18pflnqp
-// 2018-02-02 18:00:39,354 INFO hqSMSJKm@[ixxmgfzjos,m5it71jfiw] Hello from entity m5it71jfiw
-// 2018-02-02 18:00:39,354 INFO fCW0mP92@[ixxmgfzjos] Hello world
-// 2018-02-02 18:00:39,365 INFO @ Stop task id is nxLdBOiG
-// 2018-02-02 18:00:39,366 INFO nxLdBOiG@[ixxmgfzjos] Goodbye cruel world
-// 2018-02-02 18:00:39,367 INFO hniq2zjE@[ixxmgfzjos,m5it71jfiw] Goodbye from entity m5it71jfiw
-// 2018-02-02 18:00:39,369 INFO cFmqxDkJ@[ixxmgfzjos,m5it71jfiw,kw18pflnqp] Goodbye from entity kw18pflnqp
- watcher.assertHasEvent(containsMessage(stopId + "@"));
+// 2018-02-05 16:23:11,485 INFO K09KEX1U-[y4lgil3hya,xn0fmqrhzd,khx0py82ba] Hello from entity khx0py82ba
+// 2018-02-05 16:23:11,488 INFO kD8Q76x0-[y4lgil3hya,xn0fmqrhzd] Hello from entity xn0fmqrhzd
+// 2018-02-05 16:23:11,488 INFO ZsU4OGEp-[y4lgil3hya] Hello world
+// 2018-02-05 16:23:11,496 INFO - Stop task id is pOp03ybS
+// 2018-02-05 16:23:11,498 INFO pOp03ybS-[y4lgil3hya] Goodbye cruel world
+// 2018-02-05 16:23:11,499 INFO c1Pcn3FR-[y4lgil3hya,xn0fmqrhzd] Goodbye from entity xn0fmqrhzd
+// 2018-02-05 16:23:11,500 INFO eq9akWgK-[y4lgil3hya,xn0fmqrhzd,khx0py82ba] Goodbye from entity khx0py82ba
+ watcher.assertHasEvent(containsMessage(stopId + "-"));
watcher.assertHasEvent(matchingRegexes(".*" + app.getApplicationId() + ".*Hello world.*"));;
watcher.assertHasEvent(matchingRegexes(".*" +
ImmutableList.of(app.getId(), entity.getId()).toString()
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/1fb6e3de/logging/logback-includes/src/main/resources/brooklyn/logback-appender-stdout.xml
----------------------------------------------------------------------
diff --git a/logging/logback-includes/src/main/resources/brooklyn/logback-appender-stdout.xml b/logging/logback-includes/src/main/resources/brooklyn/logback-appender-stdout.xml
index 08b7f9f..61ca1ef 100644
--- a/logging/logback-includes/src/main/resources/brooklyn/logback-appender-stdout.xml
+++ b/logging/logback-includes/src/main/resources/brooklyn/logback-appender-stdout.xml
@@ -21,7 +21,7 @@
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
- <pattern>%d %-5level %X{task.id}@%X{entity.ids} %msg%n%xEx{0}</pattern>
+ <pattern>%d %-5level %X{task.id}-%X{entity.ids} %msg%n%xEx{0}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
[06/13] brooklyn-server git commit: Assert on log output
Posted by tb...@apache.org.
Assert on log output
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/643aa9c1
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/643aa9c1
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/643aa9c1
Branch: refs/heads/master
Commit: 643aa9c1e4643b37ec96f7dcebfcf4cb3c78c6bd
Parents: d456333
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Fri Jan 26 17:38:34 2018 +0000
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Fri Feb 9 21:09:20 2018 +0000
----------------------------------------------------------------------
.../core/entity/ApplicationLoggingTest.java | 51 +++++++-
.../brooklyn/logback-appender-stdout.xml | 35 -----
.../org/apache/brooklyn/test/LogWatcher.java | 131 ++++++++++++-------
3 files changed, 129 insertions(+), 88 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/643aa9c1/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
index 3fc57ec..2e74593 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
@@ -18,6 +18,10 @@
*/
package org.apache.brooklyn.core.entity;
+import static com.google.common.base.Predicates.and;
+import static org.apache.brooklyn.test.LogWatcher.EventPredicates.containsMessage;
+import static org.apache.brooklyn.test.LogWatcher.EventPredicates.matchesPatterns;
+
import java.util.ArrayDeque;
import java.util.Collection;
import java.util.Deque;
@@ -34,15 +38,21 @@ import org.apache.brooklyn.core.test.entity.TestApplication;
import org.apache.brooklyn.core.test.entity.TestApplicationImpl;
import org.apache.brooklyn.core.test.entity.TestEntity;
import org.apache.brooklyn.core.test.entity.TestEntityImpl;
+import org.apache.brooklyn.test.LogWatcher;
import org.apache.brooklyn.util.collections.QuorumCheck;
import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.apache.brooklyn.util.text.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.slf4j.MDC;
import org.testng.annotations.Test;
+import com.google.common.base.Predicate;
+import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList;
+import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.spi.ILoggingEvent;
+
@Test
public class ApplicationLoggingTest extends BrooklynAppUnitTestSupport {
private static final Logger LOG = LoggerFactory.getLogger(ApplicationLoggingTest.class);
@@ -131,18 +141,49 @@ public class ApplicationLoggingTest extends BrooklynAppUnitTestSupport {
@Test
public void testLogging() throws Exception {
+ String loggerName = ApplicationLoggingTest.class.getName();
+ ch.qos.logback.classic.Level logLevel = ch.qos.logback.classic.Level.INFO;
Deque<String> ids = new ArrayDeque<>();
ids.push(app.getId());
final TestEntityWithLogging entity = app.createAndManageChild(EntitySpec.create(TestEntityWithLogging.class));
final TestEntityWithLogging child = entity.addChild(EntitySpec.create(EntitySpec.create(TestEntityWithLogging.class)));
- app.start(ImmutableList.of(app.newSimulatedLocation()));
- assertHealthEventually(app, Lifecycle.RUNNING, true);
- app.stop();
- assertHealthEventually(app, Lifecycle.STOPPED, false);
+ LogWatcher watcher = new LogWatcher(loggerName, logLevel, containsMessage(app.getId()));
+
+ watcher.start();
+ try {
+ app.start(ImmutableList.of(app.newSimulatedLocation()));
+ assertHealthEventually(app, Lifecycle.RUNNING, true);
+ app.stop();
+ assertHealthEventually(app, Lifecycle.STOPPED, false);
+ watcher.assertHasEvent(matchesPatterns(".*" + app.getApplicationId() + ".*Hello world.*"));
+ watcher.assertHasEvent(matchesPatterns(".*"
+ + ImmutableList.of(app.getId(), entity.getId()).toString()
+ + ".*from entity.*" + entity.getId() + ".*"));
+ watcher.assertHasEvent(matchesPatterns(".*" +
+ ImmutableList.of(app.getId(), entity.getId()).toString()
+ + ".*from entity.*" + entity.getId() + ".*"));
+ watcher.assertHasEvent(matchesPatterns(".*" +
+ ImmutableList.of(app.getId(), entity.getId(), child.getId()).toString()
+ + ".*from entity.*" + child.getId() + ".*"));
+ } finally {
+ watcher.close();
+ }
}
+ @Test
+ public void testOne() {
+ LogWatcher watcher = new LogWatcher(LOG.getName(), Level.DEBUG, Predicates.alwaysTrue());
+
+ watcher.start();
+ try {
+ LOG.error("Test message");
+ } finally {
+ watcher.close();
+ }
+ }
+
private void assertHealthEventually(Entity entity, Lifecycle expectedState, Boolean expectedUp) {
EntityAsserts.assertAttributeEqualsEventually(entity, Attributes.SERVICE_STATE_ACTUAL, expectedState);
EntityAsserts.assertAttributeEqualsEventually(entity, Attributes.SERVICE_UP, expectedUp);
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/643aa9c1/core/src/test/resources/brooklyn/logback-appender-stdout.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/brooklyn/logback-appender-stdout.xml b/core/src/test/resources/brooklyn/logback-appender-stdout.xml
deleted file mode 100644
index e612042..0000000
--- a/core/src/test/resources/brooklyn/logback-appender-stdout.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you under the Apache License, Version 2.0 (the
- "License"); you may not use this file except in compliance
- with the License. You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing,
- software distributed under the License is distributed on an
- "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- KIND, either express or implied. See the License for the
- specific language governing permissions and limitations
- under the License.
--->
-<included>
-
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <encoder>
- <pattern>%d %-5level %X{entity.ids} %msg%n%xEx{0}</pattern>
- </encoder>
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>INFO</level>
- </filter>
- </appender>
-
- <root>
- <appender-ref ref="STDOUT" />
- </root>
-
-</included>
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/643aa9c1/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
----------------------------------------------------------------------
diff --git a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
index 90b87e4..16d27b0 100644
--- a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
+++ b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
@@ -24,17 +24,17 @@ import static org.testng.Assert.assertFalse;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
+import java.io.IOException;
+import java.lang.reflect.Proxy;
import java.io.PrintStream;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.BiPredicate;
import org.apache.brooklyn.util.time.Time;
-import org.mockito.Mockito;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -46,10 +46,12 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import ch.qos.logback.classic.Level;
+import ch.qos.logback.classic.LoggerContext;
+import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.IThrowableProxy;
import ch.qos.logback.classic.spi.StackTraceElementProxy;
-import ch.qos.logback.core.Appender;
+import ch.qos.logback.core.OutputStreamAppender;
/**
* Testing utility that registers an appender to watch a given logback logger, and records events
@@ -67,35 +69,40 @@ public class LogWatcher implements Closeable {
public static Predicate<ILoggingEvent> containsMessage(final String expected) {
return containsMessages(expected);
}
-
- public static Predicate<ILoggingEvent> containsMessages(final String... expecteds) {
- return new Predicate<ILoggingEvent>() {
- @Override public boolean apply(ILoggingEvent input) {
- if (input == null) return false;
- String msg = input.getFormattedMessage();
- if (msg == null) return false;
- for (String expected : expecteds) {
- if (!msg.contains(expected)) return false;
- }
- return true;
+
+ public static Predicate<ILoggingEvent> matchPredicate(BiPredicate<String, String> pred,
+ final String... expecteds) {
+ return event -> {
+ if (event == null) return false;
+ String msg = event.getFormattedMessage();
+ if (msg == null) return false;
+ for (String expected : expecteds) {
+ if (!pred.test(msg.trim(), expected)) return false;
}
+ return true;
};
}
-
+
+ public static Predicate<ILoggingEvent> matchesPatterns(final String... patterns) {
+ return matchPredicate(String::matches, patterns);
+ }
+
+ public static Predicate<ILoggingEvent> containsMessages(final String... expecteds) {
+ return matchPredicate(String::contains, expecteds);
+ }
+
public static Predicate<ILoggingEvent> containsExceptionStackLine(final Class<?> clazz, final String methodName) {
- return new Predicate<ILoggingEvent>() {
- @Override public boolean apply(ILoggingEvent input) {
- IThrowableProxy throwable = (input != null) ? input.getThrowableProxy() : null;
- if (throwable != null) {
- for (StackTraceElementProxy line : throwable.getStackTraceElementProxyArray()) {
- if (line.getStackTraceElement().getClassName().contains(clazz.getSimpleName())
- && line.getStackTraceElement().getMethodName().contains(methodName)) {
- return true;
- }
+ return event -> {
+ IThrowableProxy throwable = (event != null) ? event.getThrowableProxy() : null;
+ if (throwable != null) {
+ for (StackTraceElementProxy line : throwable.getStackTraceElementProxyArray()) {
+ if (line.getStackTraceElement().getClassName().contains(clazz.getSimpleName())
+ && line.getStackTraceElement().getMethodName().contains(methodName)) {
+ return true;
}
}
- return false;
}
+ return false;
};
}
@@ -124,7 +131,6 @@ public class LogWatcher implements Closeable {
}
};
}
-
public static Predicate<ILoggingEvent> containsExceptionClassname(final String expected) {
return new Predicate<ILoggingEvent>() {
@Override public boolean apply(ILoggingEvent input) {
@@ -135,7 +141,6 @@ public class LogWatcher implements Closeable {
}
};
}
-
public static Predicate<ILoggingEvent> levelGeaterOrEqual(final Level expectedLevel) {
return new Predicate<ILoggingEvent>() {
@Override public boolean apply(ILoggingEvent input) {
@@ -150,7 +155,7 @@ public class LogWatcher implements Closeable {
private final List<ILoggingEvent> events = Collections.synchronizedList(Lists.<ILoggingEvent>newLinkedList());
private final AtomicBoolean closed = new AtomicBoolean();
private final ch.qos.logback.classic.Level loggerLevel;
- private final Appender<ILoggingEvent> appender;
+ private final OutputStreamAppender<ILoggingEvent> appender;
private final List<ch.qos.logback.classic.Logger> watchedLoggers = Lists.newArrayList();
private volatile Map<ch.qos.logback.classic.Logger, Level> origLevels = Maps.newLinkedHashMap();
@@ -160,29 +165,61 @@ public class LogWatcher implements Closeable {
@SuppressWarnings("unchecked")
public LogWatcher(Iterable<String> loggerNames, ch.qos.logback.classic.Level loggerLevel, final Predicate<? super ILoggingEvent> filter) {
- for (String loggerName : loggerNames) {
- Logger logger = LoggerFactory.getLogger(checkNotNull(loggerName, "loggerName"));
- watchedLoggers.add((ch.qos.logback.classic.Logger) logger);
- }
+
this.loggerLevel = checkNotNull(loggerLevel, "loggerLevel");
- this.appender = Mockito.mock(Appender.class);
-
- Mockito.when(appender.getName()).thenReturn("MOCK");
- Answer<Void> answer = new Answer<Void>() {
+ LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
+
+ this.appender = new OutputStreamAppender<ILoggingEvent>() {
@Override
- public Void answer(InvocationOnMock invocation) throws Throwable {
- ILoggingEvent event = invocation.getArgument(0);
- if (event != null && filter.apply(event)) {
- events.add(event);
- }
+ protected void append(ILoggingEvent event) {
+ super.append(event);
+
LOG.trace("level="+event.getLevel()+"; event="+event+"; msg="+event.getFormattedMessage());
- return null;
}
};
- Mockito.doAnswer(answer).when(appender).doAppend(Mockito.<ILoggingEvent>any());
+
+ PatternLayoutEncoder ple = new PatternLayoutEncoder() {
+ @Override
+ public void doEncode(ILoggingEvent event) throws IOException {
+ final String txt = layout.doLayout(event);
+ ILoggingEvent formatted = (ILoggingEvent) Proxy.newProxyInstance(
+ ILoggingEvent.class.getClassLoader(),
+ new Class<?>[]{ILoggingEvent.class},
+ (proxy, method, args) -> {
+ if (method.getName().endsWith("Message") || method.getName().equals("toString")) {
+ return txt;
+ } else {
+ return method.invoke(event, args);
+ }
+ });
+ if (event != null && filter.apply(formatted)) {
+ events.add(formatted);
+ }
+
+ super.doEncode(event);
+ }
+ };
+
+ ple.setPattern(">>>> %d{ISO8601} %X{entity.ids} %-5.5p %3X{bundle.id} %c{1.} [%.16t] %m%n");
+ ple.setContext(lc);
+ ple.start();
+
+ this.appender.setContext(lc);
+ this.appender.setEncoder(ple);
+ this.appender.setOutputStream(System.out);
+ this.appender.start();
+
+ for (String loggerName : loggerNames) {
+ final ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger(checkNotNull(loggerName, "loggerName"));
+ logger.addAppender(this.appender);
+ logger.setLevel(this.loggerLevel);
+ logger.setAdditive(false);
+ watchedLoggers.add((ch.qos.logback.classic.Logger) logger);
+ }
}
public void start() {
+
checkState(!closed.get(), "Cannot start LogWatcher after closed");
for (ch.qos.logback.classic.Logger watchedLogger : watchedLoggers) {
origLevels.put(watchedLogger, watchedLogger.getLevel());
@@ -252,20 +289,18 @@ public class LogWatcher implements Closeable {
public void printEvents() {
printEvents(System.out, getEvents());
}
-
public String printEventsToString() {
return printEventsToString(getEvents());
}
-
+
public String printEventsToString(Iterable<? extends ILoggingEvent> events) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
printEvents(new PrintStream(baos), events);
return new String(baos.toByteArray());
}
-
public void printEvents(PrintStream stream, Iterable<? extends ILoggingEvent> events) {
for (ILoggingEvent event : events) {
- stream.println(Time.makeDateString(event.getTimeStamp()) + ": " + event.getThreadName()
+ stream.println(Time.makeDateString(event.getTimeStamp()) + ": " + event.getThreadName()
+ ": " + event.getLevel() + ": " + event.getMessage());
IThrowableProxy throwable = event.getThrowableProxy();
if (throwable != null) {
[03/13] brooklyn-server git commit: Format line
Posted by tb...@apache.org.
Format line
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/2c81f63e
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/2c81f63e
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/2c81f63e
Branch: refs/heads/master
Commit: 2c81f63ed63c92e494abdbcb12eeb65fd4643c99
Parents: 56bacd8
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Fri Jan 26 17:54:54 2018 +0000
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Fri Feb 9 21:09:20 2018 +0000
----------------------------------------------------------------------
.../src/main/java/org/apache/brooklyn/test/LogWatcher.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/2c81f63e/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
----------------------------------------------------------------------
diff --git a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
index d41e1fa..6eaefa3 100644
--- a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
+++ b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
@@ -212,7 +212,8 @@ public class LogWatcher implements Closeable {
this.appender.start();
for (String loggerName : loggerNames) {
- final ch.qos.logback.classic.Logger logger = (ch.qos.logback.classic.Logger)LoggerFactory.getLogger(checkNotNull(loggerName, "loggerName"));
+ final ch.qos.logback.classic.Logger logger =
+ (ch.qos.logback.classic.Logger)LoggerFactory.getLogger(checkNotNull(loggerName, "loggerName"));
logger.addAppender(this.appender);
logger.setLevel(this.loggerLevel);
logger.setAdditive(false);
[12/13] brooklyn-server git commit: Tidy up a bit
Posted by tb...@apache.org.
Tidy up a bit
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/83875637
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/83875637
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/83875637
Branch: refs/heads/master
Commit: 83875637e119a76f73a976f883fc6aaa0460382b
Parents: 19b06ba
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Sat Jan 27 16:31:52 2018 +0000
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Fri Feb 9 21:09:20 2018 +0000
----------------------------------------------------------------------
.../core/entity/ApplicationLoggingTest.java | 36 +++++++-------------
.../org/apache/brooklyn/test/LogWatcher.java | 6 ++--
2 files changed, 14 insertions(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/83875637/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
index 2e74593..4c075aa 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
@@ -18,9 +18,8 @@
*/
package org.apache.brooklyn.core.entity;
-import static com.google.common.base.Predicates.and;
import static org.apache.brooklyn.test.LogWatcher.EventPredicates.containsMessage;
-import static org.apache.brooklyn.test.LogWatcher.EventPredicates.matchesPatterns;
+import static org.apache.brooklyn.test.LogWatcher.EventPredicates.matchingRegexes;
import java.util.ArrayDeque;
import java.util.Collection;
@@ -41,17 +40,14 @@ import org.apache.brooklyn.core.test.entity.TestEntityImpl;
import org.apache.brooklyn.test.LogWatcher;
import org.apache.brooklyn.util.collections.QuorumCheck;
import org.apache.brooklyn.util.exceptions.Exceptions;
-import org.apache.brooklyn.util.text.Strings;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.annotations.Test;
-import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList;
import ch.qos.logback.classic.Level;
-import ch.qos.logback.classic.spi.ILoggingEvent;
@Test
public class ApplicationLoggingTest extends BrooklynAppUnitTestSupport {
@@ -156,14 +152,19 @@ public class ApplicationLoggingTest extends BrooklynAppUnitTestSupport {
assertHealthEventually(app, Lifecycle.RUNNING, true);
app.stop();
assertHealthEventually(app, Lifecycle.STOPPED, false);
- watcher.assertHasEvent(matchesPatterns(".*" + app.getApplicationId() + ".*Hello world.*"));
- watcher.assertHasEvent(matchesPatterns(".*"
- + ImmutableList.of(app.getId(), entity.getId()).toString()
- + ".*from entity.*" + entity.getId() + ".*"));
- watcher.assertHasEvent(matchesPatterns(".*" +
+
+ // Look for output like
+ // 2018-01-27 16:25:52,386 INFO [dwym20xr82, b1babwc34d, se1d2nn62j] Hello from entity se1d2nn62j
+ // 2018-01-27 16:25:52,388 INFO [dwym20xr82, b1babwc34d] Hello from entity b1babwc34d
+ // 2018-01-27 16:25:52,389 INFO [dwym20xr82] Hello world
+ // 2018-01-27 16:25:52,399 INFO [dwym20xr82] Goodbye cruel world
+ // 2018-01-27 16:25:52,400 INFO [dwym20xr82, b1babwc34d] Goodbye from entity b1babwc34d
+ // 2018-01-27 16:25:52,401 INFO [dwym20xr82, b1babwc34d, se1d2nn62j] Goodbye from entity se1d2nn62j
+ watcher.assertHasEvent(matchingRegexes(".*" + app.getApplicationId() + ".*Hello world.*"));;
+ watcher.assertHasEvent(matchingRegexes(".*" +
ImmutableList.of(app.getId(), entity.getId()).toString()
+ ".*from entity.*" + entity.getId() + ".*"));
- watcher.assertHasEvent(matchesPatterns(".*" +
+ watcher.assertHasEvent(matchingRegexes(".*" +
ImmutableList.of(app.getId(), entity.getId(), child.getId()).toString()
+ ".*from entity.*" + child.getId() + ".*"));
} finally {
@@ -171,19 +172,6 @@ public class ApplicationLoggingTest extends BrooklynAppUnitTestSupport {
}
}
-
- @Test
- public void testOne() {
- LogWatcher watcher = new LogWatcher(LOG.getName(), Level.DEBUG, Predicates.alwaysTrue());
-
- watcher.start();
- try {
- LOG.error("Test message");
- } finally {
- watcher.close();
- }
- }
-
private void assertHealthEventually(Entity entity, Lifecycle expectedState, Boolean expectedUp) {
EntityAsserts.assertAttributeEqualsEventually(entity, Attributes.SERVICE_STATE_ACTUAL, expectedState);
EntityAsserts.assertAttributeEqualsEventually(entity, Attributes.SERVICE_UP, expectedUp);
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/83875637/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
----------------------------------------------------------------------
diff --git a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
index 3f6b002..8b3b451 100644
--- a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
+++ b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
@@ -33,7 +33,6 @@ import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiPredicate;
-import java.util.regex.Pattern;
import org.apache.brooklyn.util.time.Time;
import org.slf4j.Logger;
@@ -54,7 +53,6 @@ import ch.qos.logback.classic.spi.IThrowableProxy;
import ch.qos.logback.classic.spi.StackTraceElementProxy;
import ch.qos.logback.core.Appender;
import ch.qos.logback.core.ConsoleAppender;
-import ch.qos.logback.core.OutputStreamAppender;
/**
* Testing utility that registers an appender to watch a given logback logger, and records events
@@ -73,7 +71,7 @@ public class LogWatcher implements Closeable {
return containsMessages(expected);
}
- public static Predicate<ILoggingEvent> matchPredicate(BiPredicate<String, String> pred,
+ protected static Predicate<ILoggingEvent> matchPredicate(BiPredicate<String, String> pred,
final String... expecteds) {
return event -> {
if (event == null) return false;
@@ -86,7 +84,7 @@ public class LogWatcher implements Closeable {
};
}
- public static Predicate<ILoggingEvent> matchesPatterns(final String... patterns) {
+ public static Predicate<ILoggingEvent> matchingRegexes(final String... patterns) {
return matchPredicate(String::matches, patterns);
}
[04/13] brooklyn-server git commit: Add code that gives a working MDC
output in test
Posted by tb...@apache.org.
Add code that gives a working MDC output in test
2018-01-23 11:52:20,118 INFO [i6hk2jll5n, z2scr3kczj, hn242jl6bi] Hello from entity hn242jl6bi
2018-01-23 11:52:20,118 INFO [i6hk2jll5n, z2scr3kczj] Hello from entity z2scr3kczj
2018-01-23 11:52:20,118 INFO [i6hk2jll5n] Hello world
2018-01-23 11:52:20,128 INFO [i6hk2jll5n] Goodbye cruel world
2018-01-23 11:52:20,128 INFO [i6hk2jll5n, z2scr3kczj] Goodbye from entity z2scr3kczj
2018-01-23 11:52:20,129 INFO [i6hk2jll5n, z2scr3kczj, hn242jl6bi] Goodbye from entity hn242jl6bi
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/11740cc6
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/11740cc6
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/11740cc6
Branch: refs/heads/master
Commit: 11740cc65a1121a0c272e78f68fd5dac012b8fb9
Parents: 1f9446e
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Fri Jan 19 18:01:55 2018 +0000
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Fri Feb 9 21:09:20 2018 +0000
----------------------------------------------------------------------
.../util/core/task/BasicExecutionContext.java | 42 +++++-
.../core/entity/ApplicationLoggingTest.java | 151 +++++++++++++++++++
.../brooklyn/logback-appender-stdout.xml | 35 +++++
pom.xml | 2 +-
4 files changed, 227 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/11740cc6/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
index 32ca5b7..2575464 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
@@ -19,9 +19,11 @@
package org.apache.brooklyn.util.core.task;
import java.lang.reflect.Proxy;
+import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
+import java.util.Deque;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
@@ -33,6 +35,7 @@ import java.util.concurrent.ExecutorService;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicReference;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.mgmt.ExecutionContext;
@@ -55,6 +58,7 @@ import org.apache.brooklyn.util.time.CountdownTimer;
import org.apache.brooklyn.util.time.Duration;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
import com.google.common.annotations.Beta;
import com.google.common.base.Function;
@@ -66,10 +70,12 @@ import com.google.common.collect.Iterables;
* (so that it can look like an {@link Executor} and also supply {@link ExecutorService#submit(Callable)}
*/
public class BasicExecutionContext extends AbstractExecutionContext {
-
+
private static final Logger log = LoggerFactory.getLogger(BasicExecutionContext.class);
static final ThreadLocal<BasicExecutionContext> perThreadExecutionContext = new ThreadLocal<BasicExecutionContext>();
+ public static final String ENTITY_IDS = "entity.ids";
+
public static BasicExecutionContext getCurrentExecutionContext() { return perThreadExecutionContext.get(); }
final ExecutionManager executionManager;
@@ -221,9 +227,16 @@ public class BasicExecutionContext extends AbstractExecutionContext {
SimpleFuture<T> future = new SimpleFuture<>();
Throwable error = null;
+ final Set<Object> taskTags = task.getTags();
+ Entity target = BrooklynTaskTags.getWrappedEntityOfType(taskTags, BrooklynTaskTags.TARGET_ENTITY);
+ final AtomicReference<MDC.MDCCloseable> loggingContext = new AtomicReference<>();
+
try {
((BasicExecutionManager)executionManager).afterSubmitRecordFuture(task, future);
((BasicExecutionManager)executionManager).beforeStartInSameThreadTask(null, task);
+ if (target != null) {
+ loggingContext.set(MDC.putCloseable(ENTITY_IDS, idStack(target).toString()));
+ }
return future.set(job.call());
} catch (Exception e) {
@@ -237,6 +250,10 @@ public class BasicExecutionContext extends AbstractExecutionContext {
try {
((BasicExecutionManager)executionManager).afterEndInSameThreadTask(null, task, error);
} finally {
+ final MDC.MDCCloseable context = loggingContext.get();
+ if (context != null) {
+ context.close();
+ }
BasicExecutionManager.getPerThreadCurrentTask().set(previousTask);
perThreadExecutionContext.set(oldExecutionContext);
}
@@ -357,12 +374,18 @@ public class BasicExecutionContext extends AbstractExecutionContext {
// tag as transient if submitter is transient, unless explicitly tagged as non-transient
taskTags.add(BrooklynTaskTags.TRANSIENT_TASK_TAG);
}
-
+
+ Entity target = BrooklynTaskTags.getWrappedEntityOfType(taskTags, BrooklynTaskTags.TARGET_ENTITY);
+ final AtomicReference<MDC.MDCCloseable> loggingContext = new AtomicReference<>();
+
final Object startCallback = properties.get("newTaskStartCallback");
properties.put("newTaskStartCallback", new Function<Task<?>,Void>() {
@Override
public Void apply(Task<?> it) {
registerPerThreadExecutionContext();
+ if (target != null) {
+ loggingContext.set(MDC.putCloseable(ENTITY_IDS, idStack(target).toString()));
+ }
if (startCallback!=null) BasicExecutionManager.invokeCallback(startCallback, it);
return null;
}});
@@ -375,6 +398,10 @@ public class BasicExecutionContext extends AbstractExecutionContext {
if (endCallback!=null) BasicExecutionManager.invokeCallback(endCallback, it);
} finally {
clearPerThreadExecutionContext();
+ final MDC.MDCCloseable context = loggingContext.get();
+ if (context != null) {
+ context.close();
+ }
}
return null;
}});
@@ -390,6 +417,17 @@ public class BasicExecutionContext extends AbstractExecutionContext {
}
}
+ private Deque<String> idStack(Entity target) {
+ Deque<String> ids = new ArrayDeque<>();
+ Entity e = target;
+ ids.push(e.getId());
+ while (e.getParent() != null) {
+ e = e.getParent();
+ ids.push(e.getId());
+ }
+ return ids;
+ }
+
private static class ContextSwitchingInfo<T> {
final ExecutionContext context;
final Task<T> wrapperTask;
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/11740cc6/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
new file mode 100644
index 0000000..3fc57ec
--- /dev/null
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
@@ -0,0 +1,151 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.brooklyn.core.entity;
+
+import java.util.ArrayDeque;
+import java.util.Collection;
+import java.util.Deque;
+
+import org.apache.brooklyn.api.entity.Entity;
+import org.apache.brooklyn.api.entity.EntitySpec;
+import org.apache.brooklyn.api.entity.ImplementedBy;
+import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
+import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
+import org.apache.brooklyn.core.entity.trait.StartableMethods;
+import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
+import org.apache.brooklyn.core.test.entity.TestApplication;
+import org.apache.brooklyn.core.test.entity.TestApplicationImpl;
+import org.apache.brooklyn.core.test.entity.TestEntity;
+import org.apache.brooklyn.core.test.entity.TestEntityImpl;
+import org.apache.brooklyn.util.collections.QuorumCheck;
+import org.apache.brooklyn.util.exceptions.Exceptions;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+
+@Test
+public class ApplicationLoggingTest extends BrooklynAppUnitTestSupport {
+ private static final Logger LOG = LoggerFactory.getLogger(ApplicationLoggingTest.class);
+
+ @ImplementedBy(TestApplicationWithLoggingImpl.class)
+ public interface TestApplicationWithLogging extends TestApplication {
+
+ }
+
+ public static class TestApplicationWithLoggingImpl extends TestApplicationImpl
+ implements TestApplicationWithLogging {
+
+ @Override
+ protected void initEnrichers() {
+ super.initEnrichers();
+ ServiceStateLogic.newEnricherFromChildrenUp()
+ .requireUpChildren(QuorumCheck.QuorumChecks.all())
+ .addTo(this);
+ }
+
+ @Override
+ protected void doStart(Collection<? extends Location> locations) {
+ super.doStart(locations);
+ LOG.info("Hello world");
+ }
+
+ @Override
+ protected void doStop() {
+ LOG.info("Goodbye cruel world");
+ super.doStop();
+ }
+ }
+
+ @ImplementedBy(TestEntityWithLoggingImp.class)
+ public interface TestEntityWithLogging extends TestEntity {
+ }
+
+ public static final class TestEntityWithLoggingImp extends TestEntityImpl implements TestEntityWithLogging {
+
+ private String getIndent() {
+ String indent = "";
+ Entity e = this;
+ while (e.getParent() != null) {
+ indent += " ";
+ e = e.getParent();
+ }
+ return indent;
+ }
+
+ @Override
+ protected void initEnrichers() {
+ super.initEnrichers();
+ ServiceStateLogic.newEnricherFromChildrenUp()
+ .requireUpChildren(QuorumCheck.QuorumChecks.all())
+ .addTo(this);
+ }
+
+ @Override
+ public void start(Collection<? extends Location> locs) {
+ super.start(locs);
+ try {
+ StartableMethods.start(this, locs);
+ } catch (Exception e) {
+ Exceptions.propagateIfFatal(e);
+ throw new RuntimeException(e);
+ }
+ LOG.info(getIndent() + "Hello from entity {}", getId());
+ }
+
+ @Override
+ public void stop() {
+ LOG.info(getIndent() + "Goodbye from entity {}", getId());
+ StartableMethods.stop(this);
+ }
+ }
+
+ @Override
+ protected void setUpApp() {
+ LOG.info("setUpApp");
+ EntitySpec<TestApplicationWithLogging> appSpec = EntitySpec.create(TestApplicationWithLogging.class);
+ if (shouldSkipOnBoxBaseDirResolution()!=null)
+ appSpec.configure(BrooklynConfigKeys.SKIP_ON_BOX_BASE_DIR_RESOLUTION, shouldSkipOnBoxBaseDirResolution());
+
+ app = mgmt.getEntityManager().createEntity(appSpec);
+ }
+
+ @Test
+ public void testLogging() throws Exception {
+
+ Deque<String> ids = new ArrayDeque<>();
+ ids.push(app.getId());
+ final TestEntityWithLogging entity = app.createAndManageChild(EntitySpec.create(TestEntityWithLogging.class));
+ final TestEntityWithLogging child = entity.addChild(EntitySpec.create(EntitySpec.create(TestEntityWithLogging.class)));
+ app.start(ImmutableList.of(app.newSimulatedLocation()));
+ assertHealthEventually(app, Lifecycle.RUNNING, true);
+ app.stop();
+ assertHealthEventually(app, Lifecycle.STOPPED, false);
+ }
+
+
+ private void assertHealthEventually(Entity entity, Lifecycle expectedState, Boolean expectedUp) {
+ EntityAsserts.assertAttributeEqualsEventually(entity, Attributes.SERVICE_STATE_ACTUAL, expectedState);
+ EntityAsserts.assertAttributeEqualsEventually(entity, Attributes.SERVICE_UP, expectedUp);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/11740cc6/core/src/test/resources/brooklyn/logback-appender-stdout.xml
----------------------------------------------------------------------
diff --git a/core/src/test/resources/brooklyn/logback-appender-stdout.xml b/core/src/test/resources/brooklyn/logback-appender-stdout.xml
new file mode 100644
index 0000000..e612042
--- /dev/null
+++ b/core/src/test/resources/brooklyn/logback-appender-stdout.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+-->
+<included>
+
+ <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+ <encoder>
+ <pattern>%d %-5level %X{entity.ids} %msg%n%xEx{0}</pattern>
+ </encoder>
+ <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+ <level>INFO</level>
+ </filter>
+ </appender>
+
+ <root>
+ <appender-ref ref="STDOUT" />
+ </root>
+
+</included>
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/11740cc6/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 62a2bfe..6df2dcf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -103,7 +103,7 @@
<!-- Dependency Versions -->
<jclouds.version>2.0.2</jclouds.version> <!-- JCLOUDS_VERSION -->
<logback.version>1.0.7</logback.version>
- <slf4j.version>1.6.6</slf4j.version> <!-- used for java.util.logging jul-to-slf4j interception -->
+ <slf4j.version>1.7.25</slf4j.version> <!-- used for java.util.logging jul-to-slf4j interception -->
<!-- Must match jclouds' version. From jclouds 1.9.3+ can be any version in the range [16-20) -->
<guava.version>18.0</guava.version>
<!--
[13/13] brooklyn-server git commit: This closes #940
Posted by tb...@apache.org.
This closes #940
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/95698ead
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/95698ead
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/95698ead
Branch: refs/heads/master
Commit: 95698eadb6ddb710688367933840ba509a6c5fe9
Parents: 1fcc80e 1fb6e3d
Author: Thomas Bouron <th...@cloudsoftcorp.com>
Authored: Thu Feb 15 10:49:08 2018 +0000
Committer: Thomas Bouron <th...@cloudsoftcorp.com>
Committed: Thu Feb 15 10:49:08 2018 +0000
----------------------------------------------------------------------
.../util/core/task/BasicExecutionContext.java | 43 +++-
.../core/entity/ApplicationLoggingTest.java | 194 +++++++++++++++++++
.../brooklyn/logback-appender-stdout.xml | 2 +-
pom.xml | 2 +-
.../org/apache/brooklyn/test/LogWatcher.java | 135 ++++++++-----
5 files changed, 326 insertions(+), 50 deletions(-)
----------------------------------------------------------------------
[07/13] brooklyn-server git commit: Use ConsoleAppender in LogWatcher
Posted by tb...@apache.org.
Use ConsoleAppender in LogWatcher
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/df735204
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/df735204
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/df735204
Branch: refs/heads/master
Commit: df7352048051721952a9f082f1df31b7bc8c54b2
Parents: 643aa9c
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Fri Jan 26 17:41:02 2018 +0000
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Fri Feb 9 21:09:20 2018 +0000
----------------------------------------------------------------------
.../java/org/apache/brooklyn/test/LogWatcher.java | 14 ++++----------
1 file changed, 4 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/df735204/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
----------------------------------------------------------------------
diff --git a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
index 16d27b0..176b295 100644
--- a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
+++ b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
@@ -51,6 +51,7 @@ import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.IThrowableProxy;
import ch.qos.logback.classic.spi.StackTraceElementProxy;
+import ch.qos.logback.core.ConsoleAppender;
import ch.qos.logback.core.OutputStreamAppender;
/**
@@ -155,7 +156,7 @@ public class LogWatcher implements Closeable {
private final List<ILoggingEvent> events = Collections.synchronizedList(Lists.<ILoggingEvent>newLinkedList());
private final AtomicBoolean closed = new AtomicBoolean();
private final ch.qos.logback.classic.Level loggerLevel;
- private final OutputStreamAppender<ILoggingEvent> appender;
+ private final ConsoleAppender<ILoggingEvent> appender;
private final List<ch.qos.logback.classic.Logger> watchedLoggers = Lists.newArrayList();
private volatile Map<ch.qos.logback.classic.Logger, Level> origLevels = Maps.newLinkedHashMap();
@@ -169,14 +170,7 @@ public class LogWatcher implements Closeable {
this.loggerLevel = checkNotNull(loggerLevel, "loggerLevel");
LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
- this.appender = new OutputStreamAppender<ILoggingEvent>() {
- @Override
- protected void append(ILoggingEvent event) {
- super.append(event);
-
- LOG.trace("level="+event.getLevel()+"; event="+event+"; msg="+event.getFormattedMessage());
- }
- };
+ this.appender = new ConsoleAppender<>();
PatternLayoutEncoder ple = new PatternLayoutEncoder() {
@Override
@@ -195,6 +189,7 @@ public class LogWatcher implements Closeable {
if (event != null && filter.apply(formatted)) {
events.add(formatted);
}
+ LOG.trace("level="+event.getLevel()+"; event="+event+"; msg="+event.getFormattedMessage());
super.doEncode(event);
}
@@ -206,7 +201,6 @@ public class LogWatcher implements Closeable {
this.appender.setContext(lc);
this.appender.setEncoder(ple);
- this.appender.setOutputStream(System.out);
this.appender.start();
for (String loggerName : loggerNames) {
[08/13] brooklyn-server git commit: Re-use pattern layout from
logback-appender-stdout.xml
Posted by tb...@apache.org.
Re-use pattern layout from logback-appender-stdout.xml
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/661e40fc
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/661e40fc
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/661e40fc
Branch: refs/heads/master
Commit: 661e40fc18805b975cd46f8e4e3b3d97b12258c6
Parents: df73520
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Fri Jan 26 17:53:59 2018 +0000
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Fri Feb 9 21:09:20 2018 +0000
----------------------------------------------------------------------
.../main/java/org/apache/brooklyn/test/LogWatcher.java | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/661e40fc/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
----------------------------------------------------------------------
diff --git a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
index 176b295..aa8aa0b 100644
--- a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
+++ b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
@@ -33,6 +33,7 @@ import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.BiPredicate;
+import java.util.regex.Pattern;
import org.apache.brooklyn.util.time.Time;
import org.slf4j.Logger;
@@ -51,6 +52,7 @@ import ch.qos.logback.classic.encoder.PatternLayoutEncoder;
import ch.qos.logback.classic.spi.ILoggingEvent;
import ch.qos.logback.classic.spi.IThrowableProxy;
import ch.qos.logback.classic.spi.StackTraceElementProxy;
+import ch.qos.logback.core.Appender;
import ch.qos.logback.core.ConsoleAppender;
import ch.qos.logback.core.OutputStreamAppender;
@@ -195,7 +197,13 @@ public class LogWatcher implements Closeable {
}
};
- ple.setPattern(">>>> %d{ISO8601} %X{entity.ids} %-5.5p %3X{bundle.id} %c{1.} [%.16t] %m%n");
+ // The code below makes the assumption that the (test) logger configuration has a console appender
+ // for root, with a pattern layout encoder, and re-uses its encoder pattern.
+ // This is (at time of writing) as defined in logback-appender-stdout.xml.
+ final Appender<ILoggingEvent> appender = lc.getLogger("ROOT").getAppender("STDOUT");
+ final ConsoleAppender stdout = ConsoleAppender.class.cast(appender);
+ final PatternLayoutEncoder stdoutEncoder = PatternLayoutEncoder.class.cast(stdout.getEncoder());
+ ple.setPattern(stdoutEncoder.getPattern());
ple.setContext(lc);
ple.start();
[10/13] brooklyn-server git commit: Add Task ID to MDC
Posted by tb...@apache.org.
Add Task ID to MDC
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/2d13332f
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/2d13332f
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/2d13332f
Branch: refs/heads/master
Commit: 2d13332f30a739a99737e1adb83773f53678220a
Parents: 8387563
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Fri Feb 2 17:46:41 2018 +0000
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Fri Feb 9 21:09:20 2018 +0000
----------------------------------------------------------------------
.../util/core/task/BasicExecutionContext.java | 25 +++++++++---------
.../core/entity/ApplicationLoggingTest.java | 27 +++++++++++++++-----
.../brooklyn/logback-appender-stdout.xml | 2 +-
3 files changed, 34 insertions(+), 20 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/2d13332f/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
index 2575464..c32485a 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
@@ -75,6 +75,7 @@ public class BasicExecutionContext extends AbstractExecutionContext {
static final ThreadLocal<BasicExecutionContext> perThreadExecutionContext = new ThreadLocal<BasicExecutionContext>();
public static final String ENTITY_IDS = "entity.ids";
+ public static final String TASK_ID = "task.id";
public static BasicExecutionContext getCurrentExecutionContext() { return perThreadExecutionContext.get(); }
@@ -229,13 +230,15 @@ public class BasicExecutionContext extends AbstractExecutionContext {
Throwable error = null;
final Set<Object> taskTags = task.getTags();
Entity target = BrooklynTaskTags.getWrappedEntityOfType(taskTags, BrooklynTaskTags.TARGET_ENTITY);
- final AtomicReference<MDC.MDCCloseable> loggingContext = new AtomicReference<>();
+ final AtomicReference<MDC.MDCCloseable> entityMDC = new AtomicReference<>();
+ final AtomicReference<MDC.MDCCloseable> taskMDC = new AtomicReference<>();
try {
((BasicExecutionManager)executionManager).afterSubmitRecordFuture(task, future);
((BasicExecutionManager)executionManager).beforeStartInSameThreadTask(null, task);
if (target != null) {
- loggingContext.set(MDC.putCloseable(ENTITY_IDS, idStack(target).toString()));
+ entityMDC.set(MDC.putCloseable(ENTITY_IDS, idStack(target).toString()));
+ taskMDC.set(MDC.putCloseable(TASK_ID, task.getId()));
}
return future.set(job.call());
@@ -250,10 +253,8 @@ public class BasicExecutionContext extends AbstractExecutionContext {
try {
((BasicExecutionManager)executionManager).afterEndInSameThreadTask(null, task, error);
} finally {
- final MDC.MDCCloseable context = loggingContext.get();
- if (context != null) {
- context.close();
- }
+ if (entityMDC.get() != null) entityMDC.get().close();
+ if (taskMDC.get() != null) taskMDC.get().close();
BasicExecutionManager.getPerThreadCurrentTask().set(previousTask);
perThreadExecutionContext.set(oldExecutionContext);
}
@@ -376,7 +377,8 @@ public class BasicExecutionContext extends AbstractExecutionContext {
}
Entity target = BrooklynTaskTags.getWrappedEntityOfType(taskTags, BrooklynTaskTags.TARGET_ENTITY);
- final AtomicReference<MDC.MDCCloseable> loggingContext = new AtomicReference<>();
+ final AtomicReference<MDC.MDCCloseable> entityMDC = new AtomicReference<>();
+ final AtomicReference<MDC.MDCCloseable> taskMDC = new AtomicReference<>();
final Object startCallback = properties.get("newTaskStartCallback");
properties.put("newTaskStartCallback", new Function<Task<?>,Void>() {
@@ -384,7 +386,8 @@ public class BasicExecutionContext extends AbstractExecutionContext {
public Void apply(Task<?> it) {
registerPerThreadExecutionContext();
if (target != null) {
- loggingContext.set(MDC.putCloseable(ENTITY_IDS, idStack(target).toString()));
+ entityMDC.set(MDC.putCloseable(ENTITY_IDS, idStack(target).toString()));
+ taskMDC.set(MDC.putCloseable(TASK_ID, it.getId()));
}
if (startCallback!=null) BasicExecutionManager.invokeCallback(startCallback, it);
return null;
@@ -398,10 +401,8 @@ public class BasicExecutionContext extends AbstractExecutionContext {
if (endCallback!=null) BasicExecutionManager.invokeCallback(endCallback, it);
} finally {
clearPerThreadExecutionContext();
- final MDC.MDCCloseable context = loggingContext.get();
- if (context != null) {
- context.close();
- }
+ if (entityMDC.get() != null) entityMDC.get().close();
+ if (taskMDC.get() != null) taskMDC.get().close();
}
return null;
}});
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/2d13332f/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
index 4c075aa..830358f 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
@@ -24,13 +24,19 @@ import static org.apache.brooklyn.test.LogWatcher.EventPredicates.matchingRegexe
import java.util.ArrayDeque;
import java.util.Collection;
import java.util.Deque;
+import java.util.List;
import org.apache.brooklyn.api.entity.Entity;
import org.apache.brooklyn.api.entity.EntitySpec;
import org.apache.brooklyn.api.entity.ImplementedBy;
import org.apache.brooklyn.api.location.Location;
+import org.apache.brooklyn.api.mgmt.ExecutionContext;
+import org.apache.brooklyn.api.mgmt.Task;
+import org.apache.brooklyn.api.mgmt.TaskAdaptable;
+import org.apache.brooklyn.core.effector.Effectors;
import org.apache.brooklyn.core.entity.lifecycle.Lifecycle;
import org.apache.brooklyn.core.entity.lifecycle.ServiceStateLogic;
+import org.apache.brooklyn.core.entity.trait.Startable;
import org.apache.brooklyn.core.entity.trait.StartableMethods;
import org.apache.brooklyn.core.test.BrooklynAppUnitTestSupport;
import org.apache.brooklyn.core.test.entity.TestApplication;
@@ -39,6 +45,7 @@ import org.apache.brooklyn.core.test.entity.TestEntity;
import org.apache.brooklyn.core.test.entity.TestEntityImpl;
import org.apache.brooklyn.test.LogWatcher;
import org.apache.brooklyn.util.collections.QuorumCheck;
+import org.apache.brooklyn.util.core.task.DynamicTasks;
import org.apache.brooklyn.util.exceptions.Exceptions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -46,6 +53,7 @@ import org.testng.annotations.Test;
import com.google.common.base.Predicates;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
import ch.qos.logback.classic.Level;
@@ -150,16 +158,21 @@ public class ApplicationLoggingTest extends BrooklynAppUnitTestSupport {
try {
app.start(ImmutableList.of(app.newSimulatedLocation()));
assertHealthEventually(app, Lifecycle.RUNNING, true);
- app.stop();
+ final TaskAdaptable<Void> stopTask = Effectors.invocation(app, Startable.STOP, ImmutableMap.of());
+ final String stopId = stopTask.asTask().getId();
+ LOG.info("Stop task id is {}", stopId);
+ final ExecutionContext executionContext = mgmt.getExecutionContext(app);
+ executionContext.submit(stopTask);
assertHealthEventually(app, Lifecycle.STOPPED, false);
// Look for output like
- // 2018-01-27 16:25:52,386 INFO [dwym20xr82, b1babwc34d, se1d2nn62j] Hello from entity se1d2nn62j
- // 2018-01-27 16:25:52,388 INFO [dwym20xr82, b1babwc34d] Hello from entity b1babwc34d
- // 2018-01-27 16:25:52,389 INFO [dwym20xr82] Hello world
- // 2018-01-27 16:25:52,399 INFO [dwym20xr82] Goodbye cruel world
- // 2018-01-27 16:25:52,400 INFO [dwym20xr82, b1babwc34d] Goodbye from entity b1babwc34d
- // 2018-01-27 16:25:52,401 INFO [dwym20xr82, b1babwc34d, se1d2nn62j] Goodbye from entity se1d2nn62j
+// 2018-02-02 17:26:20,481 INFO LxwcJM6p@[i13ysr26ou, bb0ptkb284, xl760xm9dc] Hello from entity xl760xm9dc
+// 2018-02-02 17:26:20,484 INFO Wv3r7mmH@[i13ysr26ou, bb0ptkb284] Hello from entity bb0ptkb284
+// 2018-02-02 17:26:20,485 INFO P3omDOqq@[i13ysr26ou] Hello world
+// 2018-02-02 17:26:20,497 INFO KKKPujW4@[i13ysr26ou] Goodbye cruel world
+// 2018-02-02 17:26:20,498 INFO NR5pk9h4@[i13ysr26ou, bb0ptkb284] Goodbye from entity bb0ptkb284
+// 2018-02-02 17:26:20,499 INFO KHMVOAp4@[i13ysr26ou, bb0ptkb284, xl760xm9dc] Goodbye from entity xl760xm9dc
+ watcher.assertHasEvent(containsMessage(stopId + "@"));
watcher.assertHasEvent(matchingRegexes(".*" + app.getApplicationId() + ".*Hello world.*"));;
watcher.assertHasEvent(matchingRegexes(".*" +
ImmutableList.of(app.getId(), entity.getId()).toString()
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/2d13332f/logging/logback-includes/src/main/resources/brooklyn/logback-appender-stdout.xml
----------------------------------------------------------------------
diff --git a/logging/logback-includes/src/main/resources/brooklyn/logback-appender-stdout.xml b/logging/logback-includes/src/main/resources/brooklyn/logback-appender-stdout.xml
index e612042..08b7f9f 100644
--- a/logging/logback-includes/src/main/resources/brooklyn/logback-appender-stdout.xml
+++ b/logging/logback-includes/src/main/resources/brooklyn/logback-appender-stdout.xml
@@ -21,7 +21,7 @@
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
- <pattern>%d %-5level %X{entity.ids} %msg%n%xEx{0}</pattern>
+ <pattern>%d %-5level %X{task.id}@%X{entity.ids} %msg%n%xEx{0}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
[09/13] brooklyn-server git commit: Add comments explaining handling
of pattern layout
Posted by tb...@apache.org.
Add comments explaining handling of pattern layout
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/19b06ba2
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/19b06ba2
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/19b06ba2
Branch: refs/heads/master
Commit: 19b06ba2876e40e29387389f5aa033697f846b2a
Parents: 2c81f63
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Fri Jan 26 18:02:08 2018 +0000
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Fri Feb 9 21:09:20 2018 +0000
----------------------------------------------------------------------
.../src/main/java/org/apache/brooklyn/test/LogWatcher.java | 7 +++++++
1 file changed, 7 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/19b06ba2/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
----------------------------------------------------------------------
diff --git a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
index 6eaefa3..3f6b002 100644
--- a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
+++ b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
@@ -178,6 +178,11 @@ public class LogWatcher implements Closeable {
@Override
public void doEncode(ILoggingEvent event) throws IOException {
final String txt = layout.doLayout(event);
+
+ // Jump through hoops to turn the input event (without any layout)
+ // into one processed by the pattern layout, prior to applying the filter.
+ // Wrap the input event in a dynamic proxy to lay out the message/toString methods
+ // but delegate all other methods to the real input event
ILoggingEvent formatted = (ILoggingEvent) Proxy.newProxyInstance(
ILoggingEvent.class.getClassLoader(),
new Class<?>[]{ILoggingEvent.class},
@@ -188,6 +193,8 @@ public class LogWatcher implements Closeable {
return method.invoke(event, args);
}
});
+
+ // now we can do the filter on the text that will be written to the log output
if (event != null && filter.apply(formatted)) {
events.add(formatted);
}
[02/13] brooklyn-server git commit: Avoid spaces in entity list
Posted by tb...@apache.org.
Avoid spaces in entity list
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/eac895ec
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/eac895ec
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/eac895ec
Branch: refs/heads/master
Commit: eac895ecff79bb77070dfac8581e5cf457e02c6a
Parents: 2d13332
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Fri Feb 2 18:01:37 2018 +0000
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Fri Feb 9 21:09:20 2018 +0000
----------------------------------------------------------------------
.../brooklyn/util/core/task/BasicExecutionContext.java | 8 ++++----
.../brooklyn/core/entity/ApplicationLoggingTest.java | 13 +++++++------
2 files changed, 11 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/eac895ec/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
index c32485a..a3f33f7 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/task/BasicExecutionContext.java
@@ -237,7 +237,7 @@ public class BasicExecutionContext extends AbstractExecutionContext {
((BasicExecutionManager)executionManager).afterSubmitRecordFuture(task, future);
((BasicExecutionManager)executionManager).beforeStartInSameThreadTask(null, task);
if (target != null) {
- entityMDC.set(MDC.putCloseable(ENTITY_IDS, idStack(target).toString()));
+ entityMDC.set(MDC.putCloseable(ENTITY_IDS, idStack(target)));
taskMDC.set(MDC.putCloseable(TASK_ID, task.getId()));
}
return future.set(job.call());
@@ -386,7 +386,7 @@ public class BasicExecutionContext extends AbstractExecutionContext {
public Void apply(Task<?> it) {
registerPerThreadExecutionContext();
if (target != null) {
- entityMDC.set(MDC.putCloseable(ENTITY_IDS, idStack(target).toString()));
+ entityMDC.set(MDC.putCloseable(ENTITY_IDS, idStack(target)));
taskMDC.set(MDC.putCloseable(TASK_ID, it.getId()));
}
if (startCallback!=null) BasicExecutionManager.invokeCallback(startCallback, it);
@@ -418,7 +418,7 @@ public class BasicExecutionContext extends AbstractExecutionContext {
}
}
- private Deque<String> idStack(Entity target) {
+ private String idStack(Entity target) {
Deque<String> ids = new ArrayDeque<>();
Entity e = target;
ids.push(e.getId());
@@ -426,7 +426,7 @@ public class BasicExecutionContext extends AbstractExecutionContext {
e = e.getParent();
ids.push(e.getId());
}
- return ids;
+ return ids.toString().replace(" ", "");
}
private static class ContextSwitchingInfo<T> {
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/eac895ec/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
index 830358f..f5ec4b9 100644
--- a/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
+++ b/core/src/test/java/org/apache/brooklyn/core/entity/ApplicationLoggingTest.java
@@ -166,12 +166,13 @@ public class ApplicationLoggingTest extends BrooklynAppUnitTestSupport {
assertHealthEventually(app, Lifecycle.STOPPED, false);
// Look for output like
-// 2018-02-02 17:26:20,481 INFO LxwcJM6p@[i13ysr26ou, bb0ptkb284, xl760xm9dc] Hello from entity xl760xm9dc
-// 2018-02-02 17:26:20,484 INFO Wv3r7mmH@[i13ysr26ou, bb0ptkb284] Hello from entity bb0ptkb284
-// 2018-02-02 17:26:20,485 INFO P3omDOqq@[i13ysr26ou] Hello world
-// 2018-02-02 17:26:20,497 INFO KKKPujW4@[i13ysr26ou] Goodbye cruel world
-// 2018-02-02 17:26:20,498 INFO NR5pk9h4@[i13ysr26ou, bb0ptkb284] Goodbye from entity bb0ptkb284
-// 2018-02-02 17:26:20,499 INFO KHMVOAp4@[i13ysr26ou, bb0ptkb284, xl760xm9dc] Goodbye from entity xl760xm9dc
+// 2018-02-02 18:00:39,351 INFO xJTIhVuy@[ixxmgfzjos,m5it71jfiw,kw18pflnqp] Hello from entity kw18pflnqp
+// 2018-02-02 18:00:39,354 INFO hqSMSJKm@[ixxmgfzjos,m5it71jfiw] Hello from entity m5it71jfiw
+// 2018-02-02 18:00:39,354 INFO fCW0mP92@[ixxmgfzjos] Hello world
+// 2018-02-02 18:00:39,365 INFO @ Stop task id is nxLdBOiG
+// 2018-02-02 18:00:39,366 INFO nxLdBOiG@[ixxmgfzjos] Goodbye cruel world
+// 2018-02-02 18:00:39,367 INFO hniq2zjE@[ixxmgfzjos,m5it71jfiw] Goodbye from entity m5it71jfiw
+// 2018-02-02 18:00:39,369 INFO cFmqxDkJ@[ixxmgfzjos,m5it71jfiw,kw18pflnqp] Goodbye from entity kw18pflnqp
watcher.assertHasEvent(containsMessage(stopId + "@"));
watcher.assertHasEvent(matchingRegexes(".*" + app.getApplicationId() + ".*Hello world.*"));;
watcher.assertHasEvent(matchingRegexes(".*" +
[05/13] brooklyn-server git commit: Add context to main stdout
appender
Posted by tb...@apache.org.
Add context to main stdout appender
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/d4563338
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/d4563338
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/d4563338
Branch: refs/heads/master
Commit: d45633380dff9cc098784e85fab8ddd9c7d1fbba
Parents: 11740cc
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Tue Jan 23 12:24:25 2018 +0000
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Fri Feb 9 21:09:20 2018 +0000
----------------------------------------------------------------------
.../src/main/resources/brooklyn/logback-appender-stdout.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/d4563338/logging/logback-includes/src/main/resources/brooklyn/logback-appender-stdout.xml
----------------------------------------------------------------------
diff --git a/logging/logback-includes/src/main/resources/brooklyn/logback-appender-stdout.xml b/logging/logback-includes/src/main/resources/brooklyn/logback-appender-stdout.xml
index 0763e3b..e612042 100644
--- a/logging/logback-includes/src/main/resources/brooklyn/logback-appender-stdout.xml
+++ b/logging/logback-includes/src/main/resources/brooklyn/logback-appender-stdout.xml
@@ -21,7 +21,7 @@
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
- <pattern>%d %-5level %msg%n%xEx{0}</pattern>
+ <pattern>%d %-5level %X{entity.ids} %msg%n%xEx{0}</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
[11/13] brooklyn-server git commit: Remove redundant cast
Posted by tb...@apache.org.
Remove redundant cast
Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/56bacd83
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/56bacd83
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/56bacd83
Branch: refs/heads/master
Commit: 56bacd83daef1bb3d4596fbf0448909ea8c36e48
Parents: 661e40f
Author: Geoff Macartney <ge...@cloudsoftcorp.com>
Authored: Fri Jan 26 17:54:32 2018 +0000
Committer: Geoff Macartney <ge...@cloudsoftcorp.com>
Committed: Fri Feb 9 21:09:20 2018 +0000
----------------------------------------------------------------------
.../src/main/java/org/apache/brooklyn/test/LogWatcher.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/56bacd83/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
----------------------------------------------------------------------
diff --git a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
index aa8aa0b..d41e1fa 100644
--- a/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
+++ b/test-support/src/main/java/org/apache/brooklyn/test/LogWatcher.java
@@ -216,7 +216,7 @@ public class LogWatcher implements Closeable {
logger.addAppender(this.appender);
logger.setLevel(this.loggerLevel);
logger.setAdditive(false);
- watchedLoggers.add((ch.qos.logback.classic.Logger) logger);
+ watchedLoggers.add(logger);
}
}