2

在我使用 log4net 登录的大多数 ASP .Net MVC Web 应用程序中,我有一个静态记录器,可以从应用程序中的任何位置访问。

我通常如何在 MVC 应用程序中的 global.asax 中执行此操作:

namespace MyApplication
{
    public class MvcApplication : System.Web.HttpApplication
    {
        public static ILog logger = LogManager.GetLogger("Logger");
        protected void Application_Start()
        {
            log4net.Config.XmlConfigurator.Configure();
        }
        ...
    }

我现在有一个 .Net Web 服务,它似乎没有与 MVC 应用程序相同的入口点(通过 global.asax),我不知道在哪里实例化我的记录器。任何人都可以帮忙吗?

4

4 回答 4

3

您可以使用 global.asax

protected void Application_Start(Object sender, EventArgs e) {
   log4net.Config.XmlConfigurator.Configure()
}
于 2013-09-16T07:40:40.367 回答
0

您可以拥有自己的日志记录网关

http://netpl.blogspot.com/2010/09/easy-log4net-integration-into-net.html

这种方法的一个优点是内部日志记录取决于您自己的 api,因此您可以轻松地在日志记录框架之间切换,而无需修改相关代码。

另一件事是 web 服务也以 global.asax 开头,你可能错过了一些东西。

于 2013-09-16T07:40:07.497 回答
0

您可以使用服务公共构造函数来实例化您的记录器。但请注意,根据服务行为(PerCall 或 Single),构造函数将针对每个请求或仅在第一次实例化服务时调用。

于 2013-09-16T08:36:37.353 回答
0

您可以手动添加 Global.asax 文件并使用它来启动 log4net

void Application_Start(object sender, EventArgs e)
{
    log4net.Config.XmlConfigurator.Configure();

但是,请注意Application_Error不能用于全局异常处理。需要 SOAP 扩展来拦截服务器上的传出消息并在该点记录错误。

一个 Web 应用程序可以由多个 Web 服务组成。但是,Global.asax 语法文件中的 Application_Error 事件不能用于全局异常处理。Web 服务的 HttpHandler 使用在 Web 服务执行时发生的任何异常,并在调用 Application_Error 事件之前将其转换为 SOAP 错误。构建 SOAP 扩展以在全局异常处理程序中处理 Web 服务异常。SOAP 扩展可以检查 ProcessMessage 方法中是否存在异常。在 ProcessMessage 方法中,检查当 Stage 属性设置为 AfterSerialize 时传递的 SoapMessage 的 Exception 属性。有关 SOAP 扩展的详细信息,请参阅使用 SOAP 扩展的 SOAP 消息修改。

https://msdn.microsoft.com/en-us/library/ds492xtk%28v=vs.100%29.aspx

于 2017-11-02T10:58:45.947 回答