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);
         }
     }