一般的なアセンブリでLayoutRenderer
次のように定義されたカスタムがあります。NLog
[LayoutRenderer("appsettings")]
public class AppSettingsLayoutRenderer : LayoutRenderer {
[DefaultParameter]
public string Variable {
get;
set;
}
protected override void Append(StringBuilder builder, LogEventInfo logEvent) {
if (Variable == null) {
return;
}
var context = HttpContext.Current;
if (context == null) {
return;
}
builder.Append(Convert.ToString(ConfigurationManager.AppSettings[Variable], CultureInfo.InvariantCulture));
}
}
この共通アセンブリは、ロギングを実装した 2 つのプロジェクトで参照されています。
最初のプロジェクトは、ASP.NET/ASP.NET MVC Web サイトであり、最上位の Web サイトとして構成されています。
2 番目のプロジェクトは、IIS で複数のサービスをホストし、別の Web サイト (IIS の既定の Web サイト) で仮想ディレクトリとして構成された WCF プロジェクトです。
どちらも に次のものが含まれていますWeb.config
。
<appSettings>
<add key="ErrorLogPath" value="D:\Logs" />
</appSettings>
どちらのプロジェクトも、共通のアセンブリ ( customer を含むLayoutRenderer
) を参照しています。bin
両方のプロジェクトのフォルダーに実際にアセンブリ DLL も含まれていることを確認しました。IISで構成されたパスを介してこれを確認しました。
最後に、両方のプロジェクトには、NLog.config
ファイルと一緒に次のファイルが含まれていWeb.config
ます。
<?xml version="1.0" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<extensions>
<add assembly="Collective.Core" />
</extensions>
<targets>
<target name="file" xsi:type="File" layout="${longdate}|${level:uppercase=true}|${logger}|${message}${onexception:inner=${newline}${exception:format=tostring}}" fileName="${appsettings:ErrorLogPath}\${logger}\${shortdate}.log" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file" />
</rules>
</nlog>
どちらのプロジェクトも同じアプリ プールで実行されます。
今、私の問題:
最初のプロジェクトでは、ログは正しい場所に表示されますD:\Logs\Logger.Name\yyyy-MM-dd.log
。
2 番目のログは に表示されC:\Logger.Name\yyyy-MM-dd.log
ます。
どうしたの?構成と有効化コードは同じですが、ログは一貫して 2 つの異なる場所に表示されます。一方は意図したもので、もう一方は意図しないものです。
私の人生では、何が起こっているのか理解できません。