Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Log only to a specific target at runtime

Tags:

c#

nlog

I am using NLog with two targets:

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <targets async="true">
    <target name="logfile" xsi:type="File" fileName="my.log"/>
    <target name="console" xsi:type="Console"/>
  </targets>

  <rules>
    <logger name="*" minlevel="Trace" writeTo="logfile"/>
    <logger name="*" minlevel="Info" writeTo="console"/>
  </rules>
</nlog>

Is it possible to log a message only to the "logfile" target, without having the message written to the "console" target as well?

EDIT

To clarify: I want to direct messages from the same class to different loggers at run time (w/o having to change the XML). Something like:

class Program
{
    static Logger _logger = LogManager.GetCurrentClassLogger();

    static void Main(string[] args)
    {
        // Note - _logger.InfoToTarget() does not really exist
        _logger.InfoToTarget("logfile", "This is my very detailed message, possibly with object dumps");
        _logger.InfoToTarget("console", "Short message");
    }
}

I'm aware that this couples my code with the NLlog.config file.

like image 755
bavaza Avatar asked Sep 05 '26 19:09

bavaza


1 Answers

One way to accomplish the functionality you are looking for is to name your logger

_logger = LogManager.GetLogger("MyConsoleLogger")
_logger.Info("This will log to the console...");
_logger = LogManager.GetLogger("MyFileLogger")
_logger.Trace("This will log to a file...");

rather than using

LogManager.GetCurrentClassLogger().              

In your config file you could then list in the rules

<rules>
<logger name="MyFileLogger" minlevel="Trace" writeTo="logfile"/>
<logger name="MyConsoleLogger" minlevel="Info" writeTo="console"/>
</rules>

This is by far not the most pretty solution to look at, but it does give you the functionality that you are looking for.

like image 148
MegaMark Avatar answered Sep 07 '26 08:09

MegaMark



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!