簡體   English   中英

NLog 將自定義 LayoutRenderer 傳遞給 db 目標參數

[英]NLog Pass custom LayoutRenderer to db target parameters

我可能誤解了布局渲染器的使用,但我想做的是將布局傳遞給 db 目標參數。 這可能嗎? 當我嘗試下面的代碼時,它只是將 Append 文本呈現為值。

internal class Program {
    private static NLog.Logger logger = NLog.LogManager.Setup().SetupExtensions(s => s.AutoLoadExtensions().RegisterLayoutRenderer<LogMessage>()).GetCurrentClassLogger();
        static void Main(string[] args) {
            LogMessage message = new LogMessage() { IncomingOrOutgoing = MessageDirection.Incoming, MessageType = MessageType.TestType, MessageKey = "TestKey", Message = "Test Incoming" };
            logger.Info<LogMessage>(message);
}

[LayoutRenderer("LogMessage")]
public class LogMessage : LayoutRenderer {
    public MessageDirection IncomingOrOutgoing { get; set; }
    public string Message { get; set; }

    [DefaultParameter]
    public string MessageKey { get; set; }
        
    protected override void Append(StringBuilder builder, LogEventInfo logEvent) { 
        builder.Append("Test");
     }
}

nlog.config

<?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"
      autoReload="true"
      internalLogLevel="Trace"
      internalLogFile="C:\Nlog\logs\internalLog.txt"
      throwConfigExceptions="true">

    <targets async="true">
        <target name="db"
            xsi:type="Database"
            connectionString="..."
            commandType="StoredProcedure"
            commandText="[dbo].[IncomingOutgoingMessageLog]"
            >
            <parameter name="@MessageKey"     layout="${LogMessage:MessageKey}" />
            <parameter name="@Message"        layout="${LogMessage:Message}" />
            <parameter name="@IncomingOutgoing" layout="${LogMessage:IncomingOrOutgoing}" />
            
        </target>
    </targets>

    <rules>
        <logger name="*" minlevel="Info" writeTo="db" />
    </rules>
</nlog>

當無法使用標准方式捕獲上下文時,您應該只創建自己的自定義 LayoutRenderer 或者想以新的自定義格式生成 output(不同於 JSON、XML、ZCC8D68C5301C4A9ADD7D 等)

也許試試這個:

<parameter name="@MessageKey"     layout="${event-properties:MessageKey}" />
<parameter name="@Message"        layout="${event-properties:Message}" />
<parameter name="@IncomingOutgoing" layout="${event-properties:IncomingOrOutgoing}" />
var message = new NLog.LogEventInfo();
message.Properties["IncomingOrOutgoing"] = MessageDirection.Incoming;
message.Properties["MessageType"] = MessageType.TestType;
message.Properties["MessageKey"] = "TestKey";
message.Properties["Message"] = "Test Incoming";
logger.Info(message);

另見: https://github.com/NLog/NLog/wiki/Context

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM