X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=liblttng-ust-jul%2Forg%2Flttng%2Fust%2Fjul%2FLTTngLogHandler.java;h=d2d5587489b26ff4797967756c35c4cef87e0ec3;hb=a15440fd233e9b45850475344d627683a79dd9af;hp=dfc15b3df65115fbf91879ceac5bf5f3f7737616;hpb=eadbff066f0dab5d8396a038d9bb1f2e211a1feb;p=lttng-ust.git diff --git a/liblttng-ust-jul/org/lttng/ust/jul/LTTngLogHandler.java b/liblttng-ust-jul/org/lttng/ust/jul/LTTngLogHandler.java index dfc15b3d..d2d55874 100644 --- a/liblttng-ust-jul/org/lttng/ust/jul/LTTngLogHandler.java +++ b/liblttng-ust-jul/org/lttng/ust/jul/LTTngLogHandler.java @@ -21,12 +21,51 @@ import java.lang.String; import java.util.logging.Handler; import java.util.logging.LogRecord; import java.util.logging.LogManager; +import java.util.logging.Level; +import java.util.HashMap; import org.lttng.ust.jul.LTTngUst; +/* Note: This is taken from the LTTng tools ABI. */ +class LTTngLogLevelABI { + /* Loglevel type. */ + public static final int LOGLEVEL_TYPE_ALL = 0; + public static final int LOGLEVEL_TYPE_RANGE = 1; + public static final int LOGLEVEL_TYPE_SINGLE = 2; +} + +class LTTngLogLevel { + /* Event name on which this loglevel is applied on. */ + private String event_name; + /* This level is a JUL int level value. */ + private int level; + private int type; + + public LTTngLogLevel(String event_name, int level, int type) { + this.event_name = event_name; + this.type = type; + this.level = level; + } + + public String getName() { + return this.event_name; + } + + public int getLevel() { + return this.level; + } + + public int getType() { + return this.type; + } +} + public class LTTngLogHandler extends Handler { public LogManager logManager; + private HashMap logLevels = + new HashMap(); + public LTTngLogHandler(LogManager logManager) { super(); @@ -36,6 +75,12 @@ public class LTTngLogHandler extends Handler { LTTngUst.init(); } + public void setLogLevel(String event_name, int level, int type) { + LTTngLogLevel lttngLogLevel = new LTTngLogLevel(event_name, level, + type); + logLevels.put(event_name, lttngLogLevel); + } + @Override public void close() throws SecurityException {} @@ -44,6 +89,40 @@ public class LTTngLogHandler extends Handler { @Override public void publish(LogRecord record) { + int fire_tp = 0, rec_log_level, ev_type, ev_log_level; + LTTngLogLevel lttngLogLevel; + String event_name = record.getLoggerName(); + + lttngLogLevel = logLevels.get(event_name); + if (lttngLogLevel != null) { + rec_log_level = record.getLevel().intValue(); + ev_log_level = lttngLogLevel.getLevel(); + ev_type = lttngLogLevel.getType(); + + switch (ev_type) { + case LTTngLogLevelABI.LOGLEVEL_TYPE_RANGE: + if (ev_log_level <= rec_log_level) { + fire_tp = 1; + } + break; + case LTTngLogLevelABI.LOGLEVEL_TYPE_SINGLE: + if (ev_log_level == rec_log_level) { + fire_tp = 1; + } + break; + case LTTngLogLevelABI.LOGLEVEL_TYPE_ALL: + fire_tp = 1; + break; + } + } else { + /* No loglevel attached thus fire tracepoint. */ + fire_tp = 1; + } + + if (fire_tp == 0) { + return; + } + /* * Specific tracepoing designed for JUL events. The source class of the * caller is used for the event name, the raw message is taken, the