----- On Feb 4, 2016, at 12:32 AM, Alexandre Montplaisir 
[email protected] wrote:

> It is possible for log records to contain messages that need some
> formatting, for example if the string contains localized elements
> or if the log(Level, String, Object[]) method is used.
> 
> In these cases, we need to make sure to format the string and not
> pass the "raw" string to the tracepoint.
> 
> This only applies to the JUL API. log4j 1.2.x did not handle such
> formatting, although log4j 2.x does.

Hi Alexandre,

The fix applies fine to master (merged). Can you also provide
a fix for stable-2.7 ? The cherry-pick is not straightforward.

Thanks!

Mathieu

> 
> Signed-off-by: Alexandre Montplaisir <[email protected]>
> ---
> .../org/lttng/ust/agent/jul/LttngLogHandler.java         | 16 +++++++++++++++-
> 1 file changed, 15 insertions(+), 1 deletion(-)
> 
> diff --git
> a/liblttng-ust-java-agent/java/lttng-ust-agent-jul/org/lttng/ust/agent/jul/LttngLogHandler.java
> b/liblttng-ust-java-agent/java/lttng-ust-agent-jul/org/lttng/ust/agent/jul/LttngLogHandler.java
> index d8e0cb8..39e08a8 100644
> ---
> a/liblttng-ust-java-agent/java/lttng-ust-agent-jul/org/lttng/ust/agent/jul/LttngLogHandler.java
> +++
> b/liblttng-ust-java-agent/java/lttng-ust-agent-jul/org/lttng/ust/agent/jul/LttngLogHandler.java
> @@ -20,6 +20,7 @@ package org.lttng.ust.agent.jul;
> 
> import java.io.IOException;
> import java.util.concurrent.atomic.AtomicLong;
> +import java.util.logging.Formatter;
> import java.util.logging.Handler;
> import java.util.logging.LogRecord;
> 
> @@ -43,6 +44,17 @@ public class LttngLogHandler extends Handler implements
> ILttngHandler {
> 
>       private static final String SHARED_OBJECT_NAME = "lttng-ust-jul-jni";
> 
> +     /**
> +      * Dummy Formatter object, so we can use its
> +      * {@link Formatter#formatMessage(LogRecord)} method.
> +      */
> +     private static final Formatter FORMATTER = new Formatter() {
> +             @Override
> +             public String format(LogRecord record) {
> +                     throw new UnsupportedOperationException();
> +             }
> +     };
> +
>       private final ILttngAgent<LttngLogHandler> agent;
> 
>       /** Number of events logged (really sent through JNI) by this handler */
> @@ -103,13 +115,15 @@ public class LttngLogHandler extends Handler implements
> ILttngHandler {
>                       return;
>               }
> 
> +             String formattedMessage = FORMATTER.formatMessage(record);
> +
>               eventCount.incrementAndGet();
>               /*
>                * Specific tracepoint designed for JUL events. The source 
> class of the
>                * caller is used for the event name, the raw message is taken, 
> the
>                * loglevel of the record and the thread ID.
>                */
> -             tracepoint(record.getMessage(),
> +             tracepoint(formattedMessage,
>                               record.getLoggerName(),
>                               record.getSourceClassName(),
>                               record.getSourceMethodName(),
> --
> 2.5.0
> 
> 
> _______________________________________________
> lttng-dev mailing list
> [email protected]
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com

_______________________________________________
lttng-dev mailing list
[email protected]
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to