1
votes

I am attempting to configure NLog to output error logs in an XML format, however, NLog is not properly loading the configuration.

Here is the LAYOUT portion of my configuration:

<layout xsi:type="XmlLayout" includeAllProperties="true" propertiesElementKeyAttribute="" propertiesElementName="{0}" elementName="errorlog">
            <attribute name="time" layout="${longdate}" />
            <attribute name="level" layout="${level:upperCase=true}" />
            <element name="processname" value="${processname}" />
            <element name="logger" value="${logger}" />
            <element name="message" value="${message}" />               
        </layout>

When calling the LogManager.GetCurrentClassLogger() method, the following error is generated:

Parameter name not supported on XmlLayout

Here are the additional details captured in the NLog error log file:

    2019-03-04 16:25:39.9645 Trace   Scanning Property Renderers 'System.Collections.ObjectModel.ReadOnlyCollection`1[NLog.LayoutRenderers.LayoutRenderer]' System.Collections.ObjectModel
2019-03-04 16:25:39.9645 Trace   Scanning LevelLayoutRenderer 'Layout Renderer: ${level}'
2019-03-04 16:25:39.9645 Debug Setting 'XmlLayout.name' to 'processname'
2019-03-04 16:25:39.9835 Warn Error when setting 'processname' on attibute 'name' Exception: System.NotSupportedException: Parameter name not supported on XmlLayout
   at NLog.Internal.PropertyHelper.SetPropertyFromString(Object obj, String propertyName, String value, ConfigurationItemFactory configurationItemFactory)
   at NLog.Config.LoggingConfigurationParser.ConfigureObjectFromAttributes(Object targetObject, ILoggingConfigurationElement element, Boolean ignoreType)
2019-03-04 16:25:39.9835 Error Parsing configuration from C:\Users\<user>\Documents\Visual Studio 2017\Projects\TestingNlog\TestingNlog\bin\Debug\NLog.config failed. Exception: NLog.NLogConfigurationException: Exception when parsing C:\Users\<user>\Documents\Visual Studio 2017\Projects\TestingNlog\TestingNlog\bin\Debug\NLog.config.  ---> System.NotSupportedException: Parameter name not supported on XmlLayout

If I remove the ELEMENT tags from the configuration file, I am able to generate a partial log file with just the single XML element ERRORLOG with the 2 specified attributes. However, I have not found a way to include the ELEMENT tags in my output log files.

NLog.dll - v4.6.0.9068

C# .NET - v4.7.2

Any ideas or assistance would be greatly appreciated!

-Kasey911

1
You are waiting for NLog 4.6.0-rc2 to be released that makes some improvements to the config-names. This is the 4.6.0-rc1 revision: github.com/NLog/NLog/wiki/XmlLayout/… (Notice elementName and elementValue) - Rolf Kristensen

1 Answers

0
votes

Snakefoot is correct,

this has been changed after NLog 4.6 RC 1

In NLog 4.6 RC 1

<layout xsi:type="XmlLayout" elementName='logevent'>
        <attribute name="time" layout="${longdate}" />
        <attribute name="level" layout="${level:upperCase=true}"/>
        <element elementName="message" elementValue="${message}" />
</layout>

In NLog 4.6 RC 2 (not released yet), and probably RTM

<layout xsi:type="XmlLayout" elementName='logevent'>
        <attribute name="time" layout="${longdate}" />
        <attribute name="level" layout="${level:upperCase=true}"/>
        <element name="message" value="${message}" />
</layout>