static void Main(string[] args) { // get RI instances predefined in the config settings RILogManager.Get("ViewerOnly").SendMessage("Only the Viewer will get this message"); RILogManager.Get("File1Only").SendMessage("Only TextFile1 and BinaryFile1 will get this message"); RILogManager.Get("File2Only").SendMessage("Only TextFile2 and BinaryFile2 will get this message"); // by code - example 1a using (ReflectInsight ri = new ReflectInsight("Example1")) { ri.SetDestinationBindingGroup("ViewerOnlyBinding"); ri.SendMessage("Only the Viewer will get this message"); } // by code - example 1b using (ReflectInsight ri = new ReflectInsight("Example1")) { ri.SetDestinationBindingGroup("File1OnlyBinding"); ri.SendMessage("Only TextFile1 and BinaryFile1 will get this message"); } // you can create instances on the fly and used them throughout the application as needed RILogManager.Add("AnotherViewerOnlyInstance", "Another Category", String.Empty, "ViewerOnlyBinding"); RILogManager.Add("AnotherFile1OnlyInstance", "Another Category", String.Empty, "File1OnlyBinding"); RILogManager.Get("AnotherViewerOnlyInstance").SendMessage("Only the Viewer will get this message"); RILogManager.Get("AnotherFile1OnlyInstance").SendMessage("Only TextFile1 and BinaryFile1 will get this message"); }
/// <summary> /// Sends the fatal. /// </summary> /// <param name="msg">The MSG.</param> /// <param name="args">The arguments.</param> public override void SendFatal(string msg, params object[] args) { var str = string.Format(msg, args); RILogManager.Get(WorkManagerConfig.ApplicationName).SendFatal(str); MiscHelper.WriteToEventLog(WorkManagerConfig.ApplicationName, str, EventLogEntryType.Error); }
//--------------------------------------------------------------------- public String Process(String name, DateTime DOB, String SIN) { // assume we got these customer values from the identity object. Random rnd = new Random(); RIExtendedMessageProperty.AttachToRequest("Company Information", "ClientID", String.Format("{0:D4}", rnd.Next(10000))); RIExtendedMessageProperty.AttachToRequest("Company Information", "CompanyID", String.Format("{0:D5}", rnd.Next(100000))); ReflectInsight ri = RILogManager.Get("WebApi"); using (ri.TraceMethod(MethodBase.GetCurrentMethod(), true)) { try { ri.SendMsg("I'm somewhere inside the WebApi.Process method"); ri.SendNote("name: {0}", name); ri.SendNote("DOB: {0}", DOB); Business bus = new Business(); bus.ProcessRecord(name, DOB); ri.SendInformation("Just got back from calling the Business Layer"); return(Guid.NewGuid().ToString()); } catch (Exception ex) { ri.SendException(ex); throw; } } }
static public void Run() { var ri = RILogManager.Get("Test"); ri.EnterMethod("MyEnter"); ri.SendMessage("Test1"); ri.SendMessage("Test2"); ri.ExitMethod("MyEnter"); }
/// <summary> /// Publishes the specified exception. /// </summary> /// <param name="exception">The exception.</param> /// <param name="additionalParameters">The additional parameters.</param> public void Publish(Exception exception, NameValueCollection additionalParameters) { if (additionalParameters != null) { foreach (var key in additionalParameters.AllKeys) { RIExtendedMessageProperty.AttachToSingleMessage("Additional Info", key, additionalParameters[key]); } } var details = ExceptionFormatter.ConstructIndentedMessage(exception, additionalParameters /*, _exceptionExtender.Extender*/); RILogManager.Get(_category).Send(MessageType.SendException, exception.Message, details); }
static void MiscellaneousSample() { ReflectInsight ri = RILogManager.Get("Miscellaneous"); using (ri.TraceMethod("Starting Miscellaneous thread block")) { ri.SendThreadInformation(); Thread.Sleep(500); ri.SendImage("Hello, World", String.Format(@"{0}Samples\earth.jpg", AppDomain.CurrentDomain.BaseDirectory)); ri.SendStream("Some Stream", String.Format(@"{0}Samples\Earth.jpg", AppDomain.CurrentDomain.BaseDirectory)); ri.SendCustomData("Sample Custom Data", GetCustomData1()); ri.SendColor("Some Color", Color.Aquamarine); } }
/// <summary> /// Called when [configuration change]. /// </summary> private void OnConfigChange() { try { lock (this) { ActiveStates states = new ActiveStates(); states.RI = RILogManager.Get(InstanceName) ?? RILogManager.Default; states.DisplayLevel = String.Compare(DisplayLevel.ToLower().Trim(), "true", false) == 0; states.DisplayLocation = String.Compare(DisplayLocation.ToLower().Trim(), "true", false) == 0; CurrentActiveStates = states; } } catch (Exception ex) { RIExceptionManager.Publish(ex, "Failed during: LogAppender.OnConfigChange()"); } }
//--------------------------------------------------------------------- private void OnConfigChange() { try { lock (this) { if (!FOwnsRI) { String instanceName = ReflectInsightConfig.Settings.GetExtensionAttribute("logLinqToSql", "instance", "logLinqToSql"); FReflectInsight = RILogManager.Get(instanceName) ?? RILogManager.Default; FRequestObjectManager.RequestDetachLifeSpan = GetRequestObjectLifeSpan(); } } } catch (Exception ex) { RIExceptionManager.Publish(ex, "Failed during: LogLinqToSql.OnConfigChange()"); } }
/// <summary> /// Initializes a new instance of the <see cref="ReflectInsightOutput" /> class. /// </summary> /// <param name="configuration">The configuration.</param> /// <param name="healthReporter">The health reporter.</param> public ReflectInsightOutput(IConfiguration configuration, IHealthReporter healthReporter) { Requires.NotNull(configuration, nameof(configuration)); Requires.NotNull(healthReporter, nameof(healthReporter)); _healthReporter = healthReporter; var riConfig = new ReflectInsightOutputConfiguration(); try { configuration.Bind(riConfig); _reflectInsight = RILogManager.Get(riConfig.InstanceName ?? TraceTag); } catch { healthReporter.ReportProblem($"Invalid {nameof(TraceTag)} configuration encountered: '{configuration.ToString()}'", EventFlowContextIdentifiers.Configuration); throw; } }
//--------------------------------------------------------------------- public void UpateRecord(String name, Int32 age) { ReflectInsight ri = RILogManager.Get("DataAccess"); using (ri.TraceMethod(MethodBase.GetCurrentMethod(), true)) { try { ri.SendMsg("I'm somewhere inside the DataAccess.UpateRecord method"); ri.SendNote("name: {0}", name); ri.SendNote("age: {0}", age); if (age <= 0) { throw new Exception("Invalid age. Age must be greater than 0 (zero)"); } using (DataSet ds = new DataSet()) { ds.ReadXml(String.Format(@"{0}{1}", AppDomain.CurrentDomain.BaseDirectory, "dataset.xml"), XmlReadMode.Auto); ri.SendDataSet("DataSet with 4 tables", ds); ri.SendDataTable("Showing only one table (the last one)", ds.Tables[ds.Tables.Count - 1]); } using (var db = new NorthwindContext()) { var orders = (from order in db.Orders select order).ToList(); var details = (from order_details in db.Order_Details select order_details).ToList(); ri.SendEnumerable("EF Dataset", new IEnumerable[] { orders, details }); } } catch (Exception ex) { ri.SendException(ex); throw; } } }
static void RunHeadlessConfiguration() { while (true) { Console.WriteLine("Press any key to run test or press 'q' to quit..."); ConsoleKeyInfo k = Console.ReadKey(); if (k.KeyChar == 'q') { break; } // Load the configuration file in the root of the application ReflectInsightConfig.SetDeveloperConfigurationMode(String.Format(@"{0}ReflectInsight.config", AppDomain.CurrentDomain.BaseDirectory)); RILogManager.Get("Common").SendMsg("Testing developer configuration mode..."); RILogManager.Get("Common").SendMsg("Configuration full path: {0}", ReflectInsightConfig.LastConfigFullPath); // Load in the configuration file located in the sub-folder "Other Config". Before loading in the configuration, you want to clear the developer configuration mode ReflectInsightConfig.SetDeveloperConfigurationMode(String.Format(@"{0}\Other Config\ReflectInsight2.config", AppDomain.CurrentDomain.BaseDirectory)); RILogManager.Get("Common").SendMsg("Testing developer configuration mode..."); RILogManager.Get("Common").SendMsg("Configuration full path: {0}", ReflectInsightConfig.LastConfigFullPath); } }
//--------------------------------------------------------------------- public void ProcessRecord(String name, DateTime DOB) { ReflectInsight ri = RILogManager.Get("Business"); using (ri.TraceMethod(MethodBase.GetCurrentMethod(), true)) { try { ri.SendMsg("I'm somewhere inside the Business.ProcessRecord method"); ri.SendNote("name: {0}", name); ri.SendNote("DOB: {0}", DOB); DataAccess bus = new DataAccess(); bus.UpateRecord(name, DateTime.Now.Year - DOB.Year); ri.SendInformation("Just got back from calling the DataAccess Layer"); } catch (Exception ex) { ri.SendException(ex); throw; } } }
/// <summary> /// Gets the logger. /// </summary> /// <returns></returns> public IReflectInsight GetLogger() { return(RILogManager.Get(_name)); }
/// <summary> /// Sends the debug. /// </summary> /// <param name="msg">The MSG.</param> /// <param name="args">The arguments.</param> public override void SendDebug(string msg, params object[] args) { RILogManager.Get(WorkManagerConfig.ApplicationName).SendDebug(msg, args); }
/// <summary> /// Sends the message. /// </summary> /// <param name="msg">The MSG.</param> /// <param name="ex">The ex.</param> /// <param name="args">The arguments.</param> public void SendMessage(string msg, Exception ex, params object[] args) { RILogManager.Get(WorkManagerConfig.ApplicationName).Send(MessageType.SendMessage, msg, ExceptionFormatter.ConstructIndentedMessage(ex), args); }
/// <summary> /// Sends the message. /// </summary> /// <param name="msg">The MSG.</param> /// <param name="args">The arguments.</param> public void SendMessage(string msg, params object[] args) { RILogManager.Get(WorkManagerConfig.ApplicationName).SendMessage(msg, args); }
/// <summary> /// Sends the fatal. /// </summary> /// <param name="msg">The MSG.</param> /// <param name="ex">The ex.</param> /// <param name="args">The arguments.</param> public override void SendFatal(string msg, Exception ex, params object[] args) { RILogManager.Get(WorkManagerConfig.ApplicationName).Send(MessageType.SendFatal, msg, ExceptionFormatter.ConstructIndentedMessage(ex), args); MiscHelper.WriteToEventLog(WorkManagerConfig.ApplicationName, ConstructExceptionMessage(msg, ex, args), EventLogEntryType.Error); }
static void ThreadDemoBackorder(Object state) { // Attach Request Extended data Random rnd1 = new Random((Int32)DateTime.Now.Ticks + (Int32)state); String source = Sources[rnd1.Next(Sources.Length)]; RIExtendedMessageProperty.AttachToRequest("Company Information", "ClientID", String.Format("{0:D4}", rnd1.Next(10000))); RIExtendedMessageProperty.AttachToRequest("Company Information", "CompanyID", String.Format("{0:D5}", rnd1.Next(100000))); RIExtendedMessageProperty.AttachToRequest("Company Information", "Source", source); ReflectInsight ri = RILogManager.Get("Backorder"); using (ri.TraceMethod("Starting Backorder thread block")) { try { ri.SendThreadInformation(); Thread.Sleep(500); Int32 poNumber = rnd1.Next(100000); using (ri.TraceMethod("Initiating purchase order: {0}", String.Format("{0:D5}", poNumber))) { ri.SendDataSet("Customer order information loaded", DataSet1); Thread.Sleep(500); using (ri.TraceMethod("Validate Customer")) { ri.SendCheckmark("Customer certificate validation successfully", Checkmark.Green); ri.SendCheckmark("Customer threshold is within fair standings", Checkmark.Yellow); Thread.Sleep(500); using (ri.TraceMethod("Validate Customer Backorders")) { ri.SendInformation("Backorders detected: {0}", rnd1.Next(20)); ri.SendMsg("Processing {0} records", rnd1.Next(21, 200)); } using (ri.TraceMethod("Preparing source configuration data for state: '{0}'", source)) { ri.SendMsg("Reading source configuration data"); if (source == "Georgia") { ri.SendError("Unable to retrieve source data for state: '{0}'. Source data is either missing or isn't properly configured.", source); Thread.Sleep(1000); ri.SendXMLFile("See failed configuration", String.Format(@"{0}Samples\state_config.xml", AppDomain.CurrentDomain.BaseDirectory)); // show dummy configuration file using (ri.TraceMethod("Requeuing order: {0}", poNumber)) { ri.SendMsg("Recoil start indicators"); ri.SendTimestamp("Requeued Timestamp"); } return; } Thread.Sleep(500); ri.SendCheckmark("Source configuration data was successfully loaded", Checkmark.Green); } } using (ri.TraceMethod("Processing order: {0}", poNumber)) { try { if (source == "Minnesota") { ri.SendError("item 3 'Quantity' value exceeds customer's threshold limit of 20, for PartNumber: '872-AX'"); ri.SendWarning("Order: {0} was not processed due to exceeding threshold limit: 'Quantity'", poNumber); Thread.Sleep(1000); ri.SendXMLFile(String.Format("See failed order: {0}", poNumber), String.Format(@"{0}Samples\purchase_order.xml", AppDomain.CurrentDomain.BaseDirectory)); Thread.Sleep(100); using (ri.TraceMethod("Prepare CRM failed compensation report workflow")) { ri.SendMsg("Establish CRM connection"); Thread.Sleep(100); ri.SendCheckmark("CRM connection successfully establised", Checkmark.Green); Thread.Sleep(100); using (ri.TraceMethod("Insert CRM failed compensation report")) { ri.SendMsg("Insert compensation"); ri.SendMsg("Insert item status"); ri.SendMsg("CRM record id: {0}", rnd1.Next(10000, 100000)); ri.SendTimestamp("CRM Timestamp"); } } return; } ri.SendCheckmark(String.Format("Successfully processed {0} order items", rnd1.Next(1, 50)), Checkmark.Green); ri.SendMsg("Preparing reciept"); ri.SendMsg("Preparing client processed notification"); ri.SendMsg("Preparing dispatch record"); Thread.Sleep(500); using (ri.TraceMethod("Prepare CRM reciept workflow")) { ri.SendMsg("Establish CRM connection"); Thread.Sleep(100); if (source == "Michigan") { SecurityException e1 = new SecurityException("Account is disabled. Please contact IT Support."); ri.SendException(new Exception("Unable to connect to client's CRM system. Please see inner exception for more details", e1)); return; } Thread.Sleep(500); ri.SendCheckmark("CRM connection successfully establised", Checkmark.Green); using (ri.TraceMethod("Insert CRM order process completion")) { ri.SendMsg("Insert reciept"); ri.SendMsg("Insert dispatch record"); ri.SendMsg("CRM record id: {0}", rnd1.Next(10000, 100000)); ri.SendTimestamp("CRM Timestamp"); } } ri.SendCheckmark(String.Format("Order: {0} was successfully processed", poNumber), Checkmark.Green); } catch (Exception) { using (ri.TraceMethod("Reverting order: {0} due to fatal error.", poNumber)) { ri.SendCheckmark("Order successfuly reverted", Checkmark.Green); using (ri.TraceMethod("Requeuing order: {0}", poNumber)) { ri.SendMsg("Recoil start indicators"); ri.SendTimestamp("Requeued Timestamp"); } } throw; } } } } catch (Exception ex) { ri.SendException(ex); } } }