log4net 不处理进程退出
log4net is not working on process exit
如何在应用程序退出事件时使用 log4net 记录消息?
在示例中,我仅使用控制台附加程序进行日志记录:
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%newline"/>
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
在应用程序中,我想在 ProcessExit
事件上写最后一条消息。
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace ConsoleApplication3
{
class Program
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger("test");
static void Main(string[] args)
{
log.Info("Application started");
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnApplicationExit);
log.Info("Application is going to exit");
}
static void OnApplicationExit(object sender, EventArgs e)
{
Console.WriteLine("OnApplicationExit called");
log.Info("Application exit");
Console.WriteLine("OnApplicationExit exit");
}
}
}
这是我的输出:
Application started
Application is going to exit
OnApplicationExit called
OnApplicationExit exit
似乎在 OnApplicationExit
调用之前关闭了 appender。
是否有可能以某种方式在应用程序退出时记录任何消息?
你需要打电话给
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnApplicationExit);
在实例化 log4net 记录器之前
class Program
{
private static log4net.ILog log = null;
static void Main(string[] args)
{
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnApplicationExit);
log= log4net.LogManager.GetLogger("test");
log.Info("Application started");
log.Info("Application is going to exit");
}
static void OnApplicationExit(object sender, EventArgs e)
{
Console.WriteLine("OnApplicationExit called");
log.Info("Application exit");
Console.WriteLine("OnApplicationExit exit");
}
}
结果:
如何在应用程序退出事件时使用 log4net 记录消息?
在示例中,我仅使用控制台附加程序进行日志记录:
<log4net>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%newline"/>
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="ConsoleAppender" />
</root>
</log4net>
在应用程序中,我想在 ProcessExit
事件上写最后一条消息。
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
namespace ConsoleApplication3
{
class Program
{
private static readonly log4net.ILog log = log4net.LogManager.GetLogger("test");
static void Main(string[] args)
{
log.Info("Application started");
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnApplicationExit);
log.Info("Application is going to exit");
}
static void OnApplicationExit(object sender, EventArgs e)
{
Console.WriteLine("OnApplicationExit called");
log.Info("Application exit");
Console.WriteLine("OnApplicationExit exit");
}
}
}
这是我的输出:
Application started
Application is going to exit
OnApplicationExit called
OnApplicationExit exit
似乎在 OnApplicationExit
调用之前关闭了 appender。
是否有可能以某种方式在应用程序退出时记录任何消息?
你需要打电话给
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnApplicationExit);
在实例化 log4net 记录器之前
class Program
{
private static log4net.ILog log = null;
static void Main(string[] args)
{
AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnApplicationExit);
log= log4net.LogManager.GetLogger("test");
log.Info("Application started");
log.Info("Application is going to exit");
}
static void OnApplicationExit(object sender, EventArgs e)
{
Console.WriteLine("OnApplicationExit called");
log.Info("Application exit");
Console.WriteLine("OnApplicationExit exit");
}
}
结果: