Cause: - Live diagnostics required logging from multiple applications without blocking TBF. - Shared nlog.config files caused configuration conflicts. - The original viewer lacked configurable colors and practical log controls. - Inconsistent diagnostic deployment caused log transfer failures and locked shared DLLs during builds. Solution: 1. Added universal diagnostic transport - Added AppDiagnostic.Logging with an NLog target and named-pipe communication. - Added background buffering and automatic reconnection. - Registered the diagnostic connector programmatically. 2. Separated diagnostic window lifecycle - Run AppDiagnostic as an independent process. - Activate the existing window on repeated launches. - Keep TBF running when the diagnostic window closes. 3. Corrected diagnostic deployment - Copy the complete diagnostic output into a dedicated AppDiagnostic subdirectory during build. - Overwrite existing deployment files to prevent inconsistent versions. - Validate and launch the executable from that subdirectory with an explicit working directory. 4. Improved the log viewer - Added configurable substring colors with a palette and live preview. - Added text, level and application filters. - Added line wrapping, clipboard actions and log export. - Added Pause/Resume, Refresh, Clear, auto-scroll and Always on top. - Added connection and log counters. - Persist color rules between sessions. 5. Removed legacy dependencies - Replaced LiveLogCache with structured diagnostic storage. - Removed AppDiagnostic dependencies on log4net and SharedComponents. Validation: - Confirmed successful log transfer when launching AppDiagnostic from TBF.
38 lines
1.2 KiB
XML
38 lines
1.2 KiB
XML
<?xml version="1.0" encoding="utf-8" ?>
|
|
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
|
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
internalLogLevel="Trace"
|
|
internalLogFile="${basedir}/nlog-internal.log"
|
|
throwConfigExceptions="true">
|
|
|
|
<extensions>
|
|
<add assembly="Xylem.Common.Utils.Logging" />
|
|
<add assembly="AppDiagnostic.Logging" />
|
|
</extensions>
|
|
|
|
<targets>
|
|
<target name="uiTrace"
|
|
xsi:type="UiTarget"
|
|
layout="${time}|${level:uppercase=true:padding=-5}|${message}" />
|
|
|
|
<target name="appDiagnostic"
|
|
xsi:type="AppDiagnostic"
|
|
pipeName="Sensus.AppDiagnostic.LogPipe"
|
|
queueLimit="10000"
|
|
reconnectDelayMilliseconds="500"
|
|
connectTimeoutMilliseconds="250"
|
|
layout="${message}" />
|
|
|
|
<target name="logfile"
|
|
xsi:type="File"
|
|
fileName="${basedir}/GenesisCordonelInterfaceLogger.log"
|
|
layout="${longdate}|${level:uppercase=true:padding=-5}|${logger}|${message}|${exception:format=tostring}" />
|
|
</targets>
|
|
|
|
<rules>
|
|
<logger name="*" minlevel="Trace" writeTo="appDiagnostic" />
|
|
<logger name="GenesisCordonelInterface*" minlevel="Trace" writeTo="uiTrace" />
|
|
<logger name="GenesisCordonelInterface*" minlevel="Trace" writeTo="logfile" />
|
|
</rules>
|
|
|
|
</nlog> |