From 4f52e64cad5b18c778c7d9878dbdcf59af6871af Mon Sep 17 00:00:00 2001
From: Heinrichs <Heinrichs@itc.rwth-aachen.de>
Date: Fri, 14 Jul 2023 13:45:33 +0200
Subject: [PATCH] Fix: Improve logging (coscine/issues#2568)

---
 src/KPI Generator/nlog.config | 79 ++++++++++++++++++++++++++++-------
 1 file changed, 65 insertions(+), 14 deletions(-)

diff --git a/src/KPI Generator/nlog.config b/src/KPI Generator/nlog.config
index 95fae67..0a33053 100644
--- a/src/KPI Generator/nlog.config	
+++ b/src/KPI Generator/nlog.config	
@@ -1,30 +1,81 @@
 <?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"
-      throwExceptions="true"
+      throwConfigExceptions="true"
+      throwExceptions="false"
 	  internalLogFile="Logs/internal-nlog.txt"
 	  internalLogLevel="Trace">
 
 	<targets>
 		<!-- Write logs to File -->
-		<target xsi:type="File" name="fileLog" fileName="C:/coscine/logs/${assembly-name}/${assembly-version}/log-${shortdate}.log" >
-			<layout xsi:type="JsonLayout" EscapeForwardSlash="true">
-				<attribute layout="${longdate}" name="Timestamp"/>
-				<attribute layout="${level:upperCase=true}" name="Level"/>
-				<attribute layout="${message}" name="Message"/>
-				<attribute layout="${exception:format=tostring,StackTrace}" name="Exception"/>
-				<attribute layout="${ndlc}" name="Context"/>
-				<attribute layout="${event-properties:item=Metric}" name="Alarm" encode="false"/>
-				<attribute name="EventProperties" encode="false" >
-					<layout xsi:type='JsonLayout' includeAllProperties="true"  maxRecursionLimit="2"/>
-				</attribute>
-			</layout>
+		<target xsi:type="FallbackGroup" 
+			name="fileGroup">
+			<target 
+				xsi:type="File" 
+				name="fileLogD" 
+				fileName="D:/coscine/logs/${assembly-name}/${assembly-version}/log-${shortdate}.log"
+				maxArchiveFiles="7"
+			>
+				<layout xsi:type="CompoundLayout">
+					<layout xsi:type="JsonLayout" EscapeForwardSlash="true">
+						<attribute layout="${longdate}" name="Timestamp"/>
+						<attribute layout="${level:upperCase=true}" name="Level"/>
+						<attribute layout="${message}" name="Message"/>
+						<attribute layout="${exception:format=tostring,StackTrace}" name="Exception"/>
+						<attribute layout="${ndlc}" name="Context"/>
+						<attribute layout="${event-properties:item=Metric}" name="Alarm" encode="false"/>
+						<attribute name="EventProperties" encode="false" >
+							<layout xsi:type='JsonLayout' includeAllProperties="true"  maxRecursionLimit="2"/>
+						</attribute>
+					</layout>
+					<layout xsi:type='SimpleLayout' text="," />
+				</layout>
+			</target>
+			<target 
+				xsi:type="File" 
+				name="fileLogC" 
+				fileName="C:/coscine/logs/${assembly-name}/${assembly-version}/log-${shortdate}.log"
+				maxArchiveFiles="7"
+			>
+				<layout xsi:type="CompoundLayout">
+					<layout xsi:type="JsonLayout" EscapeForwardSlash="true">
+						<attribute layout="${longdate}" name="Timestamp"/>
+						<attribute layout="${level:upperCase=true}" name="Level"/>
+						<attribute layout="${message}" name="Message"/>
+						<attribute layout="${exception:format=tostring,StackTrace}" name="Exception"/>
+						<attribute layout="${ndlc}" name="Context"/>
+						<attribute layout="${event-properties:item=Metric}" name="Alarm" encode="false"/>
+						<attribute name="EventProperties" encode="false" >
+							<layout xsi:type='JsonLayout' includeAllProperties="true"  maxRecursionLimit="2"/>
+						</attribute>
+					</layout>
+					<layout xsi:type='SimpleLayout' text="," />
+				</layout>
+			</target>
+		</target>
+
+		<!-- Write colored logs to Console -->
+		<target name="consoleLog" xsi:type="ColoredConsole" layout="[${uppercase:${level}}]: ${message}">
+			<highlight-row condition="level == LogLevel.Debug" foregroundColor="DarkGray" />
+			<highlight-row condition="level == LogLevel.Info" foregroundColor="White" />
+			<highlight-row condition="level == LogLevel.Warn" foregroundColor="Yellow" />
+			<highlight-row condition="level == LogLevel.Error" foregroundColor="DarkRed" />
+			<highlight-row condition="level == LogLevel.Fatal" foregroundColor="Red" backgroundColor="White" />
 		</target>
 	</targets>
 
 
 	<rules>
 		<!--All logs, including from Microsoft, Level Trace-->
-		<logger name="*" minlevel="Trace" writeTo="fileLog" />
+		<logger name="*" minlevel="Trace" writeTo="fileGroup">
+		</logger>
+
+		<!--All logs, including from Microsoft, Level Info-->
+		<logger name="*" minlevel="Info" writeTo="consoleLog">
+			<filters defaultAction="Log">
+				<when condition="contains('${ndlc}','/api/heartbeat')" action="Ignore"/>
+			</filters>
+		</logger>
+
 	</rules>
 </nlog>
\ No newline at end of file
-- 
GitLab