Update NLog target filename at runtime

前端 未结 7 1668
被撕碎了的回忆
被撕碎了的回忆 2020-12-05 18:14

In my application, I work on several thousand of document a day. I\'d like, in some cases some logs, one log by document. Then I\'d like for a specific target change the out

相关标签:
7条回答
  • 2020-12-05 19:05

    I happen to have written an answer that fits your question as well.

    In essence, instead of trying to rewrite the configuration, you'd be better off simply creating a configuration that allows you to dynamically choose the filename you want.


    An adapted example for your use case:

    Logger myLog = LogManager.GetLogger(name);
    LogLevel level = LogLevel.Error;
    string message = "This is an error message!";
    

    You turn this information into a LogEventInfo object:

    LogEventInfo logEvent = new LogEventInfo(level , myLog.Name, message);
    

    You can then add properties to this event (the string indexes are free to choose):

    logEvent.Properties["CustomFileName"] = "mycustomfilename";
    

    And then you write to the log:

    myLog.Log(logEvent);
    

    The interesting thing here is that in your NLog configuration, you can use this custom property in any field that the Nlog documentation refers to as a "Layout" value.

    You use ${event-properties:item=CustomFileName} in the layout to access the property. For example:

    <target xsi:type="File" 
            name="file" 
            fileName="${basedir}/logs/${event-properties:item=CustomFileName}.log"
            layout="${message}" />
    

    Following the posted example, this message will be logged in the mycustomfilename.log file. This enables you to dynamically switch your targeted file as you please by setting the logEvent.Properties["CustomFileName"] value to whatever filename you want to use.

    Note that you can further optimize this, and e.g. only be able to choose part of the file name.

    The additional benefit is that you only need one target and one rule in your config file to make this work.

    0 讨论(0)
提交回复
热议问题