c# - NLog:从 nlog.config 切换到编程配置

标签 c# asp.net-mvc logging asp.net-mvc-5 nlog

以前,我的 ASP .NET MVC5 应用程序使用 nlog.config 文件进行错误日志记录,效果很好。现在我想摆脱配置文件方法;我想以编程方式配置 Nlog 并删除对配置文件的需要。这些示例很好地向我展示了如何以编程方式设置它,但我对如何实际调用配置类并实际实现它感到困惑。这是我所拥有的:

protected void Application_Error(object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();
        NALSPrincipal userInfo = (NALSPrincipal)Context.User;

        // Step 1. Create configuration object 
        var config = new LoggingConfiguration();

        // Step 2. Create targets and add them to the configuration 
        var fileTarget = new FileTarget();
        config.AddTarget("file", fileTarget);

        // Step 3. Set target properties 
        fileTarget.FileName = "C:/nlogFile.txt";
        fileTarget.Layout = "Exception Type: ${exception:format=Type}${newline}
                             Target Site:  ${event-context:TargetSite}${newline}
                             Message: ${message}";

        // Step 4. Define rules
        var rule2 = new LoggingRule("*", LogLevel.Trace, fileTarget);
        config.LoggingRules.Add(rule2);

        // Step 5. Activate the configuration
        LogManager.Configuration = config;

        Logger logger = LogManager.GetCurrentClassLogger();
        LogEventInfo eventInfo = new LogEventInfo(LogLevel.Trace, "", logger.Name);
        eventInfo.Properties["TargetSite"] = ex.TargetSite;
        eventInfo.Exception = ex;
        logger.Log(eventInfo);      
    }

有谁知道这是行不通的吗?这是我基于此的文档: https://github.com/nlog/NLog/wiki/Configuration-API

如果有帮助,下面是我在使用 nlog.config 文件时得到的结果,它运行良好:

protected void Application_Error(object sender, EventArgs e)
    {
        Exception ex = Server.GetLastError();
        NALSPrincipal userInfo = (NALSPrincipal)Context.User;
        Logger logger = LogManager.GetCurrentClassLogger();
        LogEventInfo eventInfo = new LogEventInfo(LogLevel.Trace, "", logger.Name);
        eventInfo.Properties["CUID"] = userInfo.userDetails.ContactID;
        eventInfo.Properties["Username"] = Context.User.Identity.Name;
        eventInfo.Properties["TargetSite"] = ex.TargetSite;
        eventInfo.Exception = ex;
        logger.Log(eventInfo);     
    }

非常感谢任何帮助!谢谢!

最佳答案

您是否以足够的权限运行您的应用程序以在您的 C 驱动器的根目录中写入日志文件?用 ${basedir}/nLogFile.txt 试试,看看是否可行。

关于c# - NLog:从 nlog.config 切换到编程配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24070349/

相关文章:

apache - Tomcat servlet 日志记录

c# - "No parameterless constructor defined for this object."用于 Controller 中使用 StructureMap 的 IBus

c# - 使用 StringBuilder 类的 append 方法与连接 "+"运算符的区别

asp.net-mvc - 我应该在数据库中的 URL 中存储空格吗?如果是这样,将它们放入 <a href ="..."> 时如何对它们进行编码?

c# - ASP.NET MVC 4 连接两个表

c# - 用于创建新对象的 ASP.net MVC DropDownList 值

c# - 递归函数调用抛出 StackOverFlowException

c# - LINQ where 子句中的可变条件

c# - 我如何将内置成员方法与我自己的数据库 ASP.NET mvc 4 结合使用

logging - 使用 rsync 检索日志文件