/// <summary>Build a JSON entry from the parameters.</summary> /// <remarks>Build a JSON entry from the parameters. This is public for testing.</remarks> /// <param name="writer">destination</param> /// <param name="loggerName">logger name</param> /// <param name="timeStamp">time_t value</param> /// <param name="level">level string</param> /// <param name="threadName">name of the thread</param> /// <param name="message">rendered message</param> /// <param name="ti">nullable thrown information</param> /// <returns>the writer</returns> /// <exception cref="System.IO.IOException">on any problem</exception> public virtual TextWriter ToJson(TextWriter writer, string loggerName, long timeStamp , string level, string threadName, string message, ThrowableInformation ti) { JsonGenerator json = factory.CreateJsonGenerator(writer); json.WriteStartObject(); json.WriteStringField(Name, loggerName); json.WriteNumberField(Time, timeStamp); DateTime date = Extensions.CreateDate(timeStamp); json.WriteStringField(Date, dateFormat.Format(date)); json.WriteStringField(Level, level); json.WriteStringField(Thread, threadName); json.WriteStringField(Message, message); if (ti != null) { //there is some throwable info, but if the log event has been sent over the wire, //there may not be a throwable inside it, just a summary. Exception thrown = ti.GetThrowable(); string eclass = (thrown != null) ? thrown.GetType().FullName : string.Empty; json.WriteStringField(ExceptionClass, eclass); string[] stackTrace = ti.GetThrowableStrRep(); json.WriteArrayFieldStart(Stack); foreach (string row in stackTrace) { json.WriteString(row); } json.WriteEndArray(); } json.WriteEndObject(); json.Flush(); json.Close(); return(writer); }
// --------------------------------------------------------- Private Methods /// <exception cref="System.IO.IOException"/> private void ListBeans(JsonGenerator jg, ObjectName qry, string attribute, HttpServletResponse response) { Log.Debug("Listing beans for " + qry); ICollection <ObjectName> names = null; names = mBeanServer.QueryNames(qry, null); jg.WriteArrayFieldStart("beans"); IEnumerator <ObjectName> it = names.GetEnumerator(); while (it.HasNext()) { ObjectName oname = it.Next(); MBeanInfo minfo; string code = string.Empty; object attributeinfo = null; try { minfo = mBeanServer.GetMBeanInfo(oname); code = minfo.GetClassName(); string prs = string.Empty; try { if ("org.apache.commons.modeler.BaseModelMBean".Equals(code)) { prs = "modelerType"; code = (string)mBeanServer.GetAttribute(oname, prs); } if (attribute != null) { prs = attribute; attributeinfo = mBeanServer.GetAttribute(oname, prs); } } catch (AttributeNotFoundException e) { // If the modelerType attribute was not found, the class name is used // instead. Log.Error("getting attribute " + prs + " of " + oname + " threw an exception", e); } catch (MBeanException e) { // The code inside the attribute getter threw an exception so log it, // and fall back on the class name Log.Error("getting attribute " + prs + " of " + oname + " threw an exception", e); } catch (RuntimeException e) { // For some reason even with an MBeanException available to them // Runtime exceptionscan still find their way through, so treat them // the same as MBeanException Log.Error("getting attribute " + prs + " of " + oname + " threw an exception", e); } catch (ReflectionException e) { // This happens when the code inside the JMX bean (setter?? from the // java docs) threw an exception, so log it and fall back on the // class name Log.Error("getting attribute " + prs + " of " + oname + " threw an exception", e); } } catch (InstanceNotFoundException) { //Ignored for some reason the bean was not found so don't output it continue; } catch (IntrospectionException e) { // This is an internal error, something odd happened with reflection so // log it and don't output the bean. Log.Error("Problem while trying to process JMX query: " + qry + " with MBean " + oname, e); continue; } catch (ReflectionException e) { // This happens when the code inside the JMX bean threw an exception, so // log it and don't output the bean. Log.Error("Problem while trying to process JMX query: " + qry + " with MBean " + oname, e); continue; } jg.WriteStartObject(); jg.WriteStringField("name", oname.ToString()); jg.WriteStringField("modelerType", code); if ((attribute != null) && (attributeinfo == null)) { jg.WriteStringField("result", "ERROR"); jg.WriteStringField("message", "No attribute with name " + attribute + " was found." ); jg.WriteEndObject(); jg.WriteEndArray(); jg.Close(); response.SetStatus(HttpServletResponse.ScNotFound); return; } if (attribute != null) { WriteAttribute(jg, attribute, attributeinfo); } else { MBeanAttributeInfo[] attrs = minfo.GetAttributes(); for (int i = 0; i < attrs.Length; i++) { WriteAttribute(jg, oname, attrs[i]); } } jg.WriteEndObject(); } jg.WriteEndArray(); }