Logging OCL in Turnkey
No edit summary
m ((username removed) (log details removed): Moving to Training namespace)
 
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
You can expand your TK app with OCL logging of your own making if you are using CodeDress.
Expand your TK app with your own OCL logging if you are using CodeDress. This will work and have the same features as the designer's built-in logging.


[[File:SysLoggingClass.png|none|thumb|376x376px]]
Create a transient and singleton class like this:
[[File:SysLoggingViewmodel.png|none|thumb]]
 
[[File:SysLoggingClass.png|none|thumb|290x290px]]Add code similar to the one at the bottom of this page to the class methods.
 
Create a ViewModel like the example below to use the class:[[File:SysLoggingViewmodel.png|none|thumb|517x517px]]
[[File:SysLoggingView.png|none|thumb|554x554px]]
[[File:SysLoggingView.png|none|thumb|554x554px]]


<code>namespace ASPNETIdentity {
I created a variable on the view with the name vLogText.
  using System;
 
  using System.Collections;
GetLog action does this:
  using System.Collections.Generic;
vLogText := self.GetLog
  using System.ComponentModel;
GetUsageStats action does this:
  using System.CodeDom.Compiler;
vLogText := self.GetUsageStats
  using Eco.ObjectImplementation;
The method SO() is a shortcut for:
  using Eco.ObjectRepresentation;
SysLogging.oclSingleton
   using Eco.Services;
Code for the class:
  using Eco.Subscription;
 
   using Eco.UmlCodeAttributes;
  public partial class SysLogging
  using Eco.UmlRt;
    {
   using System.Text;
      StringBuilder sb = new StringBuilder(100000);
  using Eco.Logging;</code>
      void Singleton_OnTraceLog(object sender, Eco.Logging.TraceEventArgs e)
      {
        if (sb.Length > 5000000)
          sb.Clear();
        sb.AppendLine(e.Message);
      }
 
      [UmlElement(Id = "ee54deb5-3024-47c2-be01-7c93faa6638a")]
      public void StartLogging()
      {
        this.StopLogging();
        EcoLogSwitches.LogOcl = this.LogOcl;
        EcoLogSwitches.LogEAL = this.LogEAL;
        EcoLogSwitches.LogPMapper = this.LogPMapper;
        EcoLogSwitches.LogSql = this.LogSql;
        EcoLogSwitches.LogSqlMeta = this.LogSqlMeta;
        EcoLogSwitches.LogActionExecute = this.LogActionExecute;
        EcoLogSwitches.LogActionEnable = this.LogActionEnable;
        EcoLogSwitches.LogMethods = this.LogMethods;
        EcoLogSwitches.CollectAssociationUsageStats = this.CollectAssociationUsageStats;
        EcoLogSwitches.LogWecpof = this.LogWecpof;
    
        EcoListener.Singleton.OnTraceLog += Singleton_OnTraceLog;
        EcoListener.StartListening();
      }
    
      [UmlElement(Id = "ace10ea6-8793-4205-a2eb-9f22b9391701")]
      public string GetLog()
      {
        string text = sb.ToString();
        sb.Clear();
        return text;
      }
    
      [UmlElement(Id = "3d2941f2-75ca-4a41-a5e8-465ddcfa2904")]
      public void StopLogging()
      {
        EcoListener.Singleton.OnTraceLog -= Singleton_OnTraceLog;
        Eco.Logging.EcoListener.StopListening();
      }
 
      [UmlElement(Id = "a4e7d189-a056-4be4-8e07-ea42d72505ac")]
      public string GetUsageStats()
      {
        StringBuilder stats = new StringBuilder();
        lock (EcoSupport.AssociationUsageStats)
        {
          if (EcoSupport.AssociationUsageStats.Count > 0)
          {
            foreach (KeyValuePair<string, int> x in EcoSupport.AssociationUsageStats)
            {
              stats.AppendLine(x.Key + " = " + x.Value.ToString());
            }
          }
          else
            stats.AppendLine("No stats in log");
        }
        return stats.ToString();
      }
    }
}
See also: [[Logging what MDriven does]]
 
Keywords: debugging OCL, logging, performance
[[Category:Advanced]]

Latest revision as of 21:28, 20 December 2023

Expand your TK app with your own OCL logging if you are using CodeDress. This will work and have the same features as the designer's built-in logging.

Create a transient and singleton class like this:

SysLoggingClass.png

Add code similar to the one at the bottom of this page to the class methods. Create a ViewModel like the example below to use the class:

SysLoggingViewmodel.png
SysLoggingView.png

I created a variable on the view with the name vLogText.

GetLog action does this:

vLogText := self.GetLog

GetUsageStats action does this:

vLogText := self.GetUsageStats

The method SO() is a shortcut for:

SysLogging.oclSingleton

Code for the class:

 public partial class SysLogging
   {
     StringBuilder sb = new StringBuilder(100000);
     void Singleton_OnTraceLog(object sender, Eco.Logging.TraceEventArgs e)
     {
       if (sb.Length > 5000000)
         sb.Clear();
       sb.AppendLine(e.Message);
     }
 
     [UmlElement(Id = "ee54deb5-3024-47c2-be01-7c93faa6638a")]
     public void StartLogging()
     {
       this.StopLogging();
       EcoLogSwitches.LogOcl = this.LogOcl;
       EcoLogSwitches.LogEAL = this.LogEAL;
       EcoLogSwitches.LogPMapper = this.LogPMapper;
       EcoLogSwitches.LogSql = this.LogSql;
       EcoLogSwitches.LogSqlMeta = this.LogSqlMeta;
       EcoLogSwitches.LogActionExecute = this.LogActionExecute;
       EcoLogSwitches.LogActionEnable = this.LogActionEnable;
       EcoLogSwitches.LogMethods = this.LogMethods;
       EcoLogSwitches.CollectAssociationUsageStats = this.CollectAssociationUsageStats;
       EcoLogSwitches.LogWecpof = this.LogWecpof;
 
       EcoListener.Singleton.OnTraceLog += Singleton_OnTraceLog;
       EcoListener.StartListening();
     }
 
     [UmlElement(Id = "ace10ea6-8793-4205-a2eb-9f22b9391701")]
     public string GetLog()
     {
       string text = sb.ToString();
       sb.Clear();
       return text;
     }
 
     [UmlElement(Id = "3d2941f2-75ca-4a41-a5e8-465ddcfa2904")]
     public void StopLogging()
     {
       EcoListener.Singleton.OnTraceLog -= Singleton_OnTraceLog;
       Eco.Logging.EcoListener.StopListening();
     }
 
     [UmlElement(Id = "a4e7d189-a056-4be4-8e07-ea42d72505ac")]
     public string GetUsageStats()
     {
       StringBuilder stats = new StringBuilder();
       lock (EcoSupport.AssociationUsageStats)
       {
         if (EcoSupport.AssociationUsageStats.Count > 0)
         {
           foreach (KeyValuePair<string, int> x in EcoSupport.AssociationUsageStats)
           {
             stats.AppendLine(x.Key + " = " + x.Value.ToString());
           }
         }
         else
           stats.AppendLine("No stats in log");
       }
       return stats.ToString();
     }
   }
}

See also: Logging what MDriven does

Keywords: debugging OCL, logging, performance

This page was edited 150 days ago on 12/20/2023. What links here