X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=src%2Flib%2Flttng-ust-java-agent%2Fjava%2Flttng-ust-agent-log4j2%2Forg%2Flttng%2Fust%2Fagent%2Flog4j2%2FLttngLogAppender.java;h=cebd18945e152cdb81ccc8461aa59e5a3b90eac3;hb=495b8381eb4348cdad015e3c324bc4edccfd53d3;hp=08612f57cd2f5bcdb93137fd7101b05637377cff;hpb=8063c7b022fdde06813466a21c0fcfc2d8206b56;p=lttng-ust.git diff --git a/src/lib/lttng-ust-java-agent/java/lttng-ust-agent-log4j2/org/lttng/ust/agent/log4j2/LttngLogAppender.java b/src/lib/lttng-ust-java-agent/java/lttng-ust-agent-log4j2/org/lttng/ust/agent/log4j2/LttngLogAppender.java index 08612f57..cebd1894 100644 --- a/src/lib/lttng-ust-java-agent/java/lttng-ust-agent-log4j2/org/lttng/ust/agent/log4j2/LttngLogAppender.java +++ b/src/lib/lttng-ust-java-agent/java/lttng-ust-agent-log4j2/org/lttng/ust/agent/log4j2/LttngLogAppender.java @@ -26,6 +26,7 @@ import org.apache.logging.log4j.core.config.plugins.PluginAttribute; import org.apache.logging.log4j.core.config.plugins.PluginElement; import org.apache.logging.log4j.core.config.plugins.PluginFactory; import org.apache.logging.log4j.message.Message; +import org.lttng.ust.agent.ILttngAgent.Domain; import org.lttng.ust.agent.ILttngHandler; import org.lttng.ust.agent.context.ContextInfoSerializer; @@ -61,20 +62,24 @@ public final class LttngLogAppender extends AbstractAppender implements ILttngHa * Constructor * * @param name The name of the Appender. + * @param domain The LTTng-UST agent domain 'LOG4J' / 'LOG4J2'. * @param filter The Filter or null. - * @param ignoreExceptions If {@code "true"} (default) exceptions encountered - * when appending events are logged; otherwise they are + * @param ignoreExceptions If {@code "true"} exceptions encountered when + * appending events are logged; otherwise they are * propagated to the caller. * - * @throws IOException This handler requires the lttng-ust-log4j-jni.so - * native library, through which it will send the - * trace events. This exception is thrown if this - * library cannot be found. - * @throws SecurityException We will forward any SecurityExcepion that may be - * thrown when trying to load the JNI library. + * @throws IOException This handler requires the + * lttng-ust-log4j-jni.so native library, + * through which it will send the trace events. + * This exception is thrown if this library + * cannot be found. + * @throws IllegalArgumentException If the provided domain is unsupported. + * @throws SecurityException We will forward any SecurityExcepion that + * may be thrown when trying to load the JNI + * library. */ - protected LttngLogAppender(String name, Filter filter, boolean ignoreExceptions) - throws IOException, SecurityException { + protected LttngLogAppender(String name, LttngLog4j2Agent.Domain domain, Filter filter, boolean ignoreExceptions) + throws IOException, IllegalArgumentException, SecurityException { super(name, filter, null, ignoreExceptions, Property.EMPTY_ARRAY); @@ -86,7 +91,14 @@ public final class LttngLogAppender extends AbstractAppender implements ILttngHa } /* Register to the relevant agent. */ - agent = LttngLog4j2Agent.getInstance(); + if (domain == LttngLog4j2Agent.Domain.LOG4J) { + agent = LttngLog4j2Agent.getLog4j1Instance(); + } else if (domain == LttngLog4j2Agent.Domain.LOG4J2) { + agent = LttngLog4j2Agent.getLog4j2Instance(); + } else { + throw new IllegalArgumentException("Unsupported domain '" + domain + "'"); + } + agent.registerHandler(this); } @@ -94,35 +106,59 @@ public final class LttngLogAppender extends AbstractAppender implements ILttngHa * Create an LttngLogAppender. * * @param name The name of the Appender, null returns null. + * @param domain The LTTng-UST agent domain 'LOG4J' / 'LOG4J2'. * @param ignoreExceptions If {@code "true"} (default) exceptions encountered * when appending events are logged; otherwise they are * propagated to the caller. * @param filter The Filter or null. * - * @return A new LttngLogAppender, null if the name was null. - * - * @throws IOException This handler requires the lttng-ust-log4j-jni.so - * native library, through which it will send the - * trace events. This exception is thrown if this - * library cannot be found. - * @throws SecurityException We will forward any SecurityExcepion that may be - * thrown when trying to load the JNI library. + * @return A new LttngLogAppender, null if the name was null or the domain is + * null or invalid. */ @PluginFactory public static LttngLogAppender createAppender(@PluginAttribute("name") String name, - @PluginAttribute("ignoreExceptions") Boolean ignoreExceptions, @PluginElement("Filters") Filter filter) - throws IOException, SecurityException { + @PluginAttribute("domain") String domain, @PluginAttribute("ignoreExceptions") Boolean ignoreExceptions, + @PluginElement("Filters") Filter filter) { if (name == null) { LOGGER.error("No name provided for LttngLogAppender"); return null; } + if (domain == null) { + LOGGER.error("No domain provided for LttngLogAppender"); + return null; + } + if (ignoreExceptions == null) { ignoreExceptions = true; } - return new LttngLogAppender(name, filter, ignoreExceptions); + /* Parse the domain string */ + LttngLog4j2Agent.Domain parsedDomain; + try { + parsedDomain = LttngLog4j2Agent.Domain.valueOf(domain.toUpperCase()); + } catch (IllegalArgumentException e) { + LOGGER.error("Invalid domain '{}' for LttngLogAppender", domain); + return null; + } + + /* Create the appender and handle the possible failures. */ + LttngLogAppender newAppender; + try { + newAppender = new LttngLogAppender(name, parsedDomain, filter, ignoreExceptions); + } catch (IllegalArgumentException e) { + LOGGER.error("Invalid domain '{}' for LttngLogAppender", parsedDomain); + newAppender = null; + } catch (SecurityException e) { + LOGGER.error("Security error trying to load '{}' JNI library for LttngLogAppender", SHARED_OBJECT_NAME); + newAppender = null; + } catch (IOException e) { + LOGGER.error("Failed to load '{}' JNI library for LttngLogAppender", SHARED_OBJECT_NAME); + newAppender = null; + } + + return newAppender; } @Override @@ -205,6 +241,6 @@ public final class LttngLogAppender extends AbstractAppender implements ILttngHa LttngLog4j2Api.tracepointWithContext(message, loggername, classname, methodname, filename, line, event.getTimeMillis(), event.getLevel().intLevel(), event.getThreadName(), - contextInfo.getEntriesArray(), contextInfo.getStringsArray()); + contextInfo.getEntriesArray(), contextInfo.getStringsArray(), agent.getDomain() == Domain.LOG4J); } }