log4net で奇妙な問題が発生しています。
ASP.NET アプリケーションでは、log4net を外部で構成したいので、別の log4net.config ファイルを用意して、Web アプリに属する AssemblyInfo.cs ファイルに次の行を追加して、Web アプリに接続します。
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
ここで、log4net ロガー クラスを通常の方法でインスタンス化すると、次のようになります。
public class MyClass
{
private static readonly ILog _logger = log4net.LogManager.GetLogger(typeof(MyClass));
....
その後、これは機能し、ロギングは通常どおり機能します。ただし、別のアセンブリ (インフラストラクチャ) の一部である LogManager クラスにログ コードをラップし、多数のプロジェクトで再利用しています。次のような GetLogger があります。
public static class LogManager
{
public static ILog GetLogger()
{
var stack = new StackTrace();
var frame = stack.GetFrame(1);
return new log4net.LogManager.GetLogger(frame.GetMethod().DeclaringType);
}
}
したがって、これを asp.net コードで使用できます。
public class MyClass
{
private static readonly ILog _logger = LogManager.GetLogger();
....
しかし...これはうまくいきません!ログが生成されない 構成ファイルが正しく接続されていないようです。log4net 構成を直接 web.config に入れると、この LogManager は正常に動作します。