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