Feature,
Configure NLog from a JSON format.
todo
How to handle the multiple XML elements to a dict/list?
e.g.
<parameter name="@msg" layout="${message}" />
<parameter name="@level" layout="${level}" />
to
"parameters": {
"@msg": "${message}",
"@level": "${level}",
},
"XSD"
How to generate the schema def? How does this work with objects?
Large Example
Something like this:
{
"internalLog": {
"level": "Trace",
"file": "d:\\work\\log.txt"
},
"autoReload": "true",
"variables": {
"gmailUsername": "${trim-whitespace:${file-contents:${basedir}/gmailusername.txt}}",
"gmailPassword": "${trim-whitespace:${file-contents:${basedir}/gmailpassword.txt}}"
},
"extensions": {
"NLog.Extended": {},
"Custom": {
"filePath": "..."
}
},
"targets": {
"file": {
"type": "File",
"fileName": "${basedir}/logs/${shortdate}.log",
"layout": "${longdate} ${aspnet-request:servervariable=URL} ${uppercase:${level}} ${message}"
},
"db": {
"type": "Database",
"commandText": "INSERT INTO [LogEntries](TimeStamp, Message, Level, Logger) VALUES(getutcdate(), @msg, @level, @logger)",
//todo how to rename? (was no list/dict here)
"parameters": {
"@msg": "${message}",
"@level": "${level}",
"@logger": "${logger}"
},
"dbProvider": "System.Data.SqlClient",
"connectionString": "server=.\\SQLEXPRESS;database=MyLogs;integrated security=sspi",
"install-commands": [
{
"text": "CREATE DATABASE MyLogs",
"connectionString": "server=.\\SQLEXPRESS;database=master;integrated security=sspi",
"ignoreFailures": "true"
},
{
"text": "CREATE TABLE LogEntries( id int primary key not null identity(1,1), TimeStamp datetime2, Message nvarchar(max), level nvarchar(10), logger nvarchar(128))"
}
],
"uninstall-commands": [
{
"text": "DROP DATABASE MyLogs",
"connectionString": "server=.\\SQLEXPRESS;database=master;integrated security=sspi",
"ignoreFailures": "true"
}
]
},
"eventLog": {
"type": "EventLog",
"source": "NLog Demo",
"layout": "${message}${newline}Call site: ${callsite:className=true:methodName=true}${newline}Logger: ${logger}"
},
"pc1": {
"type": "PerfCounter",
"categoryName": "My Log",
"counterName": "My Counter"
},
"mail": {
"type": "Mail",
"smtpServer": "smtp.gmail.com",
"smtpPort": "587",
"enableSsl": "true",
"smtpAuthentication": "Basic",
"smtpUserName": "${gmailUsername}",
"smtpPassword": "${gmailPassword}",
"from": "${gmailUsername}",
"to": "${gmailUsername}",
"subject": "NLogDemo logs",
"addNewLines": "true"
},
"asyncMail": {
"type": "AsyncWrapper",
"wraps": [ "mail" ]
},
//no anounous wrappers
"postFilteringWrapper": {
"type": "PostFilteringWrapper",
"wraps": [ "splitGroup" ],
"defaultFilter": "level >= LogLevel.Info",
//todo
"when": {
"exists": "level >= LogLevel.Error",
"filter": "level >= LogLevel.Trace"
}
},
"splitGroup": {
"type": "SplitGroup",
"wraps": [
"file",
"db",
"eventLog",
"pc1",
"asyncMail"
]
},
"allOutputs": {
"type": "AspNetBufferingWrapper",
"wraps": [ "PostFilteringWrapper" ]
}
},
"rules": [
{
"filter": {
"loggerName": "*" //optional,
"minLevel": "Trace"
},
"writeTo": "allOutputs"
}
]
}
changes:
- more flat, all targets must have names
- internallog to object
95% conversion from https://github.com/NLog/NLog/wiki/NLog-config-Example
More generic feature: #951
Feature,
Configure NLog from a JSON format.
todo
How to handle the multiple XML elements to a dict/list?
e.g.
to
"XSD"
How to generate the schema def? How does this work with objects?
Large Example
Something like this:
{ "internalLog": { "level": "Trace", "file": "d:\\work\\log.txt" }, "autoReload": "true", "variables": { "gmailUsername": "${trim-whitespace:${file-contents:${basedir}/gmailusername.txt}}", "gmailPassword": "${trim-whitespace:${file-contents:${basedir}/gmailpassword.txt}}" }, "extensions": { "NLog.Extended": {}, "Custom": { "filePath": "..." } }, "targets": { "file": { "type": "File", "fileName": "${basedir}/logs/${shortdate}.log", "layout": "${longdate} ${aspnet-request:servervariable=URL} ${uppercase:${level}} ${message}" }, "db": { "type": "Database", "commandText": "INSERT INTO [LogEntries](TimeStamp, Message, Level, Logger) VALUES(getutcdate(), @msg, @level, @logger)", //todo how to rename? (was no list/dict here) "parameters": { "@msg": "${message}", "@level": "${level}", "@logger": "${logger}" }, "dbProvider": "System.Data.SqlClient", "connectionString": "server=.\\SQLEXPRESS;database=MyLogs;integrated security=sspi", "install-commands": [ { "text": "CREATE DATABASE MyLogs", "connectionString": "server=.\\SQLEXPRESS;database=master;integrated security=sspi", "ignoreFailures": "true" }, { "text": "CREATE TABLE LogEntries( id int primary key not null identity(1,1), TimeStamp datetime2, Message nvarchar(max), level nvarchar(10), logger nvarchar(128))" } ], "uninstall-commands": [ { "text": "DROP DATABASE MyLogs", "connectionString": "server=.\\SQLEXPRESS;database=master;integrated security=sspi", "ignoreFailures": "true" } ] }, "eventLog": { "type": "EventLog", "source": "NLog Demo", "layout": "${message}${newline}Call site: ${callsite:className=true:methodName=true}${newline}Logger: ${logger}" }, "pc1": { "type": "PerfCounter", "categoryName": "My Log", "counterName": "My Counter" }, "mail": { "type": "Mail", "smtpServer": "smtp.gmail.com", "smtpPort": "587", "enableSsl": "true", "smtpAuthentication": "Basic", "smtpUserName": "${gmailUsername}", "smtpPassword": "${gmailPassword}", "from": "${gmailUsername}", "to": "${gmailUsername}", "subject": "NLogDemo logs", "addNewLines": "true" }, "asyncMail": { "type": "AsyncWrapper", "wraps": [ "mail" ] }, //no anounous wrappers "postFilteringWrapper": { "type": "PostFilteringWrapper", "wraps": [ "splitGroup" ], "defaultFilter": "level >= LogLevel.Info", //todo "when": { "exists": "level >= LogLevel.Error", "filter": "level >= LogLevel.Trace" } }, "splitGroup": { "type": "SplitGroup", "wraps": [ "file", "db", "eventLog", "pc1", "asyncMail" ] }, "allOutputs": { "type": "AspNetBufferingWrapper", "wraps": [ "PostFilteringWrapper" ] } }, "rules": [ { "filter": { "loggerName": "*" //optional, "minLevel": "Trace" }, "writeTo": "allOutputs" } ] }changes:
95% conversion from https://github.com/NLog/NLog/wiki/NLog-config-Example
More generic feature: #951