package org.erlide.runtime.events; import org.erlide.util.ErlLogger; import com.ericsson.otp.erlang.OtpErlangAtom; import com.ericsson.otp.erlang.OtpErlangBinary; import com.ericsson.otp.erlang.OtpErlangLong; import com.ericsson.otp.erlang.OtpErlangObject; import com.ericsson.otp.erlang.OtpErlangTuple; import com.google.common.eventbus.Subscribe; public class ErlangLogEventHandler extends ErlangEventHandler { public ErlangLogEventHandler() { super("erlang_log"); } @Subscribe public void handleEvent(final ErlEvent event) { if (!event.getTopic().equals(getTopic())) { return; } final OtpErlangTuple t = (OtpErlangTuple) event.getEvent(); final OtpErlangAtom module = (OtpErlangAtom) t.elementAt(0); final OtpErlangLong line = (OtpErlangLong) t.elementAt(1); final OtpErlangAtom level = (OtpErlangAtom) t.elementAt(2); final OtpErlangObject logEvent = t.elementAt(3); String ss = ""; if (t.arity() == 5) { final OtpErlangTuple backtrace_0 = (OtpErlangTuple) t.elementAt(4); final OtpErlangBinary backtrace = (OtpErlangBinary) backtrace_0.elementAt(1); ss = new String(backtrace.binaryValue()); } try { ErlLogger.getInstance().erlangLog(module.atomValue() + ".erl", line.uIntValue(), level.atomValue().toUpperCase(), "%s %s", logEvent.toString(), ss); } catch (final Exception e) { ErlLogger.warn(e); } } }