[lttng-dev] [PATCH lttng-ust] Fix: Ensure the Java JUL messages are correctly formatted

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Thu Feb 4 09:23:16 EST 2016


----- On Feb 4, 2016, at 12:32 AM, Alexandre Montplaisir alexmonthy at efficios.com 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 <alexmonthy at efficios.com>
> ---
> .../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
> lttng-dev at lists.lttng.org
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

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



More information about the lttng-dev mailing list