Nlog 按条件在文件中写入日志

问题描述 投票:0回答:1

在我的Nlog配置文件中,我有如下目标

<targets>
<target name ="loggerCreatePortal" xsi:type="File" 
        fileName="c:/CRM Trace Logs/Portal2.0/${shortdate}_createPortalRegForm.log"
        layout="${logger} | ${longdate} | ${level:uppercase=true} | ${message}"
        createDirs="true"/>

<target name ="loggerCreateRegData" xsi:type="File"
        fileName="c:/CRM Trace Logs/Portal2.0/${shortdate}_createPortalRegFormData.log"
        layout="${logger} | ${longdate} | ${level:uppercase=true} | ${message}"
        createDirs="true"/>

</targets>

<rules>

<logger name="loggerCreatePortal" minlevel="Debug" writeTo="createPortalRegForm"/>
<logger name="loggerCreateRegData" minlevel="Debug" writeTo="createPortalRegFormData"/>

</rules>

在我的Main类中,我想把CrmConnect类的日志写到指定的日志器上。

public class PortalController : ApiController
{
    private static readonly Logger loggerCreatePortal = LogManager.GetLogger("loggerCreatePortal");
    private static readonly Logger loggerCreateRegData = LogManager.GetLogger("loggerCreateRegData");

    [HttpPost]
    [Route("createPortalRegForm")]
    public Response createPortalRegForm([FromBody] ExpressPoll expressPoll)
    {
        loggerCreatePortal.Info("Test 1");
        IOrganizationService _orgService = CrmConnect.GetConnection();
        ...
    }

    [HttpPost]
    [Route("createPortalRegFormData")]
    public Response createPortalRegFormData([FromBody] FilledExpressPoll filledExpressPoll)
    {
        loggerCreateRegData.Info("Test 2");
        IOrganizationService _orgService = CrmConnect.GetConnection();
        ...
    }

我想把CrmConnect类的日志写到指定的记录器的日志文件中。如果一个应用程序调用路由CreatePortalRegForm,那么CrmConnect类中的日志只能写到目标loggerCreatePortal的文件中。

我的CrmConnect类

public static class CrmConnect
{
    private static readonly Logger loggerConn = LogManager.GetLogger("loggerConn");

    public static IOrganizationService GetConnection()
    {
       ....;
       if (conn.IsReady)
       loggerConn.Info("Conn successfull");
       ....
    }

我需要在配置文件中添加什么目标或规则?

c# asp.net logging nlog nlog.config
1个回答
0
投票

您将不得不添加一个 rule 为你的目标,指明你想从哪个类中捕获日志,以及哪个日志级别。

    <targets>
        <target name="logfile" xsi:type="File" fileName="file.txt" />
    </targets>

    <rules>
        <logger name="My.NameSpace.ClassName" minlevel="Info" writeTo="logconsole" />
    </rules>

在这个例子中,目标是 logfile 将只从 ClassNameMy.Namespace 命名空间


0
投票

你的规则指向了不存在的目标名称。

<rules>
   <logger name="loggerCreatePortal" minlevel="Debug" writeTo="createPortalRegForm"/>
   <logger name="loggerCreateRegData" minlevel="Debug" writeTo="createPortalRegFormData"/>
</rules>

这可能会有用

<targets>
   <target name="createPortalRegForm" xsi:type="File" 
        fileName="c:/CRM Trace Logs/Portal2.0/${shortdate}_createPortalRegForm.log"
        layout="${logger} | ${longdate} | ${level:uppercase=true} | ${message}"
        createDirs="true"/>
   <target name="createPortalRegFormData" xsi:type="File"
        fileName="c:/CRM Trace Logs/Portal2.0/${shortdate}_createPortalRegFormData.log"
        layout="${logger} | ${longdate} | ${level:uppercase=true} | ${message}"
        createDirs="true"/>
</targets>

<rules>
   <logger name="CrmConnect" minlevel="Debug" writeTo="createPortalRegForm"/>
   <logger name="loggerCreatePortal" minlevel="Debug" writeTo="createPortalRegForm"/> 
   <logger name="loggerCreateRegData" minlevel="Debug" writeTo="createPortalRegFormData"/>
</rules>
  • <logger name= 应该符合 LogManager.GetLogger(name)
  • <logger writeTo= 应与 <target name="

也可以参考。https:/github.comnlognlogwikiTutorial 以及如何 <logger name-过滤器工作了。https:/github.comnlognlogwikiConfiguration-file#logger-name-filter。

© www.soinside.com 2019 - 2024. All rights reserved.