diff --git a/examples/NetCore2/ConsoleExample/ConsoleExample.csproj b/examples/NetCore2/ConsoleExample/ConsoleExample.csproj
index f8ea3f72..b86064c9 100644
--- a/examples/NetCore2/ConsoleExample/ConsoleExample.csproj
+++ b/examples/NetCore2/ConsoleExample/ConsoleExample.csproj
@@ -9,8 +9,9 @@
-
-
+
+
+
@@ -18,6 +19,9 @@
+
+ PreserveNewest
+
Always
diff --git a/examples/NetCore2/ConsoleExample/NLog.xsd b/examples/NetCore2/ConsoleExample/NLog.xsd
deleted file mode 100644
index 2f57d096..00000000
--- a/examples/NetCore2/ConsoleExample/NLog.xsd
+++ /dev/null
@@ -1,3106 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Watch config file for changes and reload automatically.
-
-
-
-
- Print internal NLog messages to the console. Default value is: false
-
-
-
-
- Print internal NLog messages to the console error output. Default value is: false
-
-
-
-
- Write internal NLog messages to the specified file.
-
-
-
-
- Log level threshold for internal log messages. Default value is: Info.
-
-
-
-
- Global log level threshold for application log messages. Messages below this level won't be logged..
-
-
-
-
- Throw an exception when there is an internal error. Default value is: false.
-
-
-
-
- Throw an exception when there is a configuration error. If not set, determined by throwExceptions.
-
-
-
-
- Gets or sets a value indicating whether Variables should be kept on configuration reload. Default value is: false.
-
-
-
-
- Write internal NLog messages to the System.Diagnostics.Trace. Default value is: false.
-
-
-
-
- Write timestamps for internal NLog messages. Default value is: true.
-
-
-
-
- Use InvariantCulture as default culture instead of CurrentCulture. Default value is: false.
-
-
-
-
- Perform mesage template parsing and formatting of LogEvent messages (true = Always, false = Never, empty = Auto Detect). Default value is: empty.
-
-
-
-
-
-
-
-
-
-
-
-
-
- Make all targets within this section asynchronous (creates additional threads but the calling thread isn't blocked by any target writes).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Prefix for targets/layout renderers/filters/conditions loaded from this assembly.
-
-
-
-
- Load NLog extensions from the specified file (*.dll)
-
-
-
-
- Load NLog extensions from the specified assembly. Assembly name should be fully qualified.
-
-
-
-
-
-
-
-
-
- Name of the logger. May include '*' character which acts like a wildcard. Allowed forms are: *, Name, *Name, Name* and *Name*
-
-
-
-
- Comma separated list of levels that this rule matches.
-
-
-
-
- Minimum level that this rule matches.
-
-
-
-
- Maximum level that this rule matches.
-
-
-
-
- Level that this rule matches.
-
-
-
-
- Comma separated list of target names.
-
-
-
-
- Ignore further rules if this one matches.
-
-
-
-
- Enable or disable logging rule. Disabled rules are ignored.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the file to be included. You could use * wildcard. The name is relative to the name of the current config file.
-
-
-
-
- Ignore any errors in the include file.
-
-
-
-
-
-
- Variable name.
-
-
-
-
- Variable value.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Number of log events that should be processed in a batch by the lazy writer thread.
-
-
-
-
- Limit of full s to write before yielding into Performance is better when writing many small batches, than writing a single large batch
-
-
-
-
- Action to be taken when the lazy writer thread request queue count exceeds the set limit.
-
-
-
-
- Limit on the number of requests in the lazy writer thread request queue.
-
-
-
-
- Time in milliseconds to sleep between batches.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Delay the flush until the LogEvent has been confirmed as written
-
-
-
-
- Condition expression. Log events who meet this condition will cause a flush on the wrapped target.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Number of log events to be buffered.
-
-
-
-
- Timeout (in milliseconds) after which the contents of buffer will be flushed if there's no write in the specified period of time. Use -1 to disable timed flushes.
-
-
-
-
- Indicates whether to use sliding timeout.
-
-
-
-
- Action to take if the buffer overflows.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Encoding to be used.
-
-
-
-
- Instance of that is used to format log messages.
-
-
-
-
- End of line value if a newline is appended at the end of log message .
-
-
-
-
- Maximum message size in bytes.
-
-
-
-
- Indicates whether to append newline at the end of log message.
-
-
-
-
- Action that should be taken if the will be more connections than .
-
-
-
-
- Action that should be taken if the message is larger than maxMessageSize.
-
-
-
-
- Maximum current connections. 0 = no maximum.
-
-
-
-
- Indicates whether to keep connection open whenever possible.
-
-
-
-
- Size of the connection cache (number of connections which are kept alive).
-
-
-
-
- Network address.
-
-
-
-
- Maximum queue size.
-
-
-
-
- NDC item separator.
-
-
-
-
- Indicates whether to include source info (file name and line number) in the information sent over the network.
-
-
-
-
- Indicates whether to include dictionary contents.
-
-
-
-
- Indicates whether to include contents of the stack.
-
-
-
-
- Indicates whether to include stack contents.
-
-
-
-
- Indicates whether to include dictionary contents.
-
-
-
-
- Indicates whether to include call site (class and method name) in the information sent over the network.
-
-
-
-
- Option to include all properties from the log events
-
-
-
-
- AppInfo field. By default it's the friendly name of the current AppDomain.
-
-
-
-
- Indicates whether to include NLog-specific extensions to log4j schema.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Layout that should be use to calcuate the value for the parameter.
-
-
-
-
- Viewer parameter name.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Text to be rendered.
-
-
-
-
- Header.
-
-
-
-
- Footer.
-
-
-
-
- Indicates whether to use default row highlighting rules.
-
-
-
-
- Indicates whether to auto-check if the console is available. - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App)
-
-
-
-
- The encoding for writing messages to the .
-
-
-
-
- Indicates whether the error stream (stderr) should be used instead of the output stream (stdout).
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Condition that must be met in order to set the specified foreground and background color.
-
-
-
-
- Background color.
-
-
-
-
- Foreground color.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Indicates whether to ignore case when comparing texts.
-
-
-
-
- Regular expression to be matched. You must specify either text or regex.
-
-
-
-
- Text to be matched. You must specify either text or regex.
-
-
-
-
- Indicates whether to match whole words only.
-
-
-
-
- Compile the ? This can improve the performance, but at the costs of more memory usage. If false, the Regex Cache is used.
-
-
-
-
- Background color.
-
-
-
-
- Foreground color.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Text to be rendered.
-
-
-
-
- Header.
-
-
-
-
- Footer.
-
-
-
-
- Indicates whether to send the log messages to the standard error instead of the standard output.
-
-
-
-
- Indicates whether to auto-check if the console is available - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App)
-
-
-
-
- The encoding for writing messages to the .
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Obsolete - value will be ignored! The logging code always runs outside of transaction. Gets or sets a value indicating whether to use database transactions. Some data providers require this.
-
-
-
-
- Database user name. If the ConnectionString is not provided this value will be used to construct the "User ID=" part of the connection string.
-
-
-
-
- Name of the database provider.
-
-
-
-
- Database password. If the ConnectionString is not provided this value will be used to construct the "Password=" part of the connection string.
-
-
-
-
- Indicates whether to keep the database connection open between the log events.
-
-
-
-
- Database name. If the ConnectionString is not provided this value will be used to construct the "Database=" part of the connection string.
-
-
-
-
- Name of the connection string (as specified in <connectionStrings> configuration section.
-
-
-
-
- Connection string. When provided, it overrides the values specified in DBHost, DBUserName, DBPassword, DBDatabase.
-
-
-
-
- Database host name. If the ConnectionString is not provided this value will be used to construct the "Server=" part of the connection string.
-
-
-
-
- Connection string using for installation and uninstallation. If not provided, regular ConnectionString is being used.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
- Text of the SQL command to be run on each log level.
-
-
-
-
- Type of the SQL command to be run on each log level.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Type of the command.
-
-
-
-
- Connection string to run the command against. If not provided, connection string from the target is used.
-
-
-
-
- Indicates whether to ignore failures.
-
-
-
-
- Command text.
-
-
-
-
-
-
-
-
-
-
-
-
-
- Layout that should be use to calcuate the value for the parameter.
-
-
-
-
- Database parameter name.
-
-
-
-
- Database parameter precision.
-
-
-
-
- Database parameter scale.
-
-
-
-
- Database parameter size.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Text to be rendered.
-
-
-
-
- Header.
-
-
-
-
- Footer.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Layout used to format log messages.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Layout used to format log messages.
-
-
-
-
- Layout that renders event Category.
-
-
-
-
- Layout that renders event ID.
-
-
-
-
- Name of the Event Log to write to. This can be System, Application or any user-defined name.
-
-
-
-
- Name of the machine on which Event Log service is running.
-
-
-
-
- Value to be used as the event Source.
-
-
-
-
- Action to take if the message is larger than the option.
-
-
-
-
- Optional entrytype. When not set, or when not convertable to then determined by
-
-
-
-
- Maximum Event log size in kilobytes. If null, the value won't be set. Default is 512 Kilobytes as specified by Eventlog API
-
-
-
-
- Message length limit to write to the Event Log.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Indicates whether to return to the first target after any successful write.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Text to be rendered.
-
-
-
-
- Header.
-
-
-
-
- Footer.
-
-
-
-
- File encoding.
-
-
-
-
- Line ending mode.
-
-
-
-
- Way file archives are numbered.
-
-
-
-
- Name of the file to be used for an archive.
-
-
-
-
- Indicates whether to automatically archive log files every time the specified time passes.
-
-
-
-
- Size in bytes above which log files will be automatically archived. Warning: combining this with isn't supported. We cannot create multiple archive files, if they should have the same name. Choose:
-
-
-
-
- Indicates whether to compress archive files into the zip archive format.
-
-
-
-
- Maximum number of archive files that should be kept.
-
-
-
-
- Gets or set a value indicating whether a managed file stream is forced, instead of using the native implementation.
-
-
-
-
- Is the an absolute or relative path?
-
-
-
-
- Cleanup invalid values in a filename, e.g. slashes in a filename. If set to true, this can impact the performance of massive writes. If set to false, nothing gets written when the filename is wrong.
-
-
-
-
- Whether or not this target should just discard all data that its asked to write. Mostly used for when testing NLog Stack except final write
-
-
-
-
- Is the an absolute or relative path?
-
-
-
-
- Value indicationg whether file creation calls should be synchronized by a system global mutex.
-
-
-
-
- Maximum number of log filenames that should be stored as existing.
-
-
-
-
- Indicates whether the footer should be written only when the file is archived.
-
-
-
-
- Name of the file to write to.
-
-
-
-
- Value specifying the date format to use when archiving files.
-
-
-
-
- Indicates whether to archive old log file on startup.
-
-
-
-
- Indicates whether to create directories if they do not exist.
-
-
-
-
- File attributes (Windows only).
-
-
-
-
- Indicates whether to delete old log file on startup.
-
-
-
-
- Indicates whether to replace file contents on each write instead of appending log message at the end.
-
-
-
-
- Indicates whether to enable log file(s) to be deleted.
-
-
-
-
- Number of times the write is appended on the file before NLog discards the log message.
-
-
-
-
- Indicates whether concurrent writes to the log file by multiple processes on the same host.
-
-
-
-
- Indicates whether to keep log file open instead of opening and closing it on each logging event.
-
-
-
-
- Indicates whether concurrent writes to the log file by multiple processes on different network hosts.
-
-
-
-
- Number of files to be kept open. Setting this to a higher value may improve performance in a situation where a single File target is writing to many files (such as splitting by level or by logger).
-
-
-
-
- Maximum number of seconds that files are kept open. If this number is negative the files are not automatically closed after a period of inactivity.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
- Log file buffer size in bytes.
-
-
-
-
- Indicates whether to automatically flush the file buffers after each log message.
-
-
-
-
- Delay in milliseconds to wait before attempting to write to the file again.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Condition expression. Log events who meet this condition will be forwarded to the wrapped target.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Windows domain name to change context to.
-
-
-
-
- Required impersonation level.
-
-
-
-
- Type of the logon provider.
-
-
-
-
- Logon Type.
-
-
-
-
- User account password.
-
-
-
-
- Indicates whether to revert to the credentials of the process instead of impersonating another user.
-
-
-
-
- Username to change context to.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Interval in which messages will be written up to the number of messages.
-
-
-
-
- Maximum allowed number of messages written per .
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Endpoint address.
-
-
-
-
- Name of the endpoint configuration in WCF configuration file.
-
-
-
-
- Indicates whether to use a WCF service contract that is one way (fire and forget) or two way (request-reply)
-
-
-
-
- Client ID.
-
-
-
-
- Indicates whether to include per-event properties in the payload sent to the server.
-
-
-
-
- Indicates whether to use binary message encoding.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Layout that should be use to calculate the value for the parameter.
-
-
-
-
- Name of the parameter.
-
-
-
-
- Type of the parameter.
-
-
-
-
- Type of the parameter. Obsolete alias for
-
-
-
-
- Parameter can combine multiple LogEvents into a single parameter value
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Text to be rendered.
-
-
-
-
- Header.
-
-
-
-
- Footer.
-
-
-
-
- Indicates whether to send message as HTML instead of plain text.
-
-
-
-
- Encoding to be used for sending e-mail.
-
-
-
-
- Indicates whether to add new lines between log entries.
-
-
-
-
- CC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).
-
-
-
-
- Recipients' email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).
-
-
-
-
- BCC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).
-
-
-
-
- Mail message body (repeated for each log message send in one mail).
-
-
-
-
- Mail subject.
-
-
-
-
- Sender's email address (e.g. joe@domain.com).
-
-
-
-
- Indicates the SMTP client timeout.
-
-
-
-
- Priority used for sending mails.
-
-
-
-
- Indicates whether NewLine characters in the body should be replaced with tags.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
- SMTP Server to be used for sending.
-
-
-
-
- SMTP Authentication mode.
-
-
-
-
- Username used to connect to SMTP server (used when SmtpAuthentication is set to "basic").
-
-
-
-
- Password used to authenticate against SMTP server (used when SmtpAuthentication is set to "basic").
-
-
-
-
- Indicates whether SSL (secure sockets layer) should be used when communicating with SMTP server.
-
-
-
-
- Port number that SMTP Server is listening on.
-
-
-
-
- Indicates whether the default Settings from System.Net.MailSettings should be used.
-
-
-
-
- Folder where applications save mail messages to be processed by the local SMTP server.
-
-
-
-
- Specifies how outgoing email messages will be handled.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Layout used to format log messages.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Class name.
-
-
-
-
- Method name. The method must be public and static. Use the AssemblyQualifiedName , https://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname(v=vs.110).aspx e.g.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Layout used to format log messages.
-
-
-
-
- Encoding to be used.
-
-
-
-
- End of line value if a newline is appended at the end of log message .
-
-
-
-
- Maximum message size in bytes.
-
-
-
-
- Indicates whether to append newline at the end of log message.
-
-
-
-
- Action that should be taken if the will be more connections than .
-
-
-
-
- Action that should be taken if the message is larger than maxMessageSize.
-
-
-
-
- Network address.
-
-
-
-
- Size of the connection cache (number of connections which are kept alive).
-
-
-
-
- Indicates whether to keep connection open whenever possible.
-
-
-
-
- Maximum current connections. 0 = no maximum.
-
-
-
-
- Maximum queue size.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Encoding to be used.
-
-
-
-
- Instance of that is used to format log messages.
-
-
-
-
- End of line value if a newline is appended at the end of log message .
-
-
-
-
- Maximum message size in bytes.
-
-
-
-
- Indicates whether to append newline at the end of log message.
-
-
-
-
- Action that should be taken if the will be more connections than .
-
-
-
-
- Action that should be taken if the message is larger than maxMessageSize.
-
-
-
-
- Maximum current connections. 0 = no maximum.
-
-
-
-
- Indicates whether to keep connection open whenever possible.
-
-
-
-
- Size of the connection cache (number of connections which are kept alive).
-
-
-
-
- Network address.
-
-
-
-
- Maximum queue size.
-
-
-
-
- NDC item separator.
-
-
-
-
- Indicates whether to include source info (file name and line number) in the information sent over the network.
-
-
-
-
- Indicates whether to include dictionary contents.
-
-
-
-
- Indicates whether to include contents of the stack.
-
-
-
-
- Indicates whether to include stack contents.
-
-
-
-
- Indicates whether to include dictionary contents.
-
-
-
-
- Indicates whether to include call site (class and method name) in the information sent over the network.
-
-
-
-
- Option to include all properties from the log events
-
-
-
-
- AppInfo field. By default it's the friendly name of the current AppDomain.
-
-
-
-
- Indicates whether to include NLog-specific extensions to log4j schema.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Layout used to format log messages.
-
-
-
-
- Indicates whether to perform layout calculation.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Layout used to format log messages.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Indicates whether performance counter should be automatically created.
-
-
-
-
- Name of the performance counter category.
-
-
-
-
- Counter help text.
-
-
-
-
- Name of the performance counter.
-
-
-
-
- Performance counter type.
-
-
-
-
- The value by which to increment the counter.
-
-
-
-
- Performance counter instance name.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Default filter to be applied when no specific rule matches.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
- Condition to be tested.
-
-
-
-
- Resulting filter to be applied when the condition matches.
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
- Number of times to repeat each log message.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
- Number of retries that should be attempted on the wrapped target in case of a failure.
-
-
-
-
- Time to wait between retries in milliseconds.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Layout used to format log messages.
-
-
-
-
- Always use independent of
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Name of the target.
-
-
-
-
- Should we include the BOM (Byte-order-mark) for UTF? Influences the property. This will only work for UTF-8.
-
-
-
-
- Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit
-
-
-
-
- Encoding.
-
-
-
-
- Value whether escaping be done according to the old NLog style (Very non-standard)
-
-
-
-
- Value whether escaping be done according to Rfc3986 (Supports Internationalized Resource Identifiers - IRIs)
-
-
-
-
- Web service method name. Only used with Soap.
-
-
-
-
- Web service namespace. Only used with Soap.
-
-
-
-
- Indicates whether to pre-authenticate the HttpWebRequest (Requires 'Authorization' in parameters)
-
-
-
-
- Protocol to be used when calling web service.
-
-
-
-
- Web service URL.
-
-
-
-
- Name of the root XML element, if POST of XML document chosen. If so, this property must not be null. (see and ).
-
-
-
-
- (optional) root namespace of the XML document, if POST of XML document chosen. (see and ).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Footer layout.
-
-
-
-
- Header layout.
-
-
-
-
- Body layout (can be repeated multiple times).
-
-
-
-
- Custom column delimiter value (valid when ColumnDelimiter is set to 'Custom').
-
-
-
-
- Column delimiter.
-
-
-
-
- Quote Character.
-
-
-
-
- Quoting mode.
-
-
-
-
- Indicates whether CVS should include header.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Layout of the column.
-
-
-
-
- Name of the column.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- List of property names to exclude when is true
-
-
-
-
- Option to include all properties from the log events
-
-
-
-
- Indicates whether to include contents of the dictionary.
-
-
-
-
- Indicates whether to include contents of the dictionary.
-
-
-
-
- Option to render the empty object value {}
-
-
-
-
- Option to suppress the extra spaces in the output json
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Determines wether or not this attribute will be Json encoded.
-
-
-
-
- Indicates whether to escape non-ascii characters
-
-
-
-
- Layout that will be rendered as the attribute's value.
-
-
-
-
- Name of the attribute.
-
-
-
-
-
-
-
-
-
-
-
-
-
- Footer layout.
-
-
-
-
- Header layout.
-
-
-
-
- Body layout (can be repeated multiple times).
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Option to include all properties from the log events
-
-
-
-
- Indicates whether to include contents of the dictionary.
-
-
-
-
- Indicates whether to include contents of the dictionary.
-
-
-
-
- Indicates whether to include contents of the stack.
-
-
-
-
- Indicates whether to include contents of the stack.
-
-
-
-
-
-
-
-
-
-
-
-
-
- Layout text.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Action to be taken when filter matches.
-
-
-
-
- Condition expression.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Action to be taken when filter matches.
-
-
-
-
- Indicates whether to ignore case when comparing strings.
-
-
-
-
- Layout to be used to filter log messages.
-
-
-
-
- Substring to be matched.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Action to be taken when filter matches.
-
-
-
-
- String to compare the layout to.
-
-
-
-
- Indicates whether to ignore case when comparing strings.
-
-
-
-
- Layout to be used to filter log messages.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Action to be taken when filter matches.
-
-
-
-
- Indicates whether to ignore case when comparing strings.
-
-
-
-
- Layout to be used to filter log messages.
-
-
-
-
- Substring to be matched.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Action to be taken when filter matches.
-
-
-
-
- String to compare the layout to.
-
-
-
-
- Indicates whether to ignore case when comparing strings.
-
-
-
-
- Layout to be used to filter log messages.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Action to be taken when filter matches.
-
-
-
-
- Layout to be used to filter log messages.
-
-
-
-
- Default number of unique filter values to expect, will automatically increase if needed
-
-
-
-
- Append FilterCount to the when an event is no longer filtered
-
-
-
-
- Insert FilterCount value into when an event is no longer filtered
-
-
-
-
- Applies the configured action to the initial logevent that starts the timeout period. Used to configure that it should ignore all events until timeout.
-
-
-
-
- Max number of unique filter values to expect simultaneously
-
-
-
-
- Max length of filter values, will truncate if above limit
-
-
-
-
- Default buffer size for the internal buffers
-
-
-
-
- Reuse internal buffers, and doesn't have to constantly allocate new buffers
-
-
-
-
- How long before a filter expires, and logging is accepted again
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/examples/NetCore2/ConsoleExample/Program.cs b/examples/NetCore2/ConsoleExample/Program.cs
index a0231cf5..b7d8be6b 100644
--- a/examples/NetCore2/ConsoleExample/Program.cs
+++ b/examples/NetCore2/ConsoleExample/Program.cs
@@ -1,9 +1,9 @@
-using Microsoft.Extensions.DependencyInjection;
+using System;
+using Microsoft.Extensions.Configuration;
+using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using NLog;
using NLog.Extensions.Logging;
-using System;
-using LogLevel = Microsoft.Extensions.Logging.LogLevel;
namespace ConsoleExample
{
@@ -44,21 +44,20 @@ private static IServiceProvider BuildDi()
// Runner is the custom class
services.AddTransient();
- services.AddSingleton();
- services.AddSingleton(typeof(ILogger<>), typeof(Logger<>));
- services.AddLogging(builder => builder.SetMinimumLevel(LogLevel.Trace));
+ var config = new ConfigurationBuilder()
+ .SetBasePath(System.IO.Directory.GetCurrentDirectory())
+ .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
+ .Build();
- var serviceProvider = services.BuildServiceProvider();
-
- var loggerFactory = serviceProvider.GetRequiredService();
-
- // configure NLog
- loggerFactory.AddNLog(new NLogProviderOptions
+ // configure Logging with NLog
+ services.AddLogging(loggingBuilder =>
{
- CaptureMessageTemplates = true,
- CaptureMessageProperties = true
+ loggingBuilder.ClearProviders();
+ loggingBuilder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
+ loggingBuilder.AddNLog(config);
});
+ var serviceProvider = services.BuildServiceProvider();
return serviceProvider;
}
}
@@ -75,6 +74,10 @@ public Runner(ILogger logger)
public void DoAction(string name)
{
_logger.LogDebug(20, "Doing hard work! {Action}", name);
+ _logger.LogInformation(21, "Doing hard work! {Action}", name);
+ _logger.LogWarning(22, "Doing hard work! {Action}", name);
+ _logger.LogError(23, "Doing hard work! {Action}", name);
+ _logger.LogCritical(24, "Doing hard work! {Action}", name);
}
}
}
\ No newline at end of file
diff --git a/examples/NetCore2/ConsoleExample/appsettings.json b/examples/NetCore2/ConsoleExample/appsettings.json
new file mode 100644
index 00000000..daabc235
--- /dev/null
+++ b/examples/NetCore2/ConsoleExample/appsettings.json
@@ -0,0 +1,9 @@
+{
+ "Logging": {
+ "NLog": {
+ "IncludeScopes": false,
+ "ParseMessageTemplates": true,
+ "CaptureMessageProperties": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/NLog.Extensions.Hosting/Extensions/ConfigureExtensions.cs b/src/NLog.Extensions.Hosting/Extensions/ConfigureExtensions.cs
index f63cc9d4..79780c84 100644
--- a/src/NLog.Extensions.Hosting/Extensions/ConfigureExtensions.cs
+++ b/src/NLog.Extensions.Hosting/Extensions/ConfigureExtensions.cs
@@ -41,7 +41,17 @@ public static IHostBuilder UseNLog(this IHostBuilder builder, NLogProviderOption
ConfigurationItemFactory.Default.RegisterItemsFromAssembly(typeof(ConfigureExtensions).GetTypeInfo()
.Assembly);
- services.AddSingleton(new LoggerFactory().AddNLog(options));
+ services.AddSingleton(serviceProvider =>
+ {
+ var provider = new NLogLoggerProvider(options ?? new NLogProviderOptions());
+ if (hostbuilder.Configuration != null)
+ {
+ // TODO ConfigSettingLayoutRenderer.DefaultConfiguration = hostbuilder.Configuration;
+ if (options == null)
+ provider.Configure(hostbuilder.Configuration?.GetSection("Logging:NLog"));
+ }
+ return provider;
+ });
});
return builder;
diff --git a/src/NLog.Extensions.Hosting/NLog.Extensions.Hosting.csproj b/src/NLog.Extensions.Hosting/NLog.Extensions.Hosting.csproj
index 9abceedf..3da0960e 100644
--- a/src/NLog.Extensions.Hosting/NLog.Extensions.Hosting.csproj
+++ b/src/NLog.Extensions.Hosting/NLog.Extensions.Hosting.csproj
@@ -2,8 +2,7 @@
netstandard2.0
- full
- true
+ Full
true
true
@@ -28,7 +27,7 @@
..\NLog.snk
true
-
+
diff --git a/src/NLog.Extensions.Logging/Extensions/ConfigureExtensions.cs b/src/NLog.Extensions.Logging/Extensions/ConfigureExtensions.cs
index 5cc580c4..1266cac3 100644
--- a/src/NLog.Extensions.Logging/Extensions/ConfigureExtensions.cs
+++ b/src/NLog.Extensions.Logging/Extensions/ConfigureExtensions.cs
@@ -1,5 +1,7 @@
using System;
+using System.Linq;
using System.Reflection;
+using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using NLog.Common;
using NLog.Config;
@@ -7,22 +9,22 @@
namespace NLog.Extensions.Logging
{
///
- /// Helpers for .NET Core
+ /// Helpers for configuring NLog for Microsoft Extension Logging (MEL)
///
public static class ConfigureExtensions
{
///
- /// Enable NLog as logging provider in .NET Core.
+ /// Enable NLog as logging provider for Microsoft Extension Logging
///
///
/// ILoggerFactory for chaining
public static ILoggerFactory AddNLog(this ILoggerFactory factory)
{
- return AddNLog(factory, null);
+ return factory.AddNLog(NLogProviderOptions.Default);
}
///
- /// Enable NLog as logging provider in .NET Core.
+ /// Enable NLog as logging provider for Microsoft Extension Logging
///
///
/// NLog options
@@ -33,19 +35,45 @@ public static ILoggerFactory AddNLog(this ILoggerFactory factory, NLogProviderOp
return factory;
}
+ ///
+ /// Enable NLog as logging provider for Microsoft Extension Logging
+ ///
+ ///
+ ///
+ /// ILoggerFactory for chaining
+ public static ILoggerFactory AddNLog(this ILoggerFactory factory, IConfiguration configuration)
+ {
+ var provider = CreateNLogProvider(configuration);
+ factory.AddProvider(provider);
+ return factory;
+ }
+
#if !NETCORE1_0
///
- /// Enable NLog as logging provider in .NET Core.
+ /// Enable NLog as logging provider for Microsoft Extension Logging
///
///
/// ILoggerFactory for chaining
public static ILoggingBuilder AddNLog(this ILoggingBuilder factory)
{
- return AddNLog(factory, null);
+ return factory.AddNLog(NLogProviderOptions.Default);
}
///
- /// Enable NLog as logging provider in .NET Core.
+ /// Enable NLog as logging provider for Microsoft Extension Logging
+ ///
+ ///
+ /// Configuration
+ /// ILoggerFactory for chaining
+ public static ILoggingBuilder AddNLog(this ILoggingBuilder factory, IConfiguration configuration)
+ {
+ var provider = CreateNLogProvider(configuration);
+ factory.AddProvider(provider);
+ return factory;
+ }
+
+ ///
+ /// Enable NLog as logging provider for Microsoft Extension Logging
///
///
/// NLog options
@@ -83,5 +111,48 @@ public static LoggingConfiguration ConfigureNLog(this ILoggerFactory loggerFacto
LogManager.Configuration = config;
return config;
}
+
+ ///
+ /// Factory method for
+ ///
+ ///
+ /// Microsoft Extension Configuration
+ ///
+ public static NLogLoggerProvider Configure(this NLogLoggerProvider nlogProvider, IConfigurationSection configurationSection)
+ {
+ if (configurationSection == null)
+ return nlogProvider;
+
+ var configProps = nlogProvider.Options.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public).Where(p => p.SetMethod?.IsPublic == true).ToDictionary(p => p.Name, StringComparer.OrdinalIgnoreCase);
+ foreach (var configValue in configurationSection.GetChildren())
+ {
+ if (configProps.TryGetValue(configValue.Key, out var propertyInfo))
+ {
+ try
+ {
+ var result = Convert.ChangeType(configValue.Value, propertyInfo.PropertyType);
+ propertyInfo.SetMethod.Invoke(nlogProvider.Options, new[] { result });
+ }
+ catch (Exception ex)
+ {
+ InternalLogger.Warn(ex, "NLogProviderOptions: Property {0} could not be assigned value: {1}", configValue.Key, configValue.Value);
+ }
+ }
+ }
+
+ return nlogProvider;
+ }
+
+ private static NLogLoggerProvider CreateNLogProvider(IConfiguration configuration)
+ {
+ var provider = new NLogLoggerProvider(new NLogProviderOptions());
+ if (configuration != null)
+ {
+ // TODO ConfigSettingLayoutRenderer.DefaultConfiguration = configuration;
+ provider.Configure(configuration.GetSection("Logging:NLog"));
+ }
+
+ return provider;
+ }
}
}
diff --git a/src/NLog.Extensions.Logging/Logging/NLogLoggerProvider.cs b/src/NLog.Extensions.Logging/Logging/NLogLoggerProvider.cs
index d18e23dd..86b92ca6 100644
--- a/src/NLog.Extensions.Logging/Logging/NLogLoggerProvider.cs
+++ b/src/NLog.Extensions.Logging/Logging/NLogLoggerProvider.cs
@@ -15,11 +15,17 @@ namespace NLog.Extensions.Logging
#endif
public class NLogLoggerProvider : Microsoft.Extensions.Logging.ILoggerProvider
{
+ private NLogBeginScopeParser _beginScopeParser;
+
///
/// NLog options
///
public NLogProviderOptions Options { get; set; }
- private NLogBeginScopeParser _beginScopeParser;
+
+ ///
+ /// NLog Factory
+ ///
+ public LogFactory LogFactory { get; }
///
/// New provider with default options, see
@@ -34,7 +40,18 @@ public NLogLoggerProvider()
///
///
public NLogLoggerProvider(NLogProviderOptions options)
+ :this(options, null)
+ {
+ }
+
+ ///
+ /// New provider with options
+ ///
+ ///
+ /// Optional isolated NLog LogFactory
+ public NLogLoggerProvider(NLogProviderOptions options, LogFactory logFactory)
{
+ LogFactory = logFactory ?? LogManager.LogFactory;
Options = options ?? NLogProviderOptions.Default;
_beginScopeParser = new NLogBeginScopeParser(options);
RegisterHiddenAssembliesForCallSite();
@@ -50,7 +67,7 @@ public Microsoft.Extensions.Logging.ILogger CreateLogger(string name)
var beginScopeParser = ((Options?.CaptureMessageProperties ?? true) && (Options?.IncludeScopes ?? true))
? (_beginScopeParser ?? System.Threading.Interlocked.CompareExchange(ref _beginScopeParser, new NLogBeginScopeParser(Options), null))
: null;
- return new NLogLogger(LogManager.GetLogger(name), Options, beginScopeParser);
+ return new NLogLogger(LogFactory.GetLogger(name), Options, beginScopeParser);
}
///
@@ -70,7 +87,7 @@ protected virtual void Dispose(bool disposing)
{
if (disposing)
{
- LogManager.Flush();
+ LogFactory.Flush();
}
}
diff --git a/src/NLog.Extensions.Logging/NLog.Extensions.Logging.csproj b/src/NLog.Extensions.Logging/NLog.Extensions.Logging.csproj
index 667cca7a..0f80c9f3 100644
--- a/src/NLog.Extensions.Logging/NLog.Extensions.Logging.csproj
+++ b/src/NLog.Extensions.Logging/NLog.Extensions.Logging.csproj
@@ -1,10 +1,9 @@
-
+
PackageReference
net451;net461;netstandard1.3;netstandard1.5;netstandard2.0
- full
- true
+ Full
true
true
@@ -17,7 +16,7 @@
For ASP.NET Core, use NLog.Web.AspNetCore: https://www.nuget.org/packages/NLog.Web.AspNetCore
- NLog;Microsoft.Extensions.Logging;log;logfiles;netcore;nlog
+ NLog;Microsoft.Extensions.Logging;log;logfiles;netcore
- Fixed null-reference-exception when parsing empty scope-property collection (@snakefoot)
@@ -63,29 +62,33 @@ Full changelog: https://github.com/NLog/NLog.Extensions.Logging/blob/master/CHAN
$(DefineConstants);NETSTANDARD
-
+
-
+
+
-
+
-
+
+
-
+
+
-
+
$(Title)
+
diff --git a/test/NLog.Extensions.Hosting.Tests/ExtensionMethodTests.cs b/test/NLog.Extensions.Hosting.Tests/ExtensionMethodTests.cs
index 29d7074c..9b2e98b1 100644
--- a/test/NLog.Extensions.Hosting.Tests/ExtensionMethodTests.cs
+++ b/test/NLog.Extensions.Hosting.Tests/ExtensionMethodTests.cs
@@ -1,4 +1,5 @@
-using System.Linq;
+using System.Collections.Generic;
+using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
@@ -10,25 +11,51 @@ namespace NLog.Extensions.Hosting.Tests
public class ExtensionMethodTests
{
[Fact]
- public void UseNLog_noParams_buildsAndExposesValidIServiceCollectiont()
+ public void UseNLog_noParams_WorksWithNLog()
{
var actual = new HostBuilder().UseNLog().Build();
- var serviceCount = actual.Services.GetServices().Count();
-
- Assert.NotNull(actual);
- Assert.Equal(2, serviceCount);
+ TestHostingResult(actual);
}
[Fact]
- public void UseNLog_withOptionsParam_buildsAndExposesValidIServiceCollection()
+ public void UseNLog_withOptionsParam_WorksWithNLog()
{
var someParam = new NLogProviderOptions {CaptureMessageProperties = false, CaptureMessageTemplates = false};
-
var actual = new HostBuilder().UseNLog(someParam).Build();
- var serviceCount = actual.Services.GetServices().Count();
+ TestHostingResult(actual);
+ }
+
+ [Fact]
+ public void UseNLog_withConfiguration_WorksWithNLog()
+ {
+ var memoryConfig = new Dictionary();
+ memoryConfig["NLog:CaptureMessageProperties"] = "true";
+ memoryConfig["NLog:CaptureMessageTemplates"] = "false";
+ memoryConfig["NLog:IgnoreScopes"] = "false";
+
+ var someParam = new NLogProviderOptions { CaptureMessageProperties = false, CaptureMessageTemplates = false };
+ var actual = new HostBuilder().ConfigureHostConfiguration(config => config.AddInMemoryCollection(memoryConfig)).UseNLog(someParam).Build();
+ TestHostingResult(actual);
+ }
+
+ private static void TestHostingResult(IHost host)
+ {
+ try
+ {
+ var nlogTarget = new Targets.MemoryTarget() { Name = "Output" };
+ Config.SimpleConfigurator.ConfigureForTargetLogging(nlogTarget);
+
+ var loggerFactory = host.Services.GetService();
+ Assert.NotNull(loggerFactory);
- Assert.NotNull(actual);
- Assert.Equal(2, serviceCount);
+ var logger = loggerFactory.CreateLogger("Hello");
+ logger.LogError("World");
+ Assert.NotEmpty(nlogTarget.Logs);
+ }
+ finally
+ {
+ LogManager.Configuration = null;
+ }
}
}
}
\ No newline at end of file
diff --git a/test/NLog.Extensions.Logging.Tests/CustomBeginScopeTest.cs b/test/NLog.Extensions.Logging.Tests/CustomBeginScopeTest.cs
index 532bbeb9..df3013fe 100644
--- a/test/NLog.Extensions.Logging.Tests/CustomBeginScopeTest.cs
+++ b/test/NLog.Extensions.Logging.Tests/CustomBeginScopeTest.cs
@@ -40,7 +40,7 @@ public void TestNonSerializableSayHi()
var scopeString = runner.SayHi().Result;
Assert.Single(target.Logs);
Assert.Equal("Hi Earth. Welcome Earth People", target.Logs[0]);
- Assert.Equal("Earth People", scopeString);
+ // Assert.Equal("Earth People", scopeString); <-- Bug https://github.com/aspnet/Logging/issues/893
}
[Fact]
diff --git a/test/NLog.Extensions.Logging.Tests/NLog.Extensions.Logging.Tests.csproj b/test/NLog.Extensions.Logging.Tests/NLog.Extensions.Logging.Tests.csproj
index 895408ea..4ac2d134 100644
--- a/test/NLog.Extensions.Logging.Tests/NLog.Extensions.Logging.Tests.csproj
+++ b/test/NLog.Extensions.Logging.Tests/NLog.Extensions.Logging.Tests.csproj
@@ -6,8 +6,7 @@
netcoreapp1.1;netcoreapp2.0;net452;net461
Library
false
- full
- true
+ Full
true
false
@@ -27,8 +26,7 @@
-
-
+