Ich habe einen Dienst, der eine DLL in eine separate Appdomain lädt (die Appdomain wird benötigt, weil die DLL eine dynamisch generierte Assembly lädt und in der Lage sein muss, sie zu entladen)
Wie kann ich die nlog-Konfiguration kopieren, so dass die neue App-Domain die gleichen Einstellungen verwendet?
Eine zusätzliche Komplikation besteht darin, dass ich die Protokollierungsparameter mit Hilfe des GlobalDiagnosticsContext zu Beginn des Programms einstelle. Gibt es eine andere Möglichkeit, als sie in jeder App-Domäne neu zu setzen?
static void Main()
{
// Setup NLog variables
GlobalDiagnosticsContext.Set("ConnectionString", @"...");
GlobalDiagnosticsContext.Set("ApplicationName", @"appName");
// ... loads appdomain and does logging from the new appdomain
Dies ist meine Konfigurationsdatei:
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<variable name="TextErrorLayout" value ="${gdc:item=ApplicationName} ${date:format=yyyy-MM-dd HH\:mm\:ss.fff}${newline}
Level: ${level}${newline}
Description: ${message}${newline}
Machine: ${machinename}${newline}
User: ${windows-identity}${newline}
Process: ${processname}${newline}
WorkingDir: ${basedir}${newline}
Exception: ${exception:format=tostring}${newline}
DetailedMessage: ${event-context:item=Details}${newline}"/>
<targets async="true">
<target name="LogMill" xsi:type="FallbackGroup">
<target xsi:type="Database"
connectionString="${gdc:item=ConnectionString}"
commandText="exec dbo.Usp_Log_CreateWithExtended @applicationName, @logLevel, @entryDate, @description, @machineName, @userName, @assembly, @workingDirectory, @exception, @detailedMessage">
<dbProvider>mssql</dbProvider>
<parameter name="@applicationName" layout="${gdc:item=ApplicationName}"/>
<parameter name="@logLevel" layout="${level}"/>
<parameter name="@entryDate" layout="${date:format=yyyy-MM-dd HH\:mm\:ss.fff}"/>
<parameter name="@description" layout="${message}"/>
<parameter name="@machineName" layout="${machinename}"/>
<parameter name="@userName" layout="${windows-identity}"/>
<parameter name="@assembly" layout="${processname}"/>
<parameter name="@workingDirectory" layout="${basedir}"/>
<parameter name="@exception" layout="${exception:format=tostring}"/>
<parameter name="@detailedMessage" layout="${event-context:item=Details}"/>
</target>
<target xsi:type="File" fileName="LogMill-FailSafe.log" layout="${TextErrorLayout}"/>
</target>
<target name="EmailDevelopers" xsi:type="Mail"
smtpServer="smtp.local"
from="errors@email.com"
to="email@email.com"
subject="${gdc:item=ApplicationName} ${level} Error: ${message}"
layout="${TextErrorLayout}"/>
<target name="Console" xsi:type="ColoredConsole" layout="${date:format=yyyy-MM-dd HH\:mm\:ss.fff} ${message} ${exception:format=tostring}"/>
</targets>
<rules>
<logger name="*" minlevel="Info" writeTo="LogMill" />
<logger name="*" minlevel="Error" writeTo="EmailDevelopers" />
</rules>
</nlog>