fixing issue #7 · eab1142a67 - SVN.BY: Go Git Service
Browse Source

fixing issue #7

Tiernan OToole 8 years ago
parent
commit
eab1142a67
5 changed files with 2660 additions and 11 deletions
  1. 10 0
      B2Uploader/B2Uploader.csproj
  2. 36 0
      B2Uploader/NLog.config
  3. 2565 0
      B2Uploader/NLog.xsd
  4. 46 11
      B2Uploader/Program.cs
  5. 3 0
      B2Uploader/packages.config

+ 10 - 0
B2Uploader/B2Uploader.csproj

@@ -43,6 +43,10 @@
43 43
       <HintPath>..\packages\Newtonsoft.Json.7.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
44 44
       <Private>True</Private>
45 45
     </Reference>
46
+    <Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
47
+      <HintPath>..\packages\NLog.4.2.2\lib\net45\NLog.dll</HintPath>
48
+      <Private>True</Private>
49
+    </Reference>
46 50
     <Reference Include="System" />
47 51
     <Reference Include="System.Core" />
48 52
     <Reference Include="System.Xml.Linq" />
@@ -58,6 +62,12 @@
58 62
   </ItemGroup>
59 63
   <ItemGroup>
60 64
     <None Include="App.config" />
65
+    <Content Include="NLog.config">
66
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
67
+    </Content>
68
+    <None Include="NLog.xsd">
69
+      <SubType>Designer</SubType>
70
+    </None>
61 71
     <None Include="packages.config" />
62 72
   </ItemGroup>
63 73
   <ItemGroup>

+ 36 - 0
B2Uploader/NLog.config

@@ -0,0 +1,36 @@
1
+<?xml version="1.0" encoding="utf-8" ?>
2
+<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
3
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
+      xsi:schemaLocation="http://www.nlog-project.org/schemas/NLog.xsd NLog.xsd"
5
+      autoReload="true"
6
+      throwExceptions="false"
7
+      internalLogLevel="Off" internalLogFile="c:\temp\nlog-internal.log" >
8
+
9
+
10
+  <!-- optional, add some variabeles
11
+  https://github.com/nlog/NLog/wiki/Configuration-file#variables
12
+  -->
13
+  <variable name="myvar" value="myvalue"/>
14
+
15
+  <!-- 
16
+  See https://github.com/nlog/nlog/wiki/Configuration-file 
17
+  for information on customizing logging rules and outputs.
18
+   -->
19
+  <targets>
20
+
21
+   
22
+    <target xsi:type="File" name="f" fileName="${basedir}/${shortdate}.log"
23
+            layout="${longdate} ${uppercase:${level}} ${message}" />
24
+    
25
+    <target xsi:type="Console" layout="${longdate} ${uppercase:${level}} ${message}" name="c"/>
26
+   
27
+  </targets>
28
+
29
+  <rules>
30
+    <!-- add your logging rules here -->
31
+
32
+    
33
+    <logger name="*" minlevel="Debug" writeTo="f" />
34
+    <logger name="*" minlevel="Debug" writeTo="c" />
35
+  </rules>
36
+</nlog>

+ 2565 - 0
B2Uploader/NLog.xsd

@@ -0,0 +1,2565 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<xs:schema id="NLog" targetNamespace="http://www.nlog-project.org/schemas/NLog.xsd" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.nlog-project.org/schemas/NLog.xsd">
3
+  <xs:element name="nlog" type="NLogConfiguration" />
4
+  <xs:complexType name="NLogConfiguration">
5
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
6
+      <xs:element name="extensions" type="NLogExtensions" />
7
+      <xs:element name="include" type="NLogInclude" />
8
+      <xs:element name="variable" type="NLogVariable" />
9
+      <xs:element name="targets" type="NLogTargets" />
10
+      <xs:element name="rules" type="NLogRules" />
11
+      <xs:element name="time" type="TimeSource" />
12
+    </xs:choice>
13
+    <xs:attribute name="autoReload" type="xs:boolean">
14
+      <xs:annotation>
15
+        <xs:documentation>Watch config file for changes and reload automatically.</xs:documentation>
16
+      </xs:annotation>
17
+    </xs:attribute>
18
+    <xs:attribute name="internalLogToConsole" type="xs:boolean">
19
+      <xs:annotation>
20
+        <xs:documentation>Print internal NLog messages to the console. Default value is: false</xs:documentation>
21
+      </xs:annotation>
22
+    </xs:attribute>
23
+    <xs:attribute name="internalLogToConsoleError" type="xs:boolean">
24
+      <xs:annotation>
25
+        <xs:documentation>Print internal NLog messages to the console error output. Default value is: false</xs:documentation>
26
+      </xs:annotation>
27
+    </xs:attribute>
28
+    <xs:attribute name="internalLogFile" type="xs:string">
29
+      <xs:annotation>
30
+        <xs:documentation>Write internal NLog messages to the specified file.</xs:documentation>
31
+      </xs:annotation>
32
+    </xs:attribute>
33
+    <xs:attribute name="internalLogLevel" type="NLogLevel">
34
+      <xs:annotation>
35
+        <xs:documentation>Log level threshold for internal log messages. Default value is: Info.</xs:documentation>
36
+      </xs:annotation>
37
+    </xs:attribute>
38
+    <xs:attribute name="globalThreshold" type="NLogLevel">
39
+      <xs:annotation>
40
+        <xs:documentation>Global log level threshold for application log messages. Messages below this level won't be logged..</xs:documentation>
41
+      </xs:annotation>
42
+    </xs:attribute>
43
+    <xs:attribute name="throwExceptions" type="xs:boolean">
44
+      <xs:annotation>
45
+        <xs:documentation>Pass NLog internal exceptions to the application. Default value is: false.</xs:documentation>
46
+      </xs:annotation>
47
+    </xs:attribute>
48
+  </xs:complexType>
49
+  <xs:complexType name="NLogTargets">
50
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
51
+      <xs:element name="default-wrapper" type="WrapperTargetBase" />
52
+      <xs:element name="default-target-parameters" type="Target" />
53
+      <xs:element name="target" type="Target" />
54
+      <xs:element name="wrapper-target" type="WrapperTargetBase" />
55
+      <xs:element name="compound-target" type="CompoundTargetBase" />
56
+    </xs:choice>
57
+    <xs:attribute name="async" type="xs:boolean">
58
+      <xs:annotation>
59
+        <xs:documentation>Make all targets within this section asynchronous (creates additional threads but the calling thread isn't blocked by any target writes).</xs:documentation>
60
+      </xs:annotation>
61
+    </xs:attribute>
62
+  </xs:complexType>
63
+  <xs:complexType name="NLogRules">
64
+    <xs:sequence minOccurs="0" maxOccurs="unbounded">
65
+      <xs:element name="logger" type="NLogLoggerRule" />
66
+    </xs:sequence>
67
+  </xs:complexType>
68
+  <xs:complexType name="NLogExtensions">
69
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
70
+      <xs:element name="add" type="NLogExtensionsAdd" />
71
+    </xs:choice>
72
+  </xs:complexType>
73
+  <xs:complexType name="NLogExtensionsAdd">
74
+    <xs:attribute name="prefix" type="xs:string">
75
+      <xs:annotation>
76
+        <xs:documentation>Prefix for targets/layout renderers/filters/conditions loaded from this assembly.</xs:documentation>
77
+      </xs:annotation>
78
+    </xs:attribute>
79
+    <xs:attribute name="assemblyFile" type="xs:string">
80
+      <xs:annotation>
81
+        <xs:documentation>Load NLog extensions from the specified file (*.dll)</xs:documentation>
82
+      </xs:annotation>
83
+    </xs:attribute>
84
+    <xs:attribute name="assembly" type="xs:string">
85
+      <xs:annotation>
86
+        <xs:documentation>Load NLog extensions from the specified assembly. Assembly name should be fully qualified.</xs:documentation>
87
+      </xs:annotation>
88
+    </xs:attribute>
89
+  </xs:complexType>
90
+  <xs:complexType name="NLogLoggerRule">
91
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
92
+      <xs:element name="filters" type="NLogFilters" />
93
+    </xs:choice>
94
+    <xs:attribute name="name" use="optional">
95
+      <xs:annotation>
96
+        <xs:documentation>Name of the logger. May include '*' character which acts like a wildcard. Allowed forms are: *, Name, *Name, Name* and *Name*</xs:documentation>
97
+      </xs:annotation>
98
+    </xs:attribute>
99
+    <xs:attribute name="levels" type="NLogLevelList">
100
+      <xs:annotation>
101
+        <xs:documentation>Comma separated list of levels that this rule matches.</xs:documentation>
102
+      </xs:annotation>
103
+    </xs:attribute>
104
+    <xs:attribute name="minlevel" type="NLogLevel">
105
+      <xs:annotation>
106
+        <xs:documentation>Minimum level that this rule matches.</xs:documentation>
107
+      </xs:annotation>
108
+    </xs:attribute>
109
+    <xs:attribute name="maxlevel" type="NLogLevel">
110
+      <xs:annotation>
111
+        <xs:documentation>Maximum level that this rule matches.</xs:documentation>
112
+      </xs:annotation>
113
+    </xs:attribute>
114
+    <xs:attribute name="level" type="NLogLevel">
115
+      <xs:annotation>
116
+        <xs:documentation>Level that this rule matches.</xs:documentation>
117
+      </xs:annotation>
118
+    </xs:attribute>
119
+    <xs:attribute name="writeTo" type="NLogTargetIDList">
120
+      <xs:annotation>
121
+        <xs:documentation>Comma separated list of target names.</xs:documentation>
122
+      </xs:annotation>
123
+    </xs:attribute>
124
+    <xs:attribute name="final" type="xs:boolean" default="false">
125
+      <xs:annotation>
126
+        <xs:documentation>Ignore further rules if this one matches.</xs:documentation>
127
+      </xs:annotation>
128
+    </xs:attribute>
129
+    <xs:attribute name="enabled" type="xs:boolean" default="true">
130
+      <xs:annotation>
131
+        <xs:documentation>Enable or disable logging rule. Disabled rules are ignored.</xs:documentation>
132
+      </xs:annotation>
133
+    </xs:attribute>
134
+  </xs:complexType>
135
+  <xs:complexType name="NLogFilters">
136
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
137
+      <xs:element name="when" type="when" />
138
+      <xs:element name="whenContains" type="whenContains" />
139
+      <xs:element name="whenEqual" type="whenEqual" />
140
+      <xs:element name="whenNotContains" type="whenNotContains" />
141
+      <xs:element name="whenNotEqual" type="whenNotEqual" />
142
+    </xs:choice>
143
+  </xs:complexType>
144
+  <xs:simpleType name="NLogLevel">
145
+    <xs:restriction base="xs:string">
146
+      <xs:enumeration value="Off" />
147
+      <xs:enumeration value="Trace" />
148
+      <xs:enumeration value="Debug" />
149
+      <xs:enumeration value="Info" />
150
+      <xs:enumeration value="Warn" />
151
+      <xs:enumeration value="Error" />
152
+      <xs:enumeration value="Fatal" />
153
+    </xs:restriction>
154
+  </xs:simpleType>
155
+  <xs:simpleType name="LineEndingMode">
156
+    <xs:restriction base="xs:string">
157
+      <xs:enumeration value="Default" />
158
+      <xs:enumeration value="CRLF" />
159
+      <xs:enumeration value="CR" />
160
+      <xs:enumeration value="LF" />
161
+      <xs:enumeration value="None" />
162
+    </xs:restriction>
163
+  </xs:simpleType>
164
+  <xs:simpleType name="NLogLevelList">
165
+    <xs:restriction base="xs:string">
166
+      <xs:pattern value="(|Trace|Debug|Info|Warn|Error|Fatal)(,(Trace|Debug|Info|Warn|Error|Fatal))*" />
167
+    </xs:restriction>
168
+  </xs:simpleType>
169
+  <xs:complexType name="NLogInclude">
170
+    <xs:attribute name="file" type="SimpleLayoutAttribute" use="required">
171
+      <xs:annotation>
172
+        <xs:documentation>Name of the file to be included. The name is relative to the name of the current config file.</xs:documentation>
173
+      </xs:annotation>
174
+    </xs:attribute>
175
+    <xs:attribute name="ignoreErrors" type="xs:boolean" use="optional" default="false">
176
+      <xs:annotation>
177
+        <xs:documentation>Ignore any errors in the include file.</xs:documentation>
178
+      </xs:annotation>
179
+    </xs:attribute>
180
+  </xs:complexType>
181
+  <xs:complexType name="NLogVariable">
182
+    <xs:attribute name="name" type="xs:string" use="required">
183
+      <xs:annotation>
184
+        <xs:documentation>Variable name.</xs:documentation>
185
+      </xs:annotation>
186
+    </xs:attribute>
187
+    <xs:attribute name="value" type="SimpleLayoutAttribute" use="required">
188
+      <xs:annotation>
189
+        <xs:documentation>Variable value.</xs:documentation>
190
+      </xs:annotation>
191
+    </xs:attribute>
192
+  </xs:complexType>
193
+  <xs:simpleType name="NLogTargetIDList">
194
+    <xs:restriction base="xs:string">
195
+      <xs:pattern value="(|([a-zA-Z][a-zA-Z0-9_\-]*))(,([a-zA-Z][a-zA-Z0-9_\-]*))*" />
196
+    </xs:restriction>
197
+  </xs:simpleType>
198
+  <xs:complexType name="Target" abstract="true"></xs:complexType>
199
+  <xs:complexType name="TargetRef">
200
+    <xs:attribute name="name" type="xs:string" use="required" />
201
+  </xs:complexType>
202
+  <xs:complexType name="WrapperTargetBase" abstract="true">
203
+    <xs:complexContent>
204
+      <xs:extension base="Target">
205
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
206
+          <xs:element name="target" type="Target" minOccurs="1" maxOccurs="1" />
207
+          <xs:element name="wrapper-target" type="WrapperTargetBase" minOccurs="1" maxOccurs="1" />
208
+          <xs:element name="compound-target" type="CompoundTargetBase" minOccurs="1" maxOccurs="1" />
209
+          <xs:element name="target-ref" type="TargetRef" minOccurs="1" maxOccurs="1" />
210
+          <xs:element name="wrapper-target-ref" type="TargetRef" minOccurs="1" maxOccurs="1" />
211
+          <xs:element name="compound-target-ref" type="TargetRef" minOccurs="1" maxOccurs="1" />
212
+        </xs:choice>
213
+      </xs:extension>
214
+    </xs:complexContent>
215
+  </xs:complexType>
216
+  <xs:complexType name="CompoundTargetBase" abstract="true">
217
+    <xs:complexContent>
218
+      <xs:extension base="Target">
219
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
220
+          <xs:element name="target" type="Target" minOccurs="1" maxOccurs="unbounded" />
221
+          <xs:element name="wrapper-target" type="WrapperTargetBase" minOccurs="1" maxOccurs="1" />
222
+          <xs:element name="compound-target" type="CompoundTargetBase" minOccurs="1" maxOccurs="1" />
223
+          <xs:element name="target-ref" type="TargetRef" minOccurs="1" maxOccurs="1" />
224
+          <xs:element name="wrapper-target-ref" type="TargetRef" minOccurs="1" maxOccurs="1" />
225
+          <xs:element name="compound-target-ref" type="TargetRef" minOccurs="1" maxOccurs="1" />
226
+        </xs:choice>
227
+      </xs:extension>
228
+    </xs:complexContent>
229
+  </xs:complexType>
230
+  <xs:complexType name="Layout"></xs:complexType>
231
+  <xs:complexType name="Filter" abstract="true"></xs:complexType>
232
+  <xs:complexType name="TimeSource" abstract="true"></xs:complexType>
233
+  <xs:simpleType name="SimpleLayoutAttribute">
234
+    <xs:restriction base="xs:string">
235
+      <xs:pattern value=".*" />
236
+    </xs:restriction>
237
+  </xs:simpleType>
238
+  <xs:simpleType name="Condition">
239
+    <xs:restriction base="xs:string">
240
+      <xs:minLength value="1" />
241
+    </xs:restriction>
242
+  </xs:simpleType>
243
+  <xs:complexType name="AspResponse">
244
+    <xs:complexContent>
245
+      <xs:extension base="Target">
246
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
247
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
248
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
249
+          <xs:element name="addComments" minOccurs="0" maxOccurs="1" type="xs:boolean" />
250
+        </xs:choice>
251
+        <xs:attribute name="name" type="xs:string">
252
+          <xs:annotation>
253
+            <xs:documentation>Name of the target.</xs:documentation>
254
+          </xs:annotation>
255
+        </xs:attribute>
256
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
257
+          <xs:annotation>
258
+            <xs:documentation>Layout used to format log messages.</xs:documentation>
259
+          </xs:annotation>
260
+        </xs:attribute>
261
+        <xs:attribute name="addComments" type="xs:boolean">
262
+          <xs:annotation>
263
+            <xs:documentation>Indicates whether to add &lt;!-- --&gt; comments around all written texts.</xs:documentation>
264
+          </xs:annotation>
265
+        </xs:attribute>
266
+      </xs:extension>
267
+    </xs:complexContent>
268
+  </xs:complexType>
269
+  <xs:complexType name="AsyncWrapper">
270
+    <xs:complexContent>
271
+      <xs:extension base="WrapperTargetBase">
272
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
273
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
274
+          <xs:element name="batchSize" minOccurs="0" maxOccurs="1" type="xs:integer" />
275
+          <xs:element name="overflowAction" minOccurs="0" maxOccurs="1" type="NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction" />
276
+          <xs:element name="queueLimit" minOccurs="0" maxOccurs="1" type="xs:integer" />
277
+          <xs:element name="timeToSleepBetweenBatches" minOccurs="0" maxOccurs="1" type="xs:integer" />
278
+        </xs:choice>
279
+        <xs:attribute name="name" type="xs:string">
280
+          <xs:annotation>
281
+            <xs:documentation>Name of the target.</xs:documentation>
282
+          </xs:annotation>
283
+        </xs:attribute>
284
+        <xs:attribute name="batchSize" type="xs:integer">
285
+          <xs:annotation>
286
+            <xs:documentation>Number of log events that should be processed in a batch by the lazy writer thread.</xs:documentation>
287
+          </xs:annotation>
288
+        </xs:attribute>
289
+        <xs:attribute name="overflowAction" type="NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction">
290
+          <xs:annotation>
291
+            <xs:documentation>Action to be taken when the lazy writer thread request queue count exceeds the set limit.</xs:documentation>
292
+          </xs:annotation>
293
+        </xs:attribute>
294
+        <xs:attribute name="queueLimit" type="xs:integer">
295
+          <xs:annotation>
296
+            <xs:documentation>Limit on the number of requests in the lazy writer thread request queue.</xs:documentation>
297
+          </xs:annotation>
298
+        </xs:attribute>
299
+        <xs:attribute name="timeToSleepBetweenBatches" type="xs:integer">
300
+          <xs:annotation>
301
+            <xs:documentation>Time in milliseconds to sleep between batches.</xs:documentation>
302
+          </xs:annotation>
303
+        </xs:attribute>
304
+      </xs:extension>
305
+    </xs:complexContent>
306
+  </xs:complexType>
307
+  <xs:simpleType name="NLog.Targets.Wrappers.AsyncTargetWrapperOverflowAction">
308
+    <xs:restriction base="xs:string">
309
+      <xs:enumeration value="Grow" />
310
+      <xs:enumeration value="Discard" />
311
+      <xs:enumeration value="Block" />
312
+    </xs:restriction>
313
+  </xs:simpleType>
314
+  <xs:complexType name="AutoFlushWrapper">
315
+    <xs:complexContent>
316
+      <xs:extension base="WrapperTargetBase">
317
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
318
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
319
+        </xs:choice>
320
+        <xs:attribute name="name" type="xs:string">
321
+          <xs:annotation>
322
+            <xs:documentation>Name of the target.</xs:documentation>
323
+          </xs:annotation>
324
+        </xs:attribute>
325
+      </xs:extension>
326
+    </xs:complexContent>
327
+  </xs:complexType>
328
+  <xs:complexType name="BufferingWrapper">
329
+    <xs:complexContent>
330
+      <xs:extension base="WrapperTargetBase">
331
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
332
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
333
+          <xs:element name="bufferSize" minOccurs="0" maxOccurs="1" type="xs:integer" />
334
+          <xs:element name="flushTimeout" minOccurs="0" maxOccurs="1" type="xs:integer" />
335
+          <xs:element name="slidingTimeout" minOccurs="0" maxOccurs="1" type="xs:boolean" />
336
+        </xs:choice>
337
+        <xs:attribute name="name" type="xs:string">
338
+          <xs:annotation>
339
+            <xs:documentation>Name of the target.</xs:documentation>
340
+          </xs:annotation>
341
+        </xs:attribute>
342
+        <xs:attribute name="bufferSize" type="xs:integer">
343
+          <xs:annotation>
344
+            <xs:documentation>Number of log events to be buffered.</xs:documentation>
345
+          </xs:annotation>
346
+        </xs:attribute>
347
+        <xs:attribute name="flushTimeout" type="xs:integer">
348
+          <xs:annotation>
349
+            <xs:documentation>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.</xs:documentation>
350
+          </xs:annotation>
351
+        </xs:attribute>
352
+        <xs:attribute name="slidingTimeout" type="xs:boolean">
353
+          <xs:annotation>
354
+            <xs:documentation>Indicates whether to use sliding timeout.</xs:documentation>
355
+          </xs:annotation>
356
+        </xs:attribute>
357
+      </xs:extension>
358
+    </xs:complexContent>
359
+  </xs:complexType>
360
+  <xs:complexType name="Chainsaw">
361
+    <xs:complexContent>
362
+      <xs:extension base="Target">
363
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
364
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
365
+          <xs:element name="encoding" minOccurs="0" maxOccurs="1" type="xs:string" />
366
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
367
+          <xs:element name="maxMessageSize" minOccurs="0" maxOccurs="1" type="xs:integer" />
368
+          <xs:element name="newLine" minOccurs="0" maxOccurs="1" type="xs:boolean" />
369
+          <xs:element name="onConnectionOverflow" minOccurs="0" maxOccurs="1" type="NLog.Targets.NetworkTargetConnectionsOverflowAction" />
370
+          <xs:element name="onOverflow" minOccurs="0" maxOccurs="1" type="NLog.Targets.NetworkTargetOverflowAction" />
371
+          <xs:element name="keepConnection" minOccurs="0" maxOccurs="1" type="xs:boolean" />
372
+          <xs:element name="connectionCacheSize" minOccurs="0" maxOccurs="1" type="xs:integer" />
373
+          <xs:element name="maxConnections" minOccurs="0" maxOccurs="1" type="xs:integer" />
374
+          <xs:element name="address" minOccurs="0" maxOccurs="1" type="Layout" />
375
+          <xs:element name="maxQueueSize" minOccurs="0" maxOccurs="1" type="xs:integer" />
376
+          <xs:element name="includeSourceInfo" minOccurs="0" maxOccurs="1" type="xs:boolean" />
377
+          <xs:element name="ndcItemSeparator" minOccurs="0" maxOccurs="1" type="xs:string" />
378
+          <xs:element name="parameter" minOccurs="0" maxOccurs="unbounded" type="NLog.Targets.NLogViewerParameterInfo" />
379
+          <xs:element name="includeNdc" minOccurs="0" maxOccurs="1" type="xs:boolean" />
380
+          <xs:element name="includeCallSite" minOccurs="0" maxOccurs="1" type="xs:boolean" />
381
+          <xs:element name="appInfo" minOccurs="0" maxOccurs="1" type="xs:string" />
382
+          <xs:element name="includeNLogData" minOccurs="0" maxOccurs="1" type="xs:boolean" />
383
+          <xs:element name="includeMdc" minOccurs="0" maxOccurs="1" type="xs:boolean" />
384
+        </xs:choice>
385
+        <xs:attribute name="name" type="xs:string">
386
+          <xs:annotation>
387
+            <xs:documentation>Name of the target.</xs:documentation>
388
+          </xs:annotation>
389
+        </xs:attribute>
390
+        <xs:attribute name="encoding" type="xs:string">
391
+          <xs:annotation>
392
+            <xs:documentation>Encoding to be used.</xs:documentation>
393
+          </xs:annotation>
394
+        </xs:attribute>
395
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
396
+          <xs:annotation>
397
+            <xs:documentation>Instance of  that is used to format log messages.</xs:documentation>
398
+          </xs:annotation>
399
+        </xs:attribute>
400
+        <xs:attribute name="maxMessageSize" type="xs:integer">
401
+          <xs:annotation>
402
+            <xs:documentation>Maximum message size in bytes.</xs:documentation>
403
+          </xs:annotation>
404
+        </xs:attribute>
405
+        <xs:attribute name="newLine" type="xs:boolean">
406
+          <xs:annotation>
407
+            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>
408
+          </xs:annotation>
409
+        </xs:attribute>
410
+        <xs:attribute name="onConnectionOverflow" type="NLog.Targets.NetworkTargetConnectionsOverflowAction">
411
+          <xs:annotation>
412
+            <xs:documentation>Action that should be taken if the will be more connections than .</xs:documentation>
413
+          </xs:annotation>
414
+        </xs:attribute>
415
+        <xs:attribute name="onOverflow" type="NLog.Targets.NetworkTargetOverflowAction">
416
+          <xs:annotation>
417
+            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>
418
+          </xs:annotation>
419
+        </xs:attribute>
420
+        <xs:attribute name="keepConnection" type="xs:boolean">
421
+          <xs:annotation>
422
+            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>
423
+          </xs:annotation>
424
+        </xs:attribute>
425
+        <xs:attribute name="connectionCacheSize" type="xs:integer">
426
+          <xs:annotation>
427
+            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>
428
+          </xs:annotation>
429
+        </xs:attribute>
430
+        <xs:attribute name="maxConnections" type="xs:integer">
431
+          <xs:annotation>
432
+            <xs:documentation>Maximum current connections. 0 = no maximum.</xs:documentation>
433
+          </xs:annotation>
434
+        </xs:attribute>
435
+        <xs:attribute name="address" type="SimpleLayoutAttribute">
436
+          <xs:annotation>
437
+            <xs:documentation>Network address.</xs:documentation>
438
+          </xs:annotation>
439
+        </xs:attribute>
440
+        <xs:attribute name="maxQueueSize" type="xs:integer">
441
+          <xs:annotation>
442
+            <xs:documentation>Maximum queue size.</xs:documentation>
443
+          </xs:annotation>
444
+        </xs:attribute>
445
+        <xs:attribute name="includeSourceInfo" type="xs:boolean">
446
+          <xs:annotation>
447
+            <xs:documentation>Indicates whether to include source info (file name and line number) in the information sent over the network.</xs:documentation>
448
+          </xs:annotation>
449
+        </xs:attribute>
450
+        <xs:attribute name="ndcItemSeparator" type="xs:string">
451
+          <xs:annotation>
452
+            <xs:documentation>NDC item separator.</xs:documentation>
453
+          </xs:annotation>
454
+        </xs:attribute>
455
+        <xs:attribute name="includeNdc" type="xs:boolean">
456
+          <xs:annotation>
457
+            <xs:documentation>Indicates whether to include  stack contents.</xs:documentation>
458
+          </xs:annotation>
459
+        </xs:attribute>
460
+        <xs:attribute name="includeCallSite" type="xs:boolean">
461
+          <xs:annotation>
462
+            <xs:documentation>Indicates whether to include call site (class and method name) in the information sent over the network.</xs:documentation>
463
+          </xs:annotation>
464
+        </xs:attribute>
465
+        <xs:attribute name="appInfo" type="xs:string">
466
+          <xs:annotation>
467
+            <xs:documentation>AppInfo field. By default it's the friendly name of the current AppDomain.</xs:documentation>
468
+          </xs:annotation>
469
+        </xs:attribute>
470
+        <xs:attribute name="includeNLogData" type="xs:boolean">
471
+          <xs:annotation>
472
+            <xs:documentation>Indicates whether to include NLog-specific extensions to log4j schema.</xs:documentation>
473
+          </xs:annotation>
474
+        </xs:attribute>
475
+        <xs:attribute name="includeMdc" type="xs:boolean">
476
+          <xs:annotation>
477
+            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>
478
+          </xs:annotation>
479
+        </xs:attribute>
480
+      </xs:extension>
481
+    </xs:complexContent>
482
+  </xs:complexType>
483
+  <xs:simpleType name="NLog.Targets.NetworkTargetConnectionsOverflowAction">
484
+    <xs:restriction base="xs:string">
485
+      <xs:enumeration value="AllowNewConnnection" />
486
+      <xs:enumeration value="DiscardMessage" />
487
+      <xs:enumeration value="Block" />
488
+    </xs:restriction>
489
+  </xs:simpleType>
490
+  <xs:simpleType name="NLog.Targets.NetworkTargetOverflowAction">
491
+    <xs:restriction base="xs:string">
492
+      <xs:enumeration value="Error" />
493
+      <xs:enumeration value="Split" />
494
+      <xs:enumeration value="Discard" />
495
+    </xs:restriction>
496
+  </xs:simpleType>
497
+  <xs:complexType name="NLog.Targets.NLogViewerParameterInfo">
498
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
499
+      <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
500
+      <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
501
+    </xs:choice>
502
+    <xs:attribute name="layout" type="SimpleLayoutAttribute">
503
+      <xs:annotation>
504
+        <xs:documentation>Layout that should be use to calcuate the value for the parameter.</xs:documentation>
505
+      </xs:annotation>
506
+    </xs:attribute>
507
+    <xs:attribute name="name" type="xs:string">
508
+      <xs:annotation>
509
+        <xs:documentation>Viewer parameter name.</xs:documentation>
510
+      </xs:annotation>
511
+    </xs:attribute>
512
+  </xs:complexType>
513
+  <xs:complexType name="ColoredConsole">
514
+    <xs:complexContent>
515
+      <xs:extension base="Target">
516
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
517
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
518
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
519
+          <xs:element name="header" minOccurs="0" maxOccurs="1" type="Layout" />
520
+          <xs:element name="footer" minOccurs="0" maxOccurs="1" type="Layout" />
521
+          <xs:element name="useDefaultRowHighlightingRules" minOccurs="0" maxOccurs="1" type="xs:boolean" />
522
+          <xs:element name="highlight-row" minOccurs="0" maxOccurs="unbounded" type="NLog.Targets.ConsoleRowHighlightingRule" />
523
+          <xs:element name="highlight-word" minOccurs="0" maxOccurs="unbounded" type="NLog.Targets.ConsoleWordHighlightingRule" />
524
+          <xs:element name="encoding" minOccurs="0" maxOccurs="1" type="xs:string" />
525
+          <xs:element name="errorStream" minOccurs="0" maxOccurs="1" type="xs:boolean" />
526
+        </xs:choice>
527
+        <xs:attribute name="name" type="xs:string">
528
+          <xs:annotation>
529
+            <xs:documentation>Name of the target.</xs:documentation>
530
+          </xs:annotation>
531
+        </xs:attribute>
532
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
533
+          <xs:annotation>
534
+            <xs:documentation>Text to be rendered.</xs:documentation>
535
+          </xs:annotation>
536
+        </xs:attribute>
537
+        <xs:attribute name="header" type="SimpleLayoutAttribute">
538
+          <xs:annotation>
539
+            <xs:documentation>Header.</xs:documentation>
540
+          </xs:annotation>
541
+        </xs:attribute>
542
+        <xs:attribute name="footer" type="SimpleLayoutAttribute">
543
+          <xs:annotation>
544
+            <xs:documentation>Footer.</xs:documentation>
545
+          </xs:annotation>
546
+        </xs:attribute>
547
+        <xs:attribute name="useDefaultRowHighlightingRules" type="xs:boolean">
548
+          <xs:annotation>
549
+            <xs:documentation>Indicates whether to use default row highlighting rules.</xs:documentation>
550
+          </xs:annotation>
551
+        </xs:attribute>
552
+        <xs:attribute name="encoding" type="xs:string">
553
+          <xs:annotation>
554
+            <xs:documentation>The encoding for writing messages to the .</xs:documentation>
555
+          </xs:annotation>
556
+        </xs:attribute>
557
+        <xs:attribute name="errorStream" type="xs:boolean">
558
+          <xs:annotation>
559
+            <xs:documentation>Indicates whether the error stream (stderr) should be used instead of the output stream (stdout).</xs:documentation>
560
+          </xs:annotation>
561
+        </xs:attribute>
562
+      </xs:extension>
563
+    </xs:complexContent>
564
+  </xs:complexType>
565
+  <xs:simpleType name="NLog.Targets.ConsoleOutputColor">
566
+    <xs:restriction base="xs:string">
567
+      <xs:enumeration value="Black" />
568
+      <xs:enumeration value="DarkBlue" />
569
+      <xs:enumeration value="DarkGreen" />
570
+      <xs:enumeration value="DarkCyan" />
571
+      <xs:enumeration value="DarkRed" />
572
+      <xs:enumeration value="DarkMagenta" />
573
+      <xs:enumeration value="DarkYellow" />
574
+      <xs:enumeration value="Gray" />
575
+      <xs:enumeration value="DarkGray" />
576
+      <xs:enumeration value="Blue" />
577
+      <xs:enumeration value="Green" />
578
+      <xs:enumeration value="Cyan" />
579
+      <xs:enumeration value="Red" />
580
+      <xs:enumeration value="Magenta" />
581
+      <xs:enumeration value="Yellow" />
582
+      <xs:enumeration value="White" />
583
+      <xs:enumeration value="NoChange" />
584
+    </xs:restriction>
585
+  </xs:simpleType>
586
+  <xs:complexType name="NLog.Targets.ConsoleRowHighlightingRule">
587
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
588
+      <xs:element name="condition" minOccurs="0" maxOccurs="1" type="Condition" />
589
+      <xs:element name="backgroundColor" minOccurs="0" maxOccurs="1" type="NLog.Targets.ConsoleOutputColor" />
590
+      <xs:element name="foregroundColor" minOccurs="0" maxOccurs="1" type="NLog.Targets.ConsoleOutputColor" />
591
+    </xs:choice>
592
+    <xs:attribute name="condition" type="Condition">
593
+      <xs:annotation>
594
+        <xs:documentation>Condition that must be met in order to set the specified foreground and background color.</xs:documentation>
595
+      </xs:annotation>
596
+    </xs:attribute>
597
+    <xs:attribute name="backgroundColor" type="NLog.Targets.ConsoleOutputColor">
598
+      <xs:annotation>
599
+        <xs:documentation>Background color.</xs:documentation>
600
+      </xs:annotation>
601
+    </xs:attribute>
602
+    <xs:attribute name="foregroundColor" type="NLog.Targets.ConsoleOutputColor">
603
+      <xs:annotation>
604
+        <xs:documentation>Foreground color.</xs:documentation>
605
+      </xs:annotation>
606
+    </xs:attribute>
607
+  </xs:complexType>
608
+  <xs:complexType name="NLog.Targets.ConsoleWordHighlightingRule">
609
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
610
+      <xs:element name="ignoreCase" minOccurs="0" maxOccurs="1" type="xs:boolean" />
611
+      <xs:element name="regex" minOccurs="0" maxOccurs="1" type="xs:string" />
612
+      <xs:element name="text" minOccurs="0" maxOccurs="1" type="xs:string" />
613
+      <xs:element name="wholeWords" minOccurs="0" maxOccurs="1" type="xs:boolean" />
614
+      <xs:element name="backgroundColor" minOccurs="0" maxOccurs="1" type="NLog.Targets.ConsoleOutputColor" />
615
+      <xs:element name="foregroundColor" minOccurs="0" maxOccurs="1" type="NLog.Targets.ConsoleOutputColor" />
616
+    </xs:choice>
617
+    <xs:attribute name="ignoreCase" type="xs:boolean">
618
+      <xs:annotation>
619
+        <xs:documentation>Indicates whether to ignore case when comparing texts.</xs:documentation>
620
+      </xs:annotation>
621
+    </xs:attribute>
622
+    <xs:attribute name="regex" type="xs:string">
623
+      <xs:annotation>
624
+        <xs:documentation>Regular expression to be matched. You must specify either text or regex.</xs:documentation>
625
+      </xs:annotation>
626
+    </xs:attribute>
627
+    <xs:attribute name="text" type="xs:string">
628
+      <xs:annotation>
629
+        <xs:documentation>Text to be matched. You must specify either text or regex.</xs:documentation>
630
+      </xs:annotation>
631
+    </xs:attribute>
632
+    <xs:attribute name="wholeWords" type="xs:boolean">
633
+      <xs:annotation>
634
+        <xs:documentation>Indicates whether to match whole words only.</xs:documentation>
635
+      </xs:annotation>
636
+    </xs:attribute>
637
+    <xs:attribute name="backgroundColor" type="NLog.Targets.ConsoleOutputColor">
638
+      <xs:annotation>
639
+        <xs:documentation>Background color.</xs:documentation>
640
+      </xs:annotation>
641
+    </xs:attribute>
642
+    <xs:attribute name="foregroundColor" type="NLog.Targets.ConsoleOutputColor">
643
+      <xs:annotation>
644
+        <xs:documentation>Foreground color.</xs:documentation>
645
+      </xs:annotation>
646
+    </xs:attribute>
647
+  </xs:complexType>
648
+  <xs:complexType name="Console">
649
+    <xs:complexContent>
650
+      <xs:extension base="Target">
651
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
652
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
653
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
654
+          <xs:element name="header" minOccurs="0" maxOccurs="1" type="Layout" />
655
+          <xs:element name="footer" minOccurs="0" maxOccurs="1" type="Layout" />
656
+          <xs:element name="error" minOccurs="0" maxOccurs="1" type="xs:boolean" />
657
+          <xs:element name="encoding" minOccurs="0" maxOccurs="1" type="xs:string" />
658
+        </xs:choice>
659
+        <xs:attribute name="name" type="xs:string">
660
+          <xs:annotation>
661
+            <xs:documentation>Name of the target.</xs:documentation>
662
+          </xs:annotation>
663
+        </xs:attribute>
664
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
665
+          <xs:annotation>
666
+            <xs:documentation>Text to be rendered.</xs:documentation>
667
+          </xs:annotation>
668
+        </xs:attribute>
669
+        <xs:attribute name="header" type="SimpleLayoutAttribute">
670
+          <xs:annotation>
671
+            <xs:documentation>Header.</xs:documentation>
672
+          </xs:annotation>
673
+        </xs:attribute>
674
+        <xs:attribute name="footer" type="SimpleLayoutAttribute">
675
+          <xs:annotation>
676
+            <xs:documentation>Footer.</xs:documentation>
677
+          </xs:annotation>
678
+        </xs:attribute>
679
+        <xs:attribute name="error" type="xs:boolean">
680
+          <xs:annotation>
681
+            <xs:documentation>Indicates whether to send the log messages to the standard error instead of the standard output.</xs:documentation>
682
+          </xs:annotation>
683
+        </xs:attribute>
684
+        <xs:attribute name="encoding" type="xs:string">
685
+          <xs:annotation>
686
+            <xs:documentation>The encoding for writing messages to the .</xs:documentation>
687
+          </xs:annotation>
688
+        </xs:attribute>
689
+      </xs:extension>
690
+    </xs:complexContent>
691
+  </xs:complexType>
692
+  <xs:complexType name="Database">
693
+    <xs:complexContent>
694
+      <xs:extension base="Target">
695
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
696
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
697
+          <xs:element name="connectionString" minOccurs="0" maxOccurs="1" type="Layout" />
698
+          <xs:element name="connectionStringName" minOccurs="0" maxOccurs="1" type="xs:string" />
699
+          <xs:element name="dbDatabase" minOccurs="0" maxOccurs="1" type="Layout" />
700
+          <xs:element name="dbHost" minOccurs="0" maxOccurs="1" type="Layout" />
701
+          <xs:element name="dbPassword" minOccurs="0" maxOccurs="1" type="Layout" />
702
+          <xs:element name="dbProvider" minOccurs="0" maxOccurs="1" type="xs:string" />
703
+          <xs:element name="dbUserName" minOccurs="0" maxOccurs="1" type="Layout" />
704
+          <xs:element name="keepConnection" minOccurs="0" maxOccurs="1" type="xs:boolean" />
705
+          <xs:element name="useTransactions" minOccurs="0" maxOccurs="1" type="xs:boolean" />
706
+          <xs:element name="installConnectionString" minOccurs="0" maxOccurs="1" type="Layout" />
707
+          <xs:element name="install-command" minOccurs="0" maxOccurs="unbounded" type="NLog.Targets.DatabaseCommandInfo" />
708
+          <xs:element name="uninstall-command" minOccurs="0" maxOccurs="unbounded" type="NLog.Targets.DatabaseCommandInfo" />
709
+          <xs:element name="commandText" minOccurs="0" maxOccurs="1" type="Layout" />
710
+          <xs:element name="commandType" minOccurs="0" maxOccurs="1" type="System.Data.CommandType" />
711
+          <xs:element name="parameter" minOccurs="0" maxOccurs="unbounded" type="NLog.Targets.DatabaseParameterInfo" />
712
+        </xs:choice>
713
+        <xs:attribute name="name" type="xs:string">
714
+          <xs:annotation>
715
+            <xs:documentation>Name of the target.</xs:documentation>
716
+          </xs:annotation>
717
+        </xs:attribute>
718
+        <xs:attribute name="connectionString" type="SimpleLayoutAttribute">
719
+          <xs:annotation>
720
+            <xs:documentation>Connection string. When provided, it overrides the values specified in DBHost, DBUserName, DBPassword, DBDatabase.</xs:documentation>
721
+          </xs:annotation>
722
+        </xs:attribute>
723
+        <xs:attribute name="connectionStringName" type="xs:string">
724
+          <xs:annotation>
725
+            <xs:documentation>Name of the connection string (as specified in &lt;connectionStrings&gt; configuration section.</xs:documentation>
726
+          </xs:annotation>
727
+        </xs:attribute>
728
+        <xs:attribute name="dbDatabase" type="SimpleLayoutAttribute">
729
+          <xs:annotation>
730
+            <xs:documentation>Database name. If the ConnectionString is not provided this value will be used to construct the "Database=" part of the connection string.</xs:documentation>
731
+          </xs:annotation>
732
+        </xs:attribute>
733
+        <xs:attribute name="dbHost" type="SimpleLayoutAttribute">
734
+          <xs:annotation>
735
+            <xs:documentation>Database host name. If the ConnectionString is not provided this value will be used to construct the "Server=" part of the connection string.</xs:documentation>
736
+          </xs:annotation>
737
+        </xs:attribute>
738
+        <xs:attribute name="dbPassword" type="SimpleLayoutAttribute">
739
+          <xs:annotation>
740
+            <xs:documentation>Database password. If the ConnectionString is not provided this value will be used to construct the "Password=" part of the connection string.</xs:documentation>
741
+          </xs:annotation>
742
+        </xs:attribute>
743
+        <xs:attribute name="dbProvider" type="xs:string">
744
+          <xs:annotation>
745
+            <xs:documentation>Name of the database provider.</xs:documentation>
746
+          </xs:annotation>
747
+        </xs:attribute>
748
+        <xs:attribute name="dbUserName" type="SimpleLayoutAttribute">
749
+          <xs:annotation>
750
+            <xs:documentation>Database user name. If the ConnectionString is not provided this value will be used to construct the "User ID=" part of the connection string.</xs:documentation>
751
+          </xs:annotation>
752
+        </xs:attribute>
753
+        <xs:attribute name="keepConnection" type="xs:boolean">
754
+          <xs:annotation>
755
+            <xs:documentation>Indicates whether to keep the database connection open between the log events.</xs:documentation>
756
+          </xs:annotation>
757
+        </xs:attribute>
758
+        <xs:attribute name="useTransactions" type="xs:boolean">
759
+          <xs:annotation>
760
+            <xs:documentation>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.</xs:documentation>
761
+          </xs:annotation>
762
+        </xs:attribute>
763
+        <xs:attribute name="installConnectionString" type="SimpleLayoutAttribute">
764
+          <xs:annotation>
765
+            <xs:documentation>Connection string using for installation and uninstallation. If not provided, regular ConnectionString is being used.</xs:documentation>
766
+          </xs:annotation>
767
+        </xs:attribute>
768
+        <xs:attribute name="commandText" type="SimpleLayoutAttribute">
769
+          <xs:annotation>
770
+            <xs:documentation>Text of the SQL command to be run on each log level.</xs:documentation>
771
+          </xs:annotation>
772
+        </xs:attribute>
773
+        <xs:attribute name="commandType" type="System.Data.CommandType">
774
+          <xs:annotation>
775
+            <xs:documentation>Type of the SQL command to be run on each log level.</xs:documentation>
776
+          </xs:annotation>
777
+        </xs:attribute>
778
+      </xs:extension>
779
+    </xs:complexContent>
780
+  </xs:complexType>
781
+  <xs:simpleType name="System.Data.CommandType">
782
+    <xs:restriction base="xs:string">
783
+      <xs:enumeration value="Text" />
784
+      <xs:enumeration value="StoredProcedure" />
785
+      <xs:enumeration value="TableDirect" />
786
+    </xs:restriction>
787
+  </xs:simpleType>
788
+  <xs:complexType name="NLog.Targets.DatabaseCommandInfo">
789
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
790
+      <xs:element name="commandType" minOccurs="0" maxOccurs="1" type="System.Data.CommandType" />
791
+      <xs:element name="connectionString" minOccurs="0" maxOccurs="1" type="Layout" />
792
+      <xs:element name="ignoreFailures" minOccurs="0" maxOccurs="1" type="xs:boolean" />
793
+      <xs:element name="parameter" minOccurs="0" maxOccurs="unbounded" type="NLog.Targets.DatabaseParameterInfo" />
794
+      <xs:element name="text" minOccurs="0" maxOccurs="1" type="Layout" />
795
+    </xs:choice>
796
+    <xs:attribute name="commandType" type="System.Data.CommandType">
797
+      <xs:annotation>
798
+        <xs:documentation>Type of the command.</xs:documentation>
799
+      </xs:annotation>
800
+    </xs:attribute>
801
+    <xs:attribute name="connectionString" type="SimpleLayoutAttribute">
802
+      <xs:annotation>
803
+        <xs:documentation>Connection string to run the command against. If not provided, connection string from the target is used.</xs:documentation>
804
+      </xs:annotation>
805
+    </xs:attribute>
806
+    <xs:attribute name="ignoreFailures" type="xs:boolean">
807
+      <xs:annotation>
808
+        <xs:documentation>Indicates whether to ignore failures.</xs:documentation>
809
+      </xs:annotation>
810
+    </xs:attribute>
811
+    <xs:attribute name="text" type="SimpleLayoutAttribute">
812
+      <xs:annotation>
813
+        <xs:documentation>Command text.</xs:documentation>
814
+      </xs:annotation>
815
+    </xs:attribute>
816
+  </xs:complexType>
817
+  <xs:complexType name="NLog.Targets.DatabaseParameterInfo">
818
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
819
+      <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
820
+      <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
821
+      <xs:element name="precision" minOccurs="0" maxOccurs="1" type="xs:byte" />
822
+      <xs:element name="scale" minOccurs="0" maxOccurs="1" type="xs:byte" />
823
+      <xs:element name="size" minOccurs="0" maxOccurs="1" type="xs:integer" />
824
+    </xs:choice>
825
+    <xs:attribute name="layout" type="SimpleLayoutAttribute">
826
+      <xs:annotation>
827
+        <xs:documentation>Layout that should be use to calcuate the value for the parameter.</xs:documentation>
828
+      </xs:annotation>
829
+    </xs:attribute>
830
+    <xs:attribute name="name" type="xs:string">
831
+      <xs:annotation>
832
+        <xs:documentation>Database parameter name.</xs:documentation>
833
+      </xs:annotation>
834
+    </xs:attribute>
835
+    <xs:attribute name="precision" type="xs:byte">
836
+      <xs:annotation>
837
+        <xs:documentation>Database parameter precision.</xs:documentation>
838
+      </xs:annotation>
839
+    </xs:attribute>
840
+    <xs:attribute name="scale" type="xs:byte">
841
+      <xs:annotation>
842
+        <xs:documentation>Database parameter scale.</xs:documentation>
843
+      </xs:annotation>
844
+    </xs:attribute>
845
+    <xs:attribute name="size" type="xs:integer">
846
+      <xs:annotation>
847
+        <xs:documentation>Database parameter size.</xs:documentation>
848
+      </xs:annotation>
849
+    </xs:attribute>
850
+  </xs:complexType>
851
+  <xs:complexType name="Debugger">
852
+    <xs:complexContent>
853
+      <xs:extension base="Target">
854
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
855
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
856
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
857
+          <xs:element name="header" minOccurs="0" maxOccurs="1" type="Layout" />
858
+          <xs:element name="footer" minOccurs="0" maxOccurs="1" type="Layout" />
859
+        </xs:choice>
860
+        <xs:attribute name="name" type="xs:string">
861
+          <xs:annotation>
862
+            <xs:documentation>Name of the target.</xs:documentation>
863
+          </xs:annotation>
864
+        </xs:attribute>
865
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
866
+          <xs:annotation>
867
+            <xs:documentation>Text to be rendered.</xs:documentation>
868
+          </xs:annotation>
869
+        </xs:attribute>
870
+        <xs:attribute name="header" type="SimpleLayoutAttribute">
871
+          <xs:annotation>
872
+            <xs:documentation>Header.</xs:documentation>
873
+          </xs:annotation>
874
+        </xs:attribute>
875
+        <xs:attribute name="footer" type="SimpleLayoutAttribute">
876
+          <xs:annotation>
877
+            <xs:documentation>Footer.</xs:documentation>
878
+          </xs:annotation>
879
+        </xs:attribute>
880
+      </xs:extension>
881
+    </xs:complexContent>
882
+  </xs:complexType>
883
+  <xs:complexType name="Debug">
884
+    <xs:complexContent>
885
+      <xs:extension base="Target">
886
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
887
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
888
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
889
+        </xs:choice>
890
+        <xs:attribute name="name" type="xs:string">
891
+          <xs:annotation>
892
+            <xs:documentation>Name of the target.</xs:documentation>
893
+          </xs:annotation>
894
+        </xs:attribute>
895
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
896
+          <xs:annotation>
897
+            <xs:documentation>Layout used to format log messages.</xs:documentation>
898
+          </xs:annotation>
899
+        </xs:attribute>
900
+      </xs:extension>
901
+    </xs:complexContent>
902
+  </xs:complexType>
903
+  <xs:complexType name="EventLog">
904
+    <xs:complexContent>
905
+      <xs:extension base="Target">
906
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
907
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
908
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
909
+          <xs:element name="category" minOccurs="0" maxOccurs="1" type="Layout" />
910
+          <xs:element name="eventId" minOccurs="0" maxOccurs="1" type="Layout" />
911
+          <xs:element name="log" minOccurs="0" maxOccurs="1" type="xs:string" />
912
+          <xs:element name="machineName" minOccurs="0" maxOccurs="1" type="xs:string" />
913
+          <xs:element name="source" minOccurs="0" maxOccurs="1" type="Layout" />
914
+          <xs:element name="entryType" minOccurs="0" maxOccurs="1" type="Layout" />
915
+        </xs:choice>
916
+        <xs:attribute name="name" type="xs:string">
917
+          <xs:annotation>
918
+            <xs:documentation>Name of the target.</xs:documentation>
919
+          </xs:annotation>
920
+        </xs:attribute>
921
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
922
+          <xs:annotation>
923
+            <xs:documentation>Layout used to format log messages.</xs:documentation>
924
+          </xs:annotation>
925
+        </xs:attribute>
926
+        <xs:attribute name="category" type="SimpleLayoutAttribute">
927
+          <xs:annotation>
928
+            <xs:documentation>Layout that renders event Category.</xs:documentation>
929
+          </xs:annotation>
930
+        </xs:attribute>
931
+        <xs:attribute name="eventId" type="SimpleLayoutAttribute">
932
+          <xs:annotation>
933
+            <xs:documentation>Layout that renders event ID.</xs:documentation>
934
+          </xs:annotation>
935
+        </xs:attribute>
936
+        <xs:attribute name="log" type="xs:string">
937
+          <xs:annotation>
938
+            <xs:documentation>Name of the Event Log to write to. This can be System, Application or any user-defined name.</xs:documentation>
939
+          </xs:annotation>
940
+        </xs:attribute>
941
+        <xs:attribute name="machineName" type="xs:string">
942
+          <xs:annotation>
943
+            <xs:documentation>Name of the machine on which Event Log service is running.</xs:documentation>
944
+          </xs:annotation>
945
+        </xs:attribute>
946
+        <xs:attribute name="source" type="SimpleLayoutAttribute">
947
+          <xs:annotation>
948
+            <xs:documentation>Value to be used as the event Source.</xs:documentation>
949
+          </xs:annotation>
950
+        </xs:attribute>
951
+        <xs:attribute name="entryType" type="SimpleLayoutAttribute">
952
+          <xs:annotation>
953
+            <xs:documentation>Optional entrytype. When not set, or when not convertable to  then determined by </xs:documentation>
954
+          </xs:annotation>
955
+        </xs:attribute>
956
+      </xs:extension>
957
+    </xs:complexContent>
958
+  </xs:complexType>
959
+  <xs:complexType name="FallbackGroup">
960
+    <xs:complexContent>
961
+      <xs:extension base="CompoundTargetBase">
962
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
963
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
964
+          <xs:element name="returnToFirstOnSuccess" minOccurs="0" maxOccurs="1" type="xs:boolean" />
965
+        </xs:choice>
966
+        <xs:attribute name="name" type="xs:string">
967
+          <xs:annotation>
968
+            <xs:documentation>Name of the target.</xs:documentation>
969
+          </xs:annotation>
970
+        </xs:attribute>
971
+        <xs:attribute name="returnToFirstOnSuccess" type="xs:boolean">
972
+          <xs:annotation>
973
+            <xs:documentation>Indicates whether to return to the first target after any successful write.</xs:documentation>
974
+          </xs:annotation>
975
+        </xs:attribute>
976
+      </xs:extension>
977
+    </xs:complexContent>
978
+  </xs:complexType>
979
+  <xs:complexType name="File">
980
+    <xs:complexContent>
981
+      <xs:extension base="Target">
982
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
983
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
984
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
985
+          <xs:element name="header" minOccurs="0" maxOccurs="1" type="Layout" />
986
+          <xs:element name="footer" minOccurs="0" maxOccurs="1" type="Layout" />
987
+          <xs:element name="encoding" minOccurs="0" maxOccurs="1" type="xs:string" />
988
+          <xs:element name="lineEnding" minOccurs="0" maxOccurs="1" type="LineEndingMode" />
989
+          <xs:element name="maxArchiveFiles" minOccurs="0" maxOccurs="1" type="xs:integer" />
990
+          <xs:element name="archiveNumbering" minOccurs="0" maxOccurs="1" type="NLog.Targets.ArchiveNumberingMode" />
991
+          <xs:element name="archiveFileName" minOccurs="0" maxOccurs="1" type="Layout" />
992
+          <xs:element name="archiveEvery" minOccurs="0" maxOccurs="1" type="NLog.Targets.FileArchivePeriod" />
993
+          <xs:element name="archiveAboveSize" minOccurs="0" maxOccurs="1" type="xs:long" />
994
+          <xs:element name="enableArchiveFileCompression" minOccurs="0" maxOccurs="1" type="xs:boolean" />
995
+          <xs:element name="forceManaged" minOccurs="0" maxOccurs="1" type="xs:boolean" />
996
+          <xs:element name="fileAttributes" minOccurs="0" maxOccurs="1" type="NLog.Targets.Win32FileAttributes" />
997
+          <xs:element name="replaceFileContentsOnEachWrite" minOccurs="0" maxOccurs="1" type="xs:boolean" />
998
+          <xs:element name="fileName" minOccurs="0" maxOccurs="1" type="Layout" />
999
+          <xs:element name="archiveDateFormat" minOccurs="0" maxOccurs="1" type="xs:string" />
1000
+          <xs:element name="archiveOldFileOnStartup" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1001
+          <xs:element name="createDirs" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1002
+          <xs:element name="deleteOldFileOnStartup" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1003
+          <xs:element name="enableFileDelete" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1004
+          <xs:element name="openFileCacheTimeout" minOccurs="0" maxOccurs="1" type="xs:integer" />
1005
+          <xs:element name="networkWrites" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1006
+          <xs:element name="maxLogFilenames" minOccurs="0" maxOccurs="1" type="xs:integer" />
1007
+          <xs:element name="keepFileOpen" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1008
+          <xs:element name="concurrentWrites" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1009
+          <xs:element name="concurrentWriteAttempts" minOccurs="0" maxOccurs="1" type="xs:integer" />
1010
+          <xs:element name="concurrentWriteAttemptDelay" minOccurs="0" maxOccurs="1" type="xs:integer" />
1011
+          <xs:element name="autoFlush" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1012
+          <xs:element name="openFileCacheSize" minOccurs="0" maxOccurs="1" type="xs:integer" />
1013
+          <xs:element name="bufferSize" minOccurs="0" maxOccurs="1" type="xs:integer" />
1014
+        </xs:choice>
1015
+        <xs:attribute name="name" type="xs:string">
1016
+          <xs:annotation>
1017
+            <xs:documentation>Name of the target.</xs:documentation>
1018
+          </xs:annotation>
1019
+        </xs:attribute>
1020
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
1021
+          <xs:annotation>
1022
+            <xs:documentation>Text to be rendered.</xs:documentation>
1023
+          </xs:annotation>
1024
+        </xs:attribute>
1025
+        <xs:attribute name="header" type="SimpleLayoutAttribute">
1026
+          <xs:annotation>
1027
+            <xs:documentation>Header.</xs:documentation>
1028
+          </xs:annotation>
1029
+        </xs:attribute>
1030
+        <xs:attribute name="footer" type="SimpleLayoutAttribute">
1031
+          <xs:annotation>
1032
+            <xs:documentation>Footer.</xs:documentation>
1033
+          </xs:annotation>
1034
+        </xs:attribute>
1035
+        <xs:attribute name="encoding" type="xs:string">
1036
+          <xs:annotation>
1037
+            <xs:documentation>File encoding.</xs:documentation>
1038
+          </xs:annotation>
1039
+        </xs:attribute>
1040
+        <xs:attribute name="lineEnding" type="LineEndingMode">
1041
+          <xs:annotation>
1042
+            <xs:documentation>Line ending mode.</xs:documentation>
1043
+          </xs:annotation>
1044
+        </xs:attribute>
1045
+        <xs:attribute name="maxArchiveFiles" type="xs:integer">
1046
+          <xs:annotation>
1047
+            <xs:documentation>Maximum number of archive files that should be kept.</xs:documentation>
1048
+          </xs:annotation>
1049
+        </xs:attribute>
1050
+        <xs:attribute name="archiveNumbering" type="NLog.Targets.ArchiveNumberingMode">
1051
+          <xs:annotation>
1052
+            <xs:documentation>Way file archives are numbered.</xs:documentation>
1053
+          </xs:annotation>
1054
+        </xs:attribute>
1055
+        <xs:attribute name="archiveFileName" type="SimpleLayoutAttribute">
1056
+          <xs:annotation>
1057
+            <xs:documentation>Name of the file to be used for an archive.</xs:documentation>
1058
+          </xs:annotation>
1059
+        </xs:attribute>
1060
+        <xs:attribute name="archiveEvery" type="NLog.Targets.FileArchivePeriod">
1061
+          <xs:annotation>
1062
+            <xs:documentation>Indicates whether to automatically archive log files every time the specified time passes.</xs:documentation>
1063
+          </xs:annotation>
1064
+        </xs:attribute>
1065
+        <xs:attribute name="archiveAboveSize" type="xs:long">
1066
+          <xs:annotation>
1067
+            <xs:documentation>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: </xs:documentation>
1068
+          </xs:annotation>
1069
+        </xs:attribute>
1070
+        <xs:attribute name="enableArchiveFileCompression" type="xs:boolean">
1071
+          <xs:annotation>
1072
+            <xs:documentation>Indicates whether to compress archive files into the zip archive format.</xs:documentation>
1073
+          </xs:annotation>
1074
+        </xs:attribute>
1075
+        <xs:attribute name="forceManaged" type="xs:boolean">
1076
+          <xs:annotation>
1077
+            <xs:documentation>Gets or set a value indicating whether a managed file stream is forced, instead of used the native implementation.</xs:documentation>
1078
+          </xs:annotation>
1079
+        </xs:attribute>
1080
+        <xs:attribute name="fileAttributes" type="NLog.Targets.Win32FileAttributes">
1081
+          <xs:annotation>
1082
+            <xs:documentation>File attributes (Windows only).</xs:documentation>
1083
+          </xs:annotation>
1084
+        </xs:attribute>
1085
+        <xs:attribute name="replaceFileContentsOnEachWrite" type="xs:boolean">
1086
+          <xs:annotation>
1087
+            <xs:documentation>Indicates whether to replace file contents on each write instead of appending log message at the end.</xs:documentation>
1088
+          </xs:annotation>
1089
+        </xs:attribute>
1090
+        <xs:attribute name="fileName" type="SimpleLayoutAttribute">
1091
+          <xs:annotation>
1092
+            <xs:documentation>Name of the file to write to.</xs:documentation>
1093
+          </xs:annotation>
1094
+        </xs:attribute>
1095
+        <xs:attribute name="archiveDateFormat" type="xs:string">
1096
+          <xs:annotation>
1097
+            <xs:documentation>Value specifying the date format to use when archving files.</xs:documentation>
1098
+          </xs:annotation>
1099
+        </xs:attribute>
1100
+        <xs:attribute name="archiveOldFileOnStartup" type="xs:boolean">
1101
+          <xs:annotation>
1102
+            <xs:documentation>Indicates whether to archive old log file on startup.</xs:documentation>
1103
+          </xs:annotation>
1104
+        </xs:attribute>
1105
+        <xs:attribute name="createDirs" type="xs:boolean">
1106
+          <xs:annotation>
1107
+            <xs:documentation>Indicates whether to create directories if they do not exist.</xs:documentation>
1108
+          </xs:annotation>
1109
+        </xs:attribute>
1110
+        <xs:attribute name="deleteOldFileOnStartup" type="xs:boolean">
1111
+          <xs:annotation>
1112
+            <xs:documentation>Indicates whether to delete old log file on startup.</xs:documentation>
1113
+          </xs:annotation>
1114
+        </xs:attribute>
1115
+        <xs:attribute name="enableFileDelete" type="xs:boolean">
1116
+          <xs:annotation>
1117
+            <xs:documentation>Indicates whether to enable log file(s) to be deleted.</xs:documentation>
1118
+          </xs:annotation>
1119
+        </xs:attribute>
1120
+        <xs:attribute name="openFileCacheTimeout" type="xs:integer">
1121
+          <xs:annotation>
1122
+            <xs:documentation>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.</xs:documentation>
1123
+          </xs:annotation>
1124
+        </xs:attribute>
1125
+        <xs:attribute name="networkWrites" type="xs:boolean">
1126
+          <xs:annotation>
1127
+            <xs:documentation>Indicates whether concurrent writes to the log file by multiple processes on different network hosts.</xs:documentation>
1128
+          </xs:annotation>
1129
+        </xs:attribute>
1130
+        <xs:attribute name="maxLogFilenames" type="xs:integer">
1131
+          <xs:annotation>
1132
+            <xs:documentation>Maximum number of log filenames that should be stored as existing.</xs:documentation>
1133
+          </xs:annotation>
1134
+        </xs:attribute>
1135
+        <xs:attribute name="keepFileOpen" type="xs:boolean">
1136
+          <xs:annotation>
1137
+            <xs:documentation>Indicates whether to keep log file open instead of opening and closing it on each logging event.</xs:documentation>
1138
+          </xs:annotation>
1139
+        </xs:attribute>
1140
+        <xs:attribute name="concurrentWrites" type="xs:boolean">
1141
+          <xs:annotation>
1142
+            <xs:documentation>Indicates whether concurrent writes to the log file by multiple processes on the same host.</xs:documentation>
1143
+          </xs:annotation>
1144
+        </xs:attribute>
1145
+        <xs:attribute name="concurrentWriteAttempts" type="xs:integer">
1146
+          <xs:annotation>
1147
+            <xs:documentation>Number of times the write is appended on the file before NLog discards the log message.</xs:documentation>
1148
+          </xs:annotation>
1149
+        </xs:attribute>
1150
+        <xs:attribute name="concurrentWriteAttemptDelay" type="xs:integer">
1151
+          <xs:annotation>
1152
+            <xs:documentation>Delay in milliseconds to wait before attempting to write to the file again.</xs:documentation>
1153
+          </xs:annotation>
1154
+        </xs:attribute>
1155
+        <xs:attribute name="autoFlush" type="xs:boolean">
1156
+          <xs:annotation>
1157
+            <xs:documentation>Indicates whether to automatically flush the file buffers after each log message.</xs:documentation>
1158
+          </xs:annotation>
1159
+        </xs:attribute>
1160
+        <xs:attribute name="openFileCacheSize" type="xs:integer">
1161
+          <xs:annotation>
1162
+            <xs:documentation>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).</xs:documentation>
1163
+          </xs:annotation>
1164
+        </xs:attribute>
1165
+        <xs:attribute name="bufferSize" type="xs:integer">
1166
+          <xs:annotation>
1167
+            <xs:documentation>Log file buffer size in bytes.</xs:documentation>
1168
+          </xs:annotation>
1169
+        </xs:attribute>
1170
+      </xs:extension>
1171
+    </xs:complexContent>
1172
+  </xs:complexType>
1173
+  <xs:simpleType name="NLog.Targets.ArchiveNumberingMode">
1174
+    <xs:restriction base="xs:string">
1175
+      <xs:enumeration value="Sequence" />
1176
+      <xs:enumeration value="Rolling" />
1177
+      <xs:enumeration value="Date" />
1178
+      <xs:enumeration value="DateAndSequence" />
1179
+    </xs:restriction>
1180
+  </xs:simpleType>
1181
+  <xs:simpleType name="NLog.Targets.FileArchivePeriod">
1182
+    <xs:restriction base="xs:string">
1183
+      <xs:enumeration value="None" />
1184
+      <xs:enumeration value="Year" />
1185
+      <xs:enumeration value="Month" />
1186
+      <xs:enumeration value="Day" />
1187
+      <xs:enumeration value="Hour" />
1188
+      <xs:enumeration value="Minute" />
1189
+    </xs:restriction>
1190
+  </xs:simpleType>
1191
+  <xs:simpleType name="NLog.Targets.Win32FileAttributes">
1192
+    <xs:restriction base="xs:string">
1193
+      <xs:enumeration value="ReadOnly" />
1194
+      <xs:enumeration value="Hidden" />
1195
+      <xs:enumeration value="System" />
1196
+      <xs:enumeration value="Archive" />
1197
+      <xs:enumeration value="Device" />
1198
+      <xs:enumeration value="Normal" />
1199
+      <xs:enumeration value="Temporary" />
1200
+      <xs:enumeration value="SparseFile" />
1201
+      <xs:enumeration value="ReparsePoint" />
1202
+      <xs:enumeration value="Compressed" />
1203
+      <xs:enumeration value="NotContentIndexed" />
1204
+      <xs:enumeration value="Encrypted" />
1205
+      <xs:enumeration value="WriteThrough" />
1206
+      <xs:enumeration value="NoBuffering" />
1207
+      <xs:enumeration value="DeleteOnClose" />
1208
+      <xs:enumeration value="PosixSemantics" />
1209
+    </xs:restriction>
1210
+  </xs:simpleType>
1211
+  <xs:complexType name="FilteringWrapper">
1212
+    <xs:complexContent>
1213
+      <xs:extension base="WrapperTargetBase">
1214
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
1215
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
1216
+          <xs:element name="condition" minOccurs="0" maxOccurs="1" type="Condition" />
1217
+        </xs:choice>
1218
+        <xs:attribute name="name" type="xs:string">
1219
+          <xs:annotation>
1220
+            <xs:documentation>Name of the target.</xs:documentation>
1221
+          </xs:annotation>
1222
+        </xs:attribute>
1223
+        <xs:attribute name="condition" type="Condition">
1224
+          <xs:annotation>
1225
+            <xs:documentation>Condition expression. Log events who meet this condition will be forwarded to the wrapped target.</xs:documentation>
1226
+          </xs:annotation>
1227
+        </xs:attribute>
1228
+      </xs:extension>
1229
+    </xs:complexContent>
1230
+  </xs:complexType>
1231
+  <xs:complexType name="ImpersonatingWrapper">
1232
+    <xs:complexContent>
1233
+      <xs:extension base="WrapperTargetBase">
1234
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
1235
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
1236
+          <xs:element name="domain" minOccurs="0" maxOccurs="1" type="xs:string" />
1237
+          <xs:element name="impersonationLevel" minOccurs="0" maxOccurs="1" type="NLog.Targets.Wrappers.SecurityImpersonationLevel" />
1238
+          <xs:element name="logOnProvider" minOccurs="0" maxOccurs="1" type="NLog.Targets.Wrappers.LogOnProviderType" />
1239
+          <xs:element name="logOnType" minOccurs="0" maxOccurs="1" type="NLog.Targets.Wrappers.SecurityLogOnType" />
1240
+          <xs:element name="password" minOccurs="0" maxOccurs="1" type="xs:string" />
1241
+          <xs:element name="revertToSelf" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1242
+          <xs:element name="userName" minOccurs="0" maxOccurs="1" type="xs:string" />
1243
+        </xs:choice>
1244
+        <xs:attribute name="name" type="xs:string">
1245
+          <xs:annotation>
1246
+            <xs:documentation>Name of the target.</xs:documentation>
1247
+          </xs:annotation>
1248
+        </xs:attribute>
1249
+        <xs:attribute name="domain" type="xs:string">
1250
+          <xs:annotation>
1251
+            <xs:documentation>Windows domain name to change context to.</xs:documentation>
1252
+          </xs:annotation>
1253
+        </xs:attribute>
1254
+        <xs:attribute name="impersonationLevel" type="NLog.Targets.Wrappers.SecurityImpersonationLevel">
1255
+          <xs:annotation>
1256
+            <xs:documentation>Required impersonation level.</xs:documentation>
1257
+          </xs:annotation>
1258
+        </xs:attribute>
1259
+        <xs:attribute name="logOnProvider" type="NLog.Targets.Wrappers.LogOnProviderType">
1260
+          <xs:annotation>
1261
+            <xs:documentation>Type of the logon provider.</xs:documentation>
1262
+          </xs:annotation>
1263
+        </xs:attribute>
1264
+        <xs:attribute name="logOnType" type="NLog.Targets.Wrappers.SecurityLogOnType">
1265
+          <xs:annotation>
1266
+            <xs:documentation>Logon Type.</xs:documentation>
1267
+          </xs:annotation>
1268
+        </xs:attribute>
1269
+        <xs:attribute name="password" type="xs:string">
1270
+          <xs:annotation>
1271
+            <xs:documentation>User account password.</xs:documentation>
1272
+          </xs:annotation>
1273
+        </xs:attribute>
1274
+        <xs:attribute name="revertToSelf" type="xs:boolean">
1275
+          <xs:annotation>
1276
+            <xs:documentation>Indicates whether to revert to the credentials of the process instead of impersonating another user.</xs:documentation>
1277
+          </xs:annotation>
1278
+        </xs:attribute>
1279
+        <xs:attribute name="userName" type="xs:string">
1280
+          <xs:annotation>
1281
+            <xs:documentation>Username to change context to.</xs:documentation>
1282
+          </xs:annotation>
1283
+        </xs:attribute>
1284
+      </xs:extension>
1285
+    </xs:complexContent>
1286
+  </xs:complexType>
1287
+  <xs:simpleType name="NLog.Targets.Wrappers.SecurityImpersonationLevel">
1288
+    <xs:restriction base="xs:string">
1289
+      <xs:enumeration value="Anonymous" />
1290
+      <xs:enumeration value="Identification" />
1291
+      <xs:enumeration value="Impersonation" />
1292
+      <xs:enumeration value="Delegation" />
1293
+    </xs:restriction>
1294
+  </xs:simpleType>
1295
+  <xs:simpleType name="NLog.Targets.Wrappers.LogOnProviderType">
1296
+    <xs:restriction base="xs:string">
1297
+      <xs:enumeration value="Default" />
1298
+    </xs:restriction>
1299
+  </xs:simpleType>
1300
+  <xs:simpleType name="NLog.Targets.Wrappers.SecurityLogOnType">
1301
+    <xs:restriction base="xs:string">
1302
+      <xs:enumeration value="Interactive" />
1303
+      <xs:enumeration value="Network" />
1304
+      <xs:enumeration value="Batch" />
1305
+      <xs:enumeration value="Service" />
1306
+      <xs:enumeration value="NetworkClearText" />
1307
+      <xs:enumeration value="NewCredentials" />
1308
+    </xs:restriction>
1309
+  </xs:simpleType>
1310
+  <xs:complexType name="LogReceiverService">
1311
+    <xs:complexContent>
1312
+      <xs:extension base="Target">
1313
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
1314
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
1315
+          <xs:element name="endpointAddress" minOccurs="0" maxOccurs="1" type="xs:string" />
1316
+          <xs:element name="endpointConfigurationName" minOccurs="0" maxOccurs="1" type="xs:string" />
1317
+          <xs:element name="useOneWayContract" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1318
+          <xs:element name="clientId" minOccurs="0" maxOccurs="1" type="Layout" />
1319
+          <xs:element name="includeEventProperties" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1320
+          <xs:element name="parameter" minOccurs="0" maxOccurs="unbounded" type="NLog.Targets.MethodCallParameter" />
1321
+          <xs:element name="useBinaryEncoding" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1322
+        </xs:choice>
1323
+        <xs:attribute name="name" type="xs:string">
1324
+          <xs:annotation>
1325
+            <xs:documentation>Name of the target.</xs:documentation>
1326
+          </xs:annotation>
1327
+        </xs:attribute>
1328
+        <xs:attribute name="endpointAddress" type="xs:string">
1329
+          <xs:annotation>
1330
+            <xs:documentation>Endpoint address.</xs:documentation>
1331
+          </xs:annotation>
1332
+        </xs:attribute>
1333
+        <xs:attribute name="endpointConfigurationName" type="xs:string">
1334
+          <xs:annotation>
1335
+            <xs:documentation>Name of the endpoint configuration in WCF configuration file.</xs:documentation>
1336
+          </xs:annotation>
1337
+        </xs:attribute>
1338
+        <xs:attribute name="useOneWayContract" type="xs:boolean">
1339
+          <xs:annotation>
1340
+            <xs:documentation>Indicates whether to use a WCF service contract that is one way (fire and forget) or two way (request-reply)</xs:documentation>
1341
+          </xs:annotation>
1342
+        </xs:attribute>
1343
+        <xs:attribute name="clientId" type="SimpleLayoutAttribute">
1344
+          <xs:annotation>
1345
+            <xs:documentation>Client ID.</xs:documentation>
1346
+          </xs:annotation>
1347
+        </xs:attribute>
1348
+        <xs:attribute name="includeEventProperties" type="xs:boolean">
1349
+          <xs:annotation>
1350
+            <xs:documentation>Indicates whether to include per-event properties in the payload sent to the server.</xs:documentation>
1351
+          </xs:annotation>
1352
+        </xs:attribute>
1353
+        <xs:attribute name="useBinaryEncoding" type="xs:boolean">
1354
+          <xs:annotation>
1355
+            <xs:documentation>Indicates whether to use binary message encoding.</xs:documentation>
1356
+          </xs:annotation>
1357
+        </xs:attribute>
1358
+      </xs:extension>
1359
+    </xs:complexContent>
1360
+  </xs:complexType>
1361
+  <xs:complexType name="NLog.Targets.MethodCallParameter">
1362
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
1363
+      <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
1364
+      <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
1365
+      <xs:element name="type" minOccurs="0" maxOccurs="1" type="xs:string" />
1366
+    </xs:choice>
1367
+    <xs:attribute name="layout" type="SimpleLayoutAttribute">
1368
+      <xs:annotation>
1369
+        <xs:documentation>Layout that should be use to calculate the value for the parameter.</xs:documentation>
1370
+      </xs:annotation>
1371
+    </xs:attribute>
1372
+    <xs:attribute name="name" type="xs:string">
1373
+      <xs:annotation>
1374
+        <xs:documentation>Name of the parameter.</xs:documentation>
1375
+      </xs:annotation>
1376
+    </xs:attribute>
1377
+    <xs:attribute name="type" type="xs:string">
1378
+      <xs:annotation>
1379
+        <xs:documentation>Type of the parameter.</xs:documentation>
1380
+      </xs:annotation>
1381
+    </xs:attribute>
1382
+  </xs:complexType>
1383
+  <xs:complexType name="Mail">
1384
+    <xs:complexContent>
1385
+      <xs:extension base="Target">
1386
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
1387
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
1388
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
1389
+          <xs:element name="header" minOccurs="0" maxOccurs="1" type="Layout" />
1390
+          <xs:element name="footer" minOccurs="0" maxOccurs="1" type="Layout" />
1391
+          <xs:element name="html" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1392
+          <xs:element name="encoding" minOccurs="0" maxOccurs="1" type="xs:string" />
1393
+          <xs:element name="addNewLines" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1394
+          <xs:element name="cc" minOccurs="0" maxOccurs="1" type="Layout" />
1395
+          <xs:element name="to" minOccurs="0" maxOccurs="1" type="Layout" />
1396
+          <xs:element name="bcc" minOccurs="0" maxOccurs="1" type="Layout" />
1397
+          <xs:element name="body" minOccurs="0" maxOccurs="1" type="Layout" />
1398
+          <xs:element name="subject" minOccurs="0" maxOccurs="1" type="Layout" />
1399
+          <xs:element name="from" minOccurs="0" maxOccurs="1" type="Layout" />
1400
+          <xs:element name="replaceNewlineWithBrTagInHtml" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1401
+          <xs:element name="priority" minOccurs="0" maxOccurs="1" type="Layout" />
1402
+          <xs:element name="timeout" minOccurs="0" maxOccurs="1" type="xs:integer" />
1403
+          <xs:element name="smtpServer" minOccurs="0" maxOccurs="1" type="Layout" />
1404
+          <xs:element name="smtpAuthentication" minOccurs="0" maxOccurs="1" type="NLog.Targets.SmtpAuthenticationMode" />
1405
+          <xs:element name="smtpUserName" minOccurs="0" maxOccurs="1" type="Layout" />
1406
+          <xs:element name="smtpPassword" minOccurs="0" maxOccurs="1" type="Layout" />
1407
+          <xs:element name="enableSsl" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1408
+          <xs:element name="smtpPort" minOccurs="0" maxOccurs="1" type="xs:integer" />
1409
+          <xs:element name="useSystemNetMailSettings" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1410
+          <xs:element name="pickupDirectoryLocation" minOccurs="0" maxOccurs="1" type="xs:string" />
1411
+          <xs:element name="deliveryMethod" minOccurs="0" maxOccurs="1" type="System.Net.Mail.SmtpDeliveryMethod" />
1412
+        </xs:choice>
1413
+        <xs:attribute name="name" type="xs:string">
1414
+          <xs:annotation>
1415
+            <xs:documentation>Name of the target.</xs:documentation>
1416
+          </xs:annotation>
1417
+        </xs:attribute>
1418
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
1419
+          <xs:annotation>
1420
+            <xs:documentation>Text to be rendered.</xs:documentation>
1421
+          </xs:annotation>
1422
+        </xs:attribute>
1423
+        <xs:attribute name="header" type="SimpleLayoutAttribute">
1424
+          <xs:annotation>
1425
+            <xs:documentation>Header.</xs:documentation>
1426
+          </xs:annotation>
1427
+        </xs:attribute>
1428
+        <xs:attribute name="footer" type="SimpleLayoutAttribute">
1429
+          <xs:annotation>
1430
+            <xs:documentation>Footer.</xs:documentation>
1431
+          </xs:annotation>
1432
+        </xs:attribute>
1433
+        <xs:attribute name="html" type="xs:boolean">
1434
+          <xs:annotation>
1435
+            <xs:documentation>Indicates whether to send message as HTML instead of plain text.</xs:documentation>
1436
+          </xs:annotation>
1437
+        </xs:attribute>
1438
+        <xs:attribute name="encoding" type="xs:string">
1439
+          <xs:annotation>
1440
+            <xs:documentation>Encoding to be used for sending e-mail.</xs:documentation>
1441
+          </xs:annotation>
1442
+        </xs:attribute>
1443
+        <xs:attribute name="addNewLines" type="xs:boolean">
1444
+          <xs:annotation>
1445
+            <xs:documentation>Indicates whether to add new lines between log entries.</xs:documentation>
1446
+          </xs:annotation>
1447
+        </xs:attribute>
1448
+        <xs:attribute name="cc" type="SimpleLayoutAttribute">
1449
+          <xs:annotation>
1450
+            <xs:documentation>CC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>
1451
+          </xs:annotation>
1452
+        </xs:attribute>
1453
+        <xs:attribute name="to" type="SimpleLayoutAttribute">
1454
+          <xs:annotation>
1455
+            <xs:documentation>Recipients' email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>
1456
+          </xs:annotation>
1457
+        </xs:attribute>
1458
+        <xs:attribute name="bcc" type="SimpleLayoutAttribute">
1459
+          <xs:annotation>
1460
+            <xs:documentation>BCC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com).</xs:documentation>
1461
+          </xs:annotation>
1462
+        </xs:attribute>
1463
+        <xs:attribute name="body" type="SimpleLayoutAttribute">
1464
+          <xs:annotation>
1465
+            <xs:documentation>Mail message body (repeated for each log message send in one mail).</xs:documentation>
1466
+          </xs:annotation>
1467
+        </xs:attribute>
1468
+        <xs:attribute name="subject" type="SimpleLayoutAttribute">
1469
+          <xs:annotation>
1470
+            <xs:documentation>Mail subject.</xs:documentation>
1471
+          </xs:annotation>
1472
+        </xs:attribute>
1473
+        <xs:attribute name="from" type="SimpleLayoutAttribute">
1474
+          <xs:annotation>
1475
+            <xs:documentation>Sender's email address (e.g. joe@domain.com).</xs:documentation>
1476
+          </xs:annotation>
1477
+        </xs:attribute>
1478
+        <xs:attribute name="replaceNewlineWithBrTagInHtml" type="xs:boolean">
1479
+          <xs:annotation>
1480
+            <xs:documentation>Indicates whether NewLine characters in the body should be replaced with  tags.</xs:documentation>
1481
+          </xs:annotation>
1482
+        </xs:attribute>
1483
+        <xs:attribute name="priority" type="SimpleLayoutAttribute">
1484
+          <xs:annotation>
1485
+            <xs:documentation>Priority used for sending mails.</xs:documentation>
1486
+          </xs:annotation>
1487
+        </xs:attribute>
1488
+        <xs:attribute name="timeout" type="xs:integer">
1489
+          <xs:annotation>
1490
+            <xs:documentation>Indicates the SMTP client timeout.</xs:documentation>
1491
+          </xs:annotation>
1492
+        </xs:attribute>
1493
+        <xs:attribute name="smtpServer" type="SimpleLayoutAttribute">
1494
+          <xs:annotation>
1495
+            <xs:documentation>SMTP Server to be used for sending.</xs:documentation>
1496
+          </xs:annotation>
1497
+        </xs:attribute>
1498
+        <xs:attribute name="smtpAuthentication" type="NLog.Targets.SmtpAuthenticationMode">
1499
+          <xs:annotation>
1500
+            <xs:documentation>SMTP Authentication mode.</xs:documentation>
1501
+          </xs:annotation>
1502
+        </xs:attribute>
1503
+        <xs:attribute name="smtpUserName" type="SimpleLayoutAttribute">
1504
+          <xs:annotation>
1505
+            <xs:documentation>Username used to connect to SMTP server (used when SmtpAuthentication is set to "basic").</xs:documentation>
1506
+          </xs:annotation>
1507
+        </xs:attribute>
1508
+        <xs:attribute name="smtpPassword" type="SimpleLayoutAttribute">
1509
+          <xs:annotation>
1510
+            <xs:documentation>Password used to authenticate against SMTP server (used when SmtpAuthentication is set to "basic").</xs:documentation>
1511
+          </xs:annotation>
1512
+        </xs:attribute>
1513
+        <xs:attribute name="enableSsl" type="xs:boolean">
1514
+          <xs:annotation>
1515
+            <xs:documentation>Indicates whether SSL (secure sockets layer) should be used when communicating with SMTP server.</xs:documentation>
1516
+          </xs:annotation>
1517
+        </xs:attribute>
1518
+        <xs:attribute name="smtpPort" type="xs:integer">
1519
+          <xs:annotation>
1520
+            <xs:documentation>Port number that SMTP Server is listening on.</xs:documentation>
1521
+          </xs:annotation>
1522
+        </xs:attribute>
1523
+        <xs:attribute name="useSystemNetMailSettings" type="xs:boolean">
1524
+          <xs:annotation>
1525
+            <xs:documentation>Indicates whether the default Settings from System.Net.MailSettings should be used.</xs:documentation>
1526
+          </xs:annotation>
1527
+        </xs:attribute>
1528
+        <xs:attribute name="pickupDirectoryLocation" type="xs:string">
1529
+          <xs:annotation>
1530
+            <xs:documentation>Folder where applications save mail messages to be processed by the local SMTP server.</xs:documentation>
1531
+          </xs:annotation>
1532
+        </xs:attribute>
1533
+        <xs:attribute name="deliveryMethod" type="System.Net.Mail.SmtpDeliveryMethod">
1534
+          <xs:annotation>
1535
+            <xs:documentation>Specifies how outgoing email messages will be handled.</xs:documentation>
1536
+          </xs:annotation>
1537
+        </xs:attribute>
1538
+      </xs:extension>
1539
+    </xs:complexContent>
1540
+  </xs:complexType>
1541
+  <xs:simpleType name="NLog.Targets.SmtpAuthenticationMode">
1542
+    <xs:restriction base="xs:string">
1543
+      <xs:enumeration value="None" />
1544
+      <xs:enumeration value="Basic" />
1545
+      <xs:enumeration value="Ntlm" />
1546
+    </xs:restriction>
1547
+  </xs:simpleType>
1548
+  <xs:simpleType name="System.Net.Mail.SmtpDeliveryMethod">
1549
+    <xs:restriction base="xs:string">
1550
+      <xs:enumeration value="Network" />
1551
+      <xs:enumeration value="SpecifiedPickupDirectory" />
1552
+      <xs:enumeration value="PickupDirectoryFromIis" />
1553
+    </xs:restriction>
1554
+  </xs:simpleType>
1555
+  <xs:complexType name="Memory">
1556
+    <xs:complexContent>
1557
+      <xs:extension base="Target">
1558
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
1559
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
1560
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
1561
+        </xs:choice>
1562
+        <xs:attribute name="name" type="xs:string">
1563
+          <xs:annotation>
1564
+            <xs:documentation>Name of the target.</xs:documentation>
1565
+          </xs:annotation>
1566
+        </xs:attribute>
1567
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
1568
+          <xs:annotation>
1569
+            <xs:documentation>Layout used to format log messages.</xs:documentation>
1570
+          </xs:annotation>
1571
+        </xs:attribute>
1572
+      </xs:extension>
1573
+    </xs:complexContent>
1574
+  </xs:complexType>
1575
+  <xs:complexType name="MSMQ">
1576
+    <xs:complexContent>
1577
+      <xs:extension base="Target">
1578
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
1579
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
1580
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
1581
+          <xs:element name="encoding" minOccurs="0" maxOccurs="1" type="xs:string" />
1582
+          <xs:element name="useXmlEncoding" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1583
+          <xs:element name="checkIfQueueExists" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1584
+          <xs:element name="createQueueIfNotExists" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1585
+          <xs:element name="label" minOccurs="0" maxOccurs="1" type="Layout" />
1586
+          <xs:element name="queue" minOccurs="0" maxOccurs="1" type="Layout" />
1587
+          <xs:element name="recoverable" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1588
+        </xs:choice>
1589
+        <xs:attribute name="name" type="xs:string">
1590
+          <xs:annotation>
1591
+            <xs:documentation>Name of the target.</xs:documentation>
1592
+          </xs:annotation>
1593
+        </xs:attribute>
1594
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
1595
+          <xs:annotation>
1596
+            <xs:documentation>Layout used to format log messages.</xs:documentation>
1597
+          </xs:annotation>
1598
+        </xs:attribute>
1599
+        <xs:attribute name="encoding" type="xs:string">
1600
+          <xs:annotation>
1601
+            <xs:documentation>Encoding to be used when writing text to the queue.</xs:documentation>
1602
+          </xs:annotation>
1603
+        </xs:attribute>
1604
+        <xs:attribute name="useXmlEncoding" type="xs:boolean">
1605
+          <xs:annotation>
1606
+            <xs:documentation>Indicates whether to use the XML format when serializing message. This will also disable creating queues.</xs:documentation>
1607
+          </xs:annotation>
1608
+        </xs:attribute>
1609
+        <xs:attribute name="checkIfQueueExists" type="xs:boolean">
1610
+          <xs:annotation>
1611
+            <xs:documentation>Indicates whether to check if a queue exists before writing to it.</xs:documentation>
1612
+          </xs:annotation>
1613
+        </xs:attribute>
1614
+        <xs:attribute name="createQueueIfNotExists" type="xs:boolean">
1615
+          <xs:annotation>
1616
+            <xs:documentation>Indicates whether to create the queue if it doesn't exists.</xs:documentation>
1617
+          </xs:annotation>
1618
+        </xs:attribute>
1619
+        <xs:attribute name="label" type="SimpleLayoutAttribute">
1620
+          <xs:annotation>
1621
+            <xs:documentation>Label to associate with each message.</xs:documentation>
1622
+          </xs:annotation>
1623
+        </xs:attribute>
1624
+        <xs:attribute name="queue" type="SimpleLayoutAttribute">
1625
+          <xs:annotation>
1626
+            <xs:documentation>Name of the queue to write to.</xs:documentation>
1627
+          </xs:annotation>
1628
+        </xs:attribute>
1629
+        <xs:attribute name="recoverable" type="xs:boolean">
1630
+          <xs:annotation>
1631
+            <xs:documentation>Indicates whether to use recoverable messages (with guaranteed delivery).</xs:documentation>
1632
+          </xs:annotation>
1633
+        </xs:attribute>
1634
+      </xs:extension>
1635
+    </xs:complexContent>
1636
+  </xs:complexType>
1637
+  <xs:complexType name="MethodCall">
1638
+    <xs:complexContent>
1639
+      <xs:extension base="Target">
1640
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
1641
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
1642
+          <xs:element name="className" minOccurs="0" maxOccurs="1" type="xs:string" />
1643
+          <xs:element name="methodName" minOccurs="0" maxOccurs="1" type="xs:string" />
1644
+          <xs:element name="parameter" minOccurs="0" maxOccurs="unbounded" type="NLog.Targets.MethodCallParameter" />
1645
+        </xs:choice>
1646
+        <xs:attribute name="name" type="xs:string">
1647
+          <xs:annotation>
1648
+            <xs:documentation>Name of the target.</xs:documentation>
1649
+          </xs:annotation>
1650
+        </xs:attribute>
1651
+        <xs:attribute name="className" type="xs:string">
1652
+          <xs:annotation>
1653
+            <xs:documentation>Class name.</xs:documentation>
1654
+          </xs:annotation>
1655
+        </xs:attribute>
1656
+        <xs:attribute name="methodName" type="xs:string">
1657
+          <xs:annotation>
1658
+            <xs:documentation>Method name. The method must be public and static.</xs:documentation>
1659
+          </xs:annotation>
1660
+        </xs:attribute>
1661
+      </xs:extension>
1662
+    </xs:complexContent>
1663
+  </xs:complexType>
1664
+  <xs:complexType name="Network">
1665
+    <xs:complexContent>
1666
+      <xs:extension base="Target">
1667
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
1668
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
1669
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
1670
+          <xs:element name="encoding" minOccurs="0" maxOccurs="1" type="xs:string" />
1671
+          <xs:element name="maxMessageSize" minOccurs="0" maxOccurs="1" type="xs:integer" />
1672
+          <xs:element name="newLine" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1673
+          <xs:element name="onConnectionOverflow" minOccurs="0" maxOccurs="1" type="NLog.Targets.NetworkTargetConnectionsOverflowAction" />
1674
+          <xs:element name="onOverflow" minOccurs="0" maxOccurs="1" type="NLog.Targets.NetworkTargetOverflowAction" />
1675
+          <xs:element name="address" minOccurs="0" maxOccurs="1" type="Layout" />
1676
+          <xs:element name="connectionCacheSize" minOccurs="0" maxOccurs="1" type="xs:integer" />
1677
+          <xs:element name="keepConnection" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1678
+          <xs:element name="maxConnections" minOccurs="0" maxOccurs="1" type="xs:integer" />
1679
+          <xs:element name="maxQueueSize" minOccurs="0" maxOccurs="1" type="xs:integer" />
1680
+        </xs:choice>
1681
+        <xs:attribute name="name" type="xs:string">
1682
+          <xs:annotation>
1683
+            <xs:documentation>Name of the target.</xs:documentation>
1684
+          </xs:annotation>
1685
+        </xs:attribute>
1686
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
1687
+          <xs:annotation>
1688
+            <xs:documentation>Layout used to format log messages.</xs:documentation>
1689
+          </xs:annotation>
1690
+        </xs:attribute>
1691
+        <xs:attribute name="encoding" type="xs:string">
1692
+          <xs:annotation>
1693
+            <xs:documentation>Encoding to be used.</xs:documentation>
1694
+          </xs:annotation>
1695
+        </xs:attribute>
1696
+        <xs:attribute name="maxMessageSize" type="xs:integer">
1697
+          <xs:annotation>
1698
+            <xs:documentation>Maximum message size in bytes.</xs:documentation>
1699
+          </xs:annotation>
1700
+        </xs:attribute>
1701
+        <xs:attribute name="newLine" type="xs:boolean">
1702
+          <xs:annotation>
1703
+            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>
1704
+          </xs:annotation>
1705
+        </xs:attribute>
1706
+        <xs:attribute name="onConnectionOverflow" type="NLog.Targets.NetworkTargetConnectionsOverflowAction">
1707
+          <xs:annotation>
1708
+            <xs:documentation>Action that should be taken if the will be more connections than .</xs:documentation>
1709
+          </xs:annotation>
1710
+        </xs:attribute>
1711
+        <xs:attribute name="onOverflow" type="NLog.Targets.NetworkTargetOverflowAction">
1712
+          <xs:annotation>
1713
+            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>
1714
+          </xs:annotation>
1715
+        </xs:attribute>
1716
+        <xs:attribute name="address" type="SimpleLayoutAttribute">
1717
+          <xs:annotation>
1718
+            <xs:documentation>Network address.</xs:documentation>
1719
+          </xs:annotation>
1720
+        </xs:attribute>
1721
+        <xs:attribute name="connectionCacheSize" type="xs:integer">
1722
+          <xs:annotation>
1723
+            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>
1724
+          </xs:annotation>
1725
+        </xs:attribute>
1726
+        <xs:attribute name="keepConnection" type="xs:boolean">
1727
+          <xs:annotation>
1728
+            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>
1729
+          </xs:annotation>
1730
+        </xs:attribute>
1731
+        <xs:attribute name="maxConnections" type="xs:integer">
1732
+          <xs:annotation>
1733
+            <xs:documentation>Maximum current connections. 0 = no maximum.</xs:documentation>
1734
+          </xs:annotation>
1735
+        </xs:attribute>
1736
+        <xs:attribute name="maxQueueSize" type="xs:integer">
1737
+          <xs:annotation>
1738
+            <xs:documentation>Maximum queue size.</xs:documentation>
1739
+          </xs:annotation>
1740
+        </xs:attribute>
1741
+      </xs:extension>
1742
+    </xs:complexContent>
1743
+  </xs:complexType>
1744
+  <xs:complexType name="NLogViewer">
1745
+    <xs:complexContent>
1746
+      <xs:extension base="Target">
1747
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
1748
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
1749
+          <xs:element name="encoding" minOccurs="0" maxOccurs="1" type="xs:string" />
1750
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
1751
+          <xs:element name="maxMessageSize" minOccurs="0" maxOccurs="1" type="xs:integer" />
1752
+          <xs:element name="newLine" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1753
+          <xs:element name="onConnectionOverflow" minOccurs="0" maxOccurs="1" type="NLog.Targets.NetworkTargetConnectionsOverflowAction" />
1754
+          <xs:element name="onOverflow" minOccurs="0" maxOccurs="1" type="NLog.Targets.NetworkTargetOverflowAction" />
1755
+          <xs:element name="keepConnection" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1756
+          <xs:element name="connectionCacheSize" minOccurs="0" maxOccurs="1" type="xs:integer" />
1757
+          <xs:element name="maxConnections" minOccurs="0" maxOccurs="1" type="xs:integer" />
1758
+          <xs:element name="address" minOccurs="0" maxOccurs="1" type="Layout" />
1759
+          <xs:element name="maxQueueSize" minOccurs="0" maxOccurs="1" type="xs:integer" />
1760
+          <xs:element name="includeSourceInfo" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1761
+          <xs:element name="ndcItemSeparator" minOccurs="0" maxOccurs="1" type="xs:string" />
1762
+          <xs:element name="parameter" minOccurs="0" maxOccurs="unbounded" type="NLog.Targets.NLogViewerParameterInfo" />
1763
+          <xs:element name="includeNdc" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1764
+          <xs:element name="includeCallSite" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1765
+          <xs:element name="appInfo" minOccurs="0" maxOccurs="1" type="xs:string" />
1766
+          <xs:element name="includeNLogData" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1767
+          <xs:element name="includeMdc" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1768
+        </xs:choice>
1769
+        <xs:attribute name="name" type="xs:string">
1770
+          <xs:annotation>
1771
+            <xs:documentation>Name of the target.</xs:documentation>
1772
+          </xs:annotation>
1773
+        </xs:attribute>
1774
+        <xs:attribute name="encoding" type="xs:string">
1775
+          <xs:annotation>
1776
+            <xs:documentation>Encoding to be used.</xs:documentation>
1777
+          </xs:annotation>
1778
+        </xs:attribute>
1779
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
1780
+          <xs:annotation>
1781
+            <xs:documentation>Instance of  that is used to format log messages.</xs:documentation>
1782
+          </xs:annotation>
1783
+        </xs:attribute>
1784
+        <xs:attribute name="maxMessageSize" type="xs:integer">
1785
+          <xs:annotation>
1786
+            <xs:documentation>Maximum message size in bytes.</xs:documentation>
1787
+          </xs:annotation>
1788
+        </xs:attribute>
1789
+        <xs:attribute name="newLine" type="xs:boolean">
1790
+          <xs:annotation>
1791
+            <xs:documentation>Indicates whether to append newline at the end of log message.</xs:documentation>
1792
+          </xs:annotation>
1793
+        </xs:attribute>
1794
+        <xs:attribute name="onConnectionOverflow" type="NLog.Targets.NetworkTargetConnectionsOverflowAction">
1795
+          <xs:annotation>
1796
+            <xs:documentation>Action that should be taken if the will be more connections than .</xs:documentation>
1797
+          </xs:annotation>
1798
+        </xs:attribute>
1799
+        <xs:attribute name="onOverflow" type="NLog.Targets.NetworkTargetOverflowAction">
1800
+          <xs:annotation>
1801
+            <xs:documentation>Action that should be taken if the message is larger than maxMessageSize.</xs:documentation>
1802
+          </xs:annotation>
1803
+        </xs:attribute>
1804
+        <xs:attribute name="keepConnection" type="xs:boolean">
1805
+          <xs:annotation>
1806
+            <xs:documentation>Indicates whether to keep connection open whenever possible.</xs:documentation>
1807
+          </xs:annotation>
1808
+        </xs:attribute>
1809
+        <xs:attribute name="connectionCacheSize" type="xs:integer">
1810
+          <xs:annotation>
1811
+            <xs:documentation>Size of the connection cache (number of connections which are kept alive).</xs:documentation>
1812
+          </xs:annotation>
1813
+        </xs:attribute>
1814
+        <xs:attribute name="maxConnections" type="xs:integer">
1815
+          <xs:annotation>
1816
+            <xs:documentation>Maximum current connections. 0 = no maximum.</xs:documentation>
1817
+          </xs:annotation>
1818
+        </xs:attribute>
1819
+        <xs:attribute name="address" type="SimpleLayoutAttribute">
1820
+          <xs:annotation>
1821
+            <xs:documentation>Network address.</xs:documentation>
1822
+          </xs:annotation>
1823
+        </xs:attribute>
1824
+        <xs:attribute name="maxQueueSize" type="xs:integer">
1825
+          <xs:annotation>
1826
+            <xs:documentation>Maximum queue size.</xs:documentation>
1827
+          </xs:annotation>
1828
+        </xs:attribute>
1829
+        <xs:attribute name="includeSourceInfo" type="xs:boolean">
1830
+          <xs:annotation>
1831
+            <xs:documentation>Indicates whether to include source info (file name and line number) in the information sent over the network.</xs:documentation>
1832
+          </xs:annotation>
1833
+        </xs:attribute>
1834
+        <xs:attribute name="ndcItemSeparator" type="xs:string">
1835
+          <xs:annotation>
1836
+            <xs:documentation>NDC item separator.</xs:documentation>
1837
+          </xs:annotation>
1838
+        </xs:attribute>
1839
+        <xs:attribute name="includeNdc" type="xs:boolean">
1840
+          <xs:annotation>
1841
+            <xs:documentation>Indicates whether to include  stack contents.</xs:documentation>
1842
+          </xs:annotation>
1843
+        </xs:attribute>
1844
+        <xs:attribute name="includeCallSite" type="xs:boolean">
1845
+          <xs:annotation>
1846
+            <xs:documentation>Indicates whether to include call site (class and method name) in the information sent over the network.</xs:documentation>
1847
+          </xs:annotation>
1848
+        </xs:attribute>
1849
+        <xs:attribute name="appInfo" type="xs:string">
1850
+          <xs:annotation>
1851
+            <xs:documentation>AppInfo field. By default it's the friendly name of the current AppDomain.</xs:documentation>
1852
+          </xs:annotation>
1853
+        </xs:attribute>
1854
+        <xs:attribute name="includeNLogData" type="xs:boolean">
1855
+          <xs:annotation>
1856
+            <xs:documentation>Indicates whether to include NLog-specific extensions to log4j schema.</xs:documentation>
1857
+          </xs:annotation>
1858
+        </xs:attribute>
1859
+        <xs:attribute name="includeMdc" type="xs:boolean">
1860
+          <xs:annotation>
1861
+            <xs:documentation>Indicates whether to include  dictionary contents.</xs:documentation>
1862
+          </xs:annotation>
1863
+        </xs:attribute>
1864
+      </xs:extension>
1865
+    </xs:complexContent>
1866
+  </xs:complexType>
1867
+  <xs:complexType name="Null">
1868
+    <xs:complexContent>
1869
+      <xs:extension base="Target">
1870
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
1871
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
1872
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
1873
+          <xs:element name="formatMessage" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1874
+        </xs:choice>
1875
+        <xs:attribute name="name" type="xs:string">
1876
+          <xs:annotation>
1877
+            <xs:documentation>Name of the target.</xs:documentation>
1878
+          </xs:annotation>
1879
+        </xs:attribute>
1880
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
1881
+          <xs:annotation>
1882
+            <xs:documentation>Layout used to format log messages.</xs:documentation>
1883
+          </xs:annotation>
1884
+        </xs:attribute>
1885
+        <xs:attribute name="formatMessage" type="xs:boolean">
1886
+          <xs:annotation>
1887
+            <xs:documentation>Indicates whether to perform layout calculation.</xs:documentation>
1888
+          </xs:annotation>
1889
+        </xs:attribute>
1890
+      </xs:extension>
1891
+    </xs:complexContent>
1892
+  </xs:complexType>
1893
+  <xs:complexType name="OutputDebugString">
1894
+    <xs:complexContent>
1895
+      <xs:extension base="Target">
1896
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
1897
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
1898
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
1899
+        </xs:choice>
1900
+        <xs:attribute name="name" type="xs:string">
1901
+          <xs:annotation>
1902
+            <xs:documentation>Name of the target.</xs:documentation>
1903
+          </xs:annotation>
1904
+        </xs:attribute>
1905
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
1906
+          <xs:annotation>
1907
+            <xs:documentation>Layout used to format log messages.</xs:documentation>
1908
+          </xs:annotation>
1909
+        </xs:attribute>
1910
+      </xs:extension>
1911
+    </xs:complexContent>
1912
+  </xs:complexType>
1913
+  <xs:complexType name="PerfCounter">
1914
+    <xs:complexContent>
1915
+      <xs:extension base="Target">
1916
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
1917
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
1918
+          <xs:element name="autoCreate" minOccurs="0" maxOccurs="1" type="xs:boolean" />
1919
+          <xs:element name="categoryName" minOccurs="0" maxOccurs="1" type="xs:string" />
1920
+          <xs:element name="counterHelp" minOccurs="0" maxOccurs="1" type="xs:string" />
1921
+          <xs:element name="counterName" minOccurs="0" maxOccurs="1" type="xs:string" />
1922
+          <xs:element name="counterType" minOccurs="0" maxOccurs="1" type="System.Diagnostics.PerformanceCounterType" />
1923
+          <xs:element name="incrementValue" minOccurs="0" maxOccurs="1" type="Layout" />
1924
+          <xs:element name="instanceName" minOccurs="0" maxOccurs="1" type="xs:string" />
1925
+        </xs:choice>
1926
+        <xs:attribute name="name" type="xs:string">
1927
+          <xs:annotation>
1928
+            <xs:documentation>Name of the target.</xs:documentation>
1929
+          </xs:annotation>
1930
+        </xs:attribute>
1931
+        <xs:attribute name="autoCreate" type="xs:boolean">
1932
+          <xs:annotation>
1933
+            <xs:documentation>Indicates whether performance counter should be automatically created.</xs:documentation>
1934
+          </xs:annotation>
1935
+        </xs:attribute>
1936
+        <xs:attribute name="categoryName" type="xs:string">
1937
+          <xs:annotation>
1938
+            <xs:documentation>Name of the performance counter category.</xs:documentation>
1939
+          </xs:annotation>
1940
+        </xs:attribute>
1941
+        <xs:attribute name="counterHelp" type="xs:string">
1942
+          <xs:annotation>
1943
+            <xs:documentation>Counter help text.</xs:documentation>
1944
+          </xs:annotation>
1945
+        </xs:attribute>
1946
+        <xs:attribute name="counterName" type="xs:string">
1947
+          <xs:annotation>
1948
+            <xs:documentation>Name of the performance counter.</xs:documentation>
1949
+          </xs:annotation>
1950
+        </xs:attribute>
1951
+        <xs:attribute name="counterType" type="System.Diagnostics.PerformanceCounterType">
1952
+          <xs:annotation>
1953
+            <xs:documentation>Performance counter type.</xs:documentation>
1954
+          </xs:annotation>
1955
+        </xs:attribute>
1956
+        <xs:attribute name="incrementValue" type="SimpleLayoutAttribute">
1957
+          <xs:annotation>
1958
+            <xs:documentation>The value by which to increment the counter.</xs:documentation>
1959
+          </xs:annotation>
1960
+        </xs:attribute>
1961
+        <xs:attribute name="instanceName" type="xs:string">
1962
+          <xs:annotation>
1963
+            <xs:documentation>Performance counter instance name.</xs:documentation>
1964
+          </xs:annotation>
1965
+        </xs:attribute>
1966
+      </xs:extension>
1967
+    </xs:complexContent>
1968
+  </xs:complexType>
1969
+  <xs:simpleType name="System.Diagnostics.PerformanceCounterType">
1970
+    <xs:restriction base="xs:string">
1971
+      <xs:enumeration value="NumberOfItems32" />
1972
+      <xs:enumeration value="NumberOfItems64" />
1973
+      <xs:enumeration value="NumberOfItemsHEX32" />
1974
+      <xs:enumeration value="NumberOfItemsHEX64" />
1975
+      <xs:enumeration value="RateOfCountsPerSecond32" />
1976
+      <xs:enumeration value="RateOfCountsPerSecond64" />
1977
+      <xs:enumeration value="CountPerTimeInterval32" />
1978
+      <xs:enumeration value="CountPerTimeInterval64" />
1979
+      <xs:enumeration value="RawFraction" />
1980
+      <xs:enumeration value="RawBase" />
1981
+      <xs:enumeration value="AverageTimer32" />
1982
+      <xs:enumeration value="AverageBase" />
1983
+      <xs:enumeration value="AverageCount64" />
1984
+      <xs:enumeration value="SampleFraction" />
1985
+      <xs:enumeration value="SampleCounter" />
1986
+      <xs:enumeration value="SampleBase" />
1987
+      <xs:enumeration value="CounterTimer" />
1988
+      <xs:enumeration value="CounterTimerInverse" />
1989
+      <xs:enumeration value="Timer100Ns" />
1990
+      <xs:enumeration value="Timer100NsInverse" />
1991
+      <xs:enumeration value="ElapsedTime" />
1992
+      <xs:enumeration value="CounterMultiTimer" />
1993
+      <xs:enumeration value="CounterMultiTimerInverse" />
1994
+      <xs:enumeration value="CounterMultiTimer100Ns" />
1995
+      <xs:enumeration value="CounterMultiTimer100NsInverse" />
1996
+      <xs:enumeration value="CounterMultiBase" />
1997
+      <xs:enumeration value="CounterDelta32" />
1998
+      <xs:enumeration value="CounterDelta64" />
1999
+    </xs:restriction>
2000
+  </xs:simpleType>
2001
+  <xs:complexType name="PostFilteringWrapper">
2002
+    <xs:complexContent>
2003
+      <xs:extension base="WrapperTargetBase">
2004
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2005
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
2006
+          <xs:element name="defaultFilter" minOccurs="0" maxOccurs="1" type="Condition" />
2007
+          <xs:element name="when" minOccurs="0" maxOccurs="unbounded" type="NLog.Targets.Wrappers.FilteringRule" />
2008
+        </xs:choice>
2009
+        <xs:attribute name="name" type="xs:string">
2010
+          <xs:annotation>
2011
+            <xs:documentation>Name of the target.</xs:documentation>
2012
+          </xs:annotation>
2013
+        </xs:attribute>
2014
+        <xs:attribute name="defaultFilter" type="Condition">
2015
+          <xs:annotation>
2016
+            <xs:documentation>Default filter to be applied when no specific rule matches.</xs:documentation>
2017
+          </xs:annotation>
2018
+        </xs:attribute>
2019
+      </xs:extension>
2020
+    </xs:complexContent>
2021
+  </xs:complexType>
2022
+  <xs:complexType name="NLog.Targets.Wrappers.FilteringRule">
2023
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
2024
+      <xs:element name="exists" minOccurs="0" maxOccurs="1" type="Condition" />
2025
+      <xs:element name="filter" minOccurs="0" maxOccurs="1" type="Condition" />
2026
+    </xs:choice>
2027
+    <xs:attribute name="exists" type="Condition">
2028
+      <xs:annotation>
2029
+        <xs:documentation>Condition to be tested.</xs:documentation>
2030
+      </xs:annotation>
2031
+    </xs:attribute>
2032
+    <xs:attribute name="filter" type="Condition">
2033
+      <xs:annotation>
2034
+        <xs:documentation>Resulting filter to be applied when the condition matches.</xs:documentation>
2035
+      </xs:annotation>
2036
+    </xs:attribute>
2037
+  </xs:complexType>
2038
+  <xs:complexType name="RandomizeGroup">
2039
+    <xs:complexContent>
2040
+      <xs:extension base="CompoundTargetBase">
2041
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2042
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
2043
+        </xs:choice>
2044
+        <xs:attribute name="name" type="xs:string">
2045
+          <xs:annotation>
2046
+            <xs:documentation>Name of the target.</xs:documentation>
2047
+          </xs:annotation>
2048
+        </xs:attribute>
2049
+      </xs:extension>
2050
+    </xs:complexContent>
2051
+  </xs:complexType>
2052
+  <xs:complexType name="RepeatingWrapper">
2053
+    <xs:complexContent>
2054
+      <xs:extension base="WrapperTargetBase">
2055
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2056
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
2057
+          <xs:element name="repeatCount" minOccurs="0" maxOccurs="1" type="xs:integer" />
2058
+        </xs:choice>
2059
+        <xs:attribute name="name" type="xs:string">
2060
+          <xs:annotation>
2061
+            <xs:documentation>Name of the target.</xs:documentation>
2062
+          </xs:annotation>
2063
+        </xs:attribute>
2064
+        <xs:attribute name="repeatCount" type="xs:integer">
2065
+          <xs:annotation>
2066
+            <xs:documentation>Number of times to repeat each log message.</xs:documentation>
2067
+          </xs:annotation>
2068
+        </xs:attribute>
2069
+      </xs:extension>
2070
+    </xs:complexContent>
2071
+  </xs:complexType>
2072
+  <xs:complexType name="RetryingWrapper">
2073
+    <xs:complexContent>
2074
+      <xs:extension base="WrapperTargetBase">
2075
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2076
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
2077
+          <xs:element name="retryCount" minOccurs="0" maxOccurs="1" type="xs:integer" />
2078
+          <xs:element name="retryDelayMilliseconds" minOccurs="0" maxOccurs="1" type="xs:integer" />
2079
+        </xs:choice>
2080
+        <xs:attribute name="name" type="xs:string">
2081
+          <xs:annotation>
2082
+            <xs:documentation>Name of the target.</xs:documentation>
2083
+          </xs:annotation>
2084
+        </xs:attribute>
2085
+        <xs:attribute name="retryCount" type="xs:integer">
2086
+          <xs:annotation>
2087
+            <xs:documentation>Number of retries that should be attempted on the wrapped target in case of a failure.</xs:documentation>
2088
+          </xs:annotation>
2089
+        </xs:attribute>
2090
+        <xs:attribute name="retryDelayMilliseconds" type="xs:integer">
2091
+          <xs:annotation>
2092
+            <xs:documentation>Time to wait between retries in milliseconds.</xs:documentation>
2093
+          </xs:annotation>
2094
+        </xs:attribute>
2095
+      </xs:extension>
2096
+    </xs:complexContent>
2097
+  </xs:complexType>
2098
+  <xs:complexType name="RoundRobinGroup">
2099
+    <xs:complexContent>
2100
+      <xs:extension base="CompoundTargetBase">
2101
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2102
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
2103
+        </xs:choice>
2104
+        <xs:attribute name="name" type="xs:string">
2105
+          <xs:annotation>
2106
+            <xs:documentation>Name of the target.</xs:documentation>
2107
+          </xs:annotation>
2108
+        </xs:attribute>
2109
+      </xs:extension>
2110
+    </xs:complexContent>
2111
+  </xs:complexType>
2112
+  <xs:complexType name="SplitGroup">
2113
+    <xs:complexContent>
2114
+      <xs:extension base="CompoundTargetBase">
2115
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2116
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
2117
+        </xs:choice>
2118
+        <xs:attribute name="name" type="xs:string">
2119
+          <xs:annotation>
2120
+            <xs:documentation>Name of the target.</xs:documentation>
2121
+          </xs:annotation>
2122
+        </xs:attribute>
2123
+      </xs:extension>
2124
+    </xs:complexContent>
2125
+  </xs:complexType>
2126
+  <xs:complexType name="Trace">
2127
+    <xs:complexContent>
2128
+      <xs:extension base="Target">
2129
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2130
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
2131
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
2132
+        </xs:choice>
2133
+        <xs:attribute name="name" type="xs:string">
2134
+          <xs:annotation>
2135
+            <xs:documentation>Name of the target.</xs:documentation>
2136
+          </xs:annotation>
2137
+        </xs:attribute>
2138
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
2139
+          <xs:annotation>
2140
+            <xs:documentation>Layout used to format log messages.</xs:documentation>
2141
+          </xs:annotation>
2142
+        </xs:attribute>
2143
+      </xs:extension>
2144
+    </xs:complexContent>
2145
+  </xs:complexType>
2146
+  <xs:complexType name="WebService">
2147
+    <xs:complexContent>
2148
+      <xs:extension base="Target">
2149
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2150
+          <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
2151
+          <xs:element name="includeBOM" minOccurs="0" maxOccurs="1" type="xs:boolean" />
2152
+          <xs:element name="parameter" minOccurs="0" maxOccurs="unbounded" type="NLog.Targets.MethodCallParameter" />
2153
+          <xs:element name="encoding" minOccurs="0" maxOccurs="1" type="xs:string" />
2154
+          <xs:element name="methodName" minOccurs="0" maxOccurs="1" type="xs:string" />
2155
+          <xs:element name="namespace" minOccurs="0" maxOccurs="1" type="xs:string" />
2156
+          <xs:element name="protocol" minOccurs="0" maxOccurs="1" type="NLog.Targets.WebServiceProtocol" />
2157
+          <xs:element name="url" minOccurs="0" maxOccurs="1" type="xs:anyURI" />
2158
+        </xs:choice>
2159
+        <xs:attribute name="name" type="xs:string">
2160
+          <xs:annotation>
2161
+            <xs:documentation>Name of the target.</xs:documentation>
2162
+          </xs:annotation>
2163
+        </xs:attribute>
2164
+        <xs:attribute name="includeBOM" type="xs:boolean">
2165
+          <xs:annotation>
2166
+            <xs:documentation>Should we include the BOM (Byte-order-mark) for UTF? Influences the  property. This will only work for UTF-8.</xs:documentation>
2167
+          </xs:annotation>
2168
+        </xs:attribute>
2169
+        <xs:attribute name="encoding" type="xs:string">
2170
+          <xs:annotation>
2171
+            <xs:documentation>Encoding.</xs:documentation>
2172
+          </xs:annotation>
2173
+        </xs:attribute>
2174
+        <xs:attribute name="methodName" type="xs:string">
2175
+          <xs:annotation>
2176
+            <xs:documentation>Web service method name. Only used with Soap.</xs:documentation>
2177
+          </xs:annotation>
2178
+        </xs:attribute>
2179
+        <xs:attribute name="namespace" type="xs:string">
2180
+          <xs:annotation>
2181
+            <xs:documentation>Web service namespace. Only used with Soap.</xs:documentation>
2182
+          </xs:annotation>
2183
+        </xs:attribute>
2184
+        <xs:attribute name="protocol" type="NLog.Targets.WebServiceProtocol">
2185
+          <xs:annotation>
2186
+            <xs:documentation>Protocol to be used when calling web service.</xs:documentation>
2187
+          </xs:annotation>
2188
+        </xs:attribute>
2189
+        <xs:attribute name="url" type="xs:anyURI">
2190
+          <xs:annotation>
2191
+            <xs:documentation>Web service URL.</xs:documentation>
2192
+          </xs:annotation>
2193
+        </xs:attribute>
2194
+      </xs:extension>
2195
+    </xs:complexContent>
2196
+  </xs:complexType>
2197
+  <xs:simpleType name="NLog.Targets.WebServiceProtocol">
2198
+    <xs:restriction base="xs:string">
2199
+      <xs:enumeration value="Soap11" />
2200
+      <xs:enumeration value="Soap12" />
2201
+      <xs:enumeration value="HttpPost" />
2202
+      <xs:enumeration value="HttpGet" />
2203
+    </xs:restriction>
2204
+  </xs:simpleType>
2205
+  <xs:complexType name="CsvLayout">
2206
+    <xs:complexContent>
2207
+      <xs:extension base="Layout">
2208
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2209
+          <xs:element name="footer" minOccurs="0" maxOccurs="1" type="Layout" />
2210
+          <xs:element name="header" minOccurs="0" maxOccurs="1" type="Layout" />
2211
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
2212
+          <xs:element name="column" minOccurs="0" maxOccurs="unbounded" type="NLog.Layouts.CsvColumn" />
2213
+          <xs:element name="customColumnDelimiter" minOccurs="0" maxOccurs="1" type="xs:string" />
2214
+          <xs:element name="delimiter" minOccurs="0" maxOccurs="1" type="NLog.Layouts.CsvColumnDelimiterMode" />
2215
+          <xs:element name="quoteChar" minOccurs="0" maxOccurs="1" type="xs:string" />
2216
+          <xs:element name="quoting" minOccurs="0" maxOccurs="1" type="NLog.Layouts.CsvQuotingMode" />
2217
+          <xs:element name="withHeader" minOccurs="0" maxOccurs="1" type="xs:boolean" />
2218
+        </xs:choice>
2219
+        <xs:attribute name="footer" type="SimpleLayoutAttribute">
2220
+          <xs:annotation>
2221
+            <xs:documentation>Footer layout.</xs:documentation>
2222
+          </xs:annotation>
2223
+        </xs:attribute>
2224
+        <xs:attribute name="header" type="SimpleLayoutAttribute">
2225
+          <xs:annotation>
2226
+            <xs:documentation>Header layout.</xs:documentation>
2227
+          </xs:annotation>
2228
+        </xs:attribute>
2229
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
2230
+          <xs:annotation>
2231
+            <xs:documentation>Body layout (can be repeated multiple times).</xs:documentation>
2232
+          </xs:annotation>
2233
+        </xs:attribute>
2234
+        <xs:attribute name="customColumnDelimiter" type="xs:string">
2235
+          <xs:annotation>
2236
+            <xs:documentation>Custom column delimiter value (valid when ColumnDelimiter is set to 'Custom').</xs:documentation>
2237
+          </xs:annotation>
2238
+        </xs:attribute>
2239
+        <xs:attribute name="delimiter" type="NLog.Layouts.CsvColumnDelimiterMode">
2240
+          <xs:annotation>
2241
+            <xs:documentation>Column delimiter.</xs:documentation>
2242
+          </xs:annotation>
2243
+        </xs:attribute>
2244
+        <xs:attribute name="quoteChar" type="xs:string">
2245
+          <xs:annotation>
2246
+            <xs:documentation>Quote Character.</xs:documentation>
2247
+          </xs:annotation>
2248
+        </xs:attribute>
2249
+        <xs:attribute name="quoting" type="NLog.Layouts.CsvQuotingMode">
2250
+          <xs:annotation>
2251
+            <xs:documentation>Quoting mode.</xs:documentation>
2252
+          </xs:annotation>
2253
+        </xs:attribute>
2254
+        <xs:attribute name="withHeader" type="xs:boolean">
2255
+          <xs:annotation>
2256
+            <xs:documentation>Indicates whether CVS should include header.</xs:documentation>
2257
+          </xs:annotation>
2258
+        </xs:attribute>
2259
+      </xs:extension>
2260
+    </xs:complexContent>
2261
+  </xs:complexType>
2262
+  <xs:simpleType name="NLog.Layouts.CsvColumnDelimiterMode">
2263
+    <xs:restriction base="xs:string">
2264
+      <xs:enumeration value="Auto" />
2265
+      <xs:enumeration value="Comma" />
2266
+      <xs:enumeration value="Semicolon" />
2267
+      <xs:enumeration value="Tab" />
2268
+      <xs:enumeration value="Pipe" />
2269
+      <xs:enumeration value="Space" />
2270
+      <xs:enumeration value="Custom" />
2271
+    </xs:restriction>
2272
+  </xs:simpleType>
2273
+  <xs:simpleType name="NLog.Layouts.CsvQuotingMode">
2274
+    <xs:restriction base="xs:string">
2275
+      <xs:enumeration value="All" />
2276
+      <xs:enumeration value="Nothing" />
2277
+      <xs:enumeration value="Auto" />
2278
+    </xs:restriction>
2279
+  </xs:simpleType>
2280
+  <xs:complexType name="NLog.Layouts.CsvColumn">
2281
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
2282
+      <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
2283
+      <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
2284
+    </xs:choice>
2285
+    <xs:attribute name="layout" type="SimpleLayoutAttribute">
2286
+      <xs:annotation>
2287
+        <xs:documentation>Layout of the column.</xs:documentation>
2288
+      </xs:annotation>
2289
+    </xs:attribute>
2290
+    <xs:attribute name="name" type="xs:string">
2291
+      <xs:annotation>
2292
+        <xs:documentation>Name of the column.</xs:documentation>
2293
+      </xs:annotation>
2294
+    </xs:attribute>
2295
+  </xs:complexType>
2296
+  <xs:complexType name="JsonLayout">
2297
+    <xs:complexContent>
2298
+      <xs:extension base="Layout">
2299
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2300
+          <xs:element name="attribute" minOccurs="0" maxOccurs="unbounded" type="NLog.Layouts.JsonAttribute" />
2301
+          <xs:element name="suppressSpaces" minOccurs="0" maxOccurs="1" type="xs:boolean" />
2302
+        </xs:choice>
2303
+        <xs:attribute name="suppressSpaces" type="xs:boolean">
2304
+          <xs:annotation>
2305
+            <xs:documentation>Option to suppress the extra spaces in the output json</xs:documentation>
2306
+          </xs:annotation>
2307
+        </xs:attribute>
2308
+      </xs:extension>
2309
+    </xs:complexContent>
2310
+  </xs:complexType>
2311
+  <xs:complexType name="NLog.Layouts.JsonAttribute">
2312
+    <xs:choice minOccurs="0" maxOccurs="unbounded">
2313
+      <xs:element name="encode" minOccurs="0" maxOccurs="1" type="xs:boolean" />
2314
+      <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
2315
+      <xs:element name="name" minOccurs="0" maxOccurs="1" type="xs:string" />
2316
+    </xs:choice>
2317
+    <xs:attribute name="encode" type="xs:boolean">
2318
+      <xs:annotation>
2319
+        <xs:documentation>Determines wether or not this attribute will be Json encoded.</xs:documentation>
2320
+      </xs:annotation>
2321
+    </xs:attribute>
2322
+    <xs:attribute name="layout" type="SimpleLayoutAttribute">
2323
+      <xs:annotation>
2324
+        <xs:documentation>Layout that will be rendered as the attribute's value.</xs:documentation>
2325
+      </xs:annotation>
2326
+    </xs:attribute>
2327
+    <xs:attribute name="name" type="xs:string">
2328
+      <xs:annotation>
2329
+        <xs:documentation>Name of the attribute.</xs:documentation>
2330
+      </xs:annotation>
2331
+    </xs:attribute>
2332
+  </xs:complexType>
2333
+  <xs:complexType name="LayoutWithHeaderAndFooter">
2334
+    <xs:complexContent>
2335
+      <xs:extension base="Layout">
2336
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2337
+          <xs:element name="footer" minOccurs="0" maxOccurs="1" type="Layout" />
2338
+          <xs:element name="header" minOccurs="0" maxOccurs="1" type="Layout" />
2339
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
2340
+        </xs:choice>
2341
+        <xs:attribute name="footer" type="SimpleLayoutAttribute">
2342
+          <xs:annotation>
2343
+            <xs:documentation>Footer layout.</xs:documentation>
2344
+          </xs:annotation>
2345
+        </xs:attribute>
2346
+        <xs:attribute name="header" type="SimpleLayoutAttribute">
2347
+          <xs:annotation>
2348
+            <xs:documentation>Header layout.</xs:documentation>
2349
+          </xs:annotation>
2350
+        </xs:attribute>
2351
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
2352
+          <xs:annotation>
2353
+            <xs:documentation>Body layout (can be repeated multiple times).</xs:documentation>
2354
+          </xs:annotation>
2355
+        </xs:attribute>
2356
+      </xs:extension>
2357
+    </xs:complexContent>
2358
+  </xs:complexType>
2359
+  <xs:complexType name="Log4JXmlEventLayout">
2360
+    <xs:complexContent>
2361
+      <xs:extension base="Layout">
2362
+        <xs:choice minOccurs="0" maxOccurs="unbounded" />
2363
+      </xs:extension>
2364
+    </xs:complexContent>
2365
+  </xs:complexType>
2366
+  <xs:complexType name="SimpleLayout">
2367
+    <xs:complexContent>
2368
+      <xs:extension base="Layout">
2369
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2370
+          <xs:element name="text" minOccurs="0" maxOccurs="1" type="xs:string" />
2371
+        </xs:choice>
2372
+        <xs:attribute name="text" type="xs:string">
2373
+          <xs:annotation>
2374
+            <xs:documentation>Layout text.</xs:documentation>
2375
+          </xs:annotation>
2376
+        </xs:attribute>
2377
+      </xs:extension>
2378
+    </xs:complexContent>
2379
+  </xs:complexType>
2380
+  <xs:complexType name="when">
2381
+    <xs:complexContent>
2382
+      <xs:extension base="Filter">
2383
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2384
+          <xs:element name="action" minOccurs="0" maxOccurs="1" type="FilterResult" />
2385
+          <xs:element name="condition" minOccurs="0" maxOccurs="1" type="Condition" />
2386
+        </xs:choice>
2387
+        <xs:attribute name="action" type="FilterResult">
2388
+          <xs:annotation>
2389
+            <xs:documentation>Action to be taken when filter matches.</xs:documentation>
2390
+          </xs:annotation>
2391
+        </xs:attribute>
2392
+        <xs:attribute name="condition" type="Condition">
2393
+          <xs:annotation>
2394
+            <xs:documentation>Condition expression.</xs:documentation>
2395
+          </xs:annotation>
2396
+        </xs:attribute>
2397
+      </xs:extension>
2398
+    </xs:complexContent>
2399
+  </xs:complexType>
2400
+  <xs:simpleType name="FilterResult">
2401
+    <xs:restriction base="xs:string">
2402
+      <xs:enumeration value="Neutral" />
2403
+      <xs:enumeration value="Log" />
2404
+      <xs:enumeration value="Ignore" />
2405
+      <xs:enumeration value="LogFinal" />
2406
+      <xs:enumeration value="IgnoreFinal" />
2407
+    </xs:restriction>
2408
+  </xs:simpleType>
2409
+  <xs:complexType name="whenContains">
2410
+    <xs:complexContent>
2411
+      <xs:extension base="Filter">
2412
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2413
+          <xs:element name="action" minOccurs="0" maxOccurs="1" type="FilterResult" />
2414
+          <xs:element name="ignoreCase" minOccurs="0" maxOccurs="1" type="xs:boolean" />
2415
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
2416
+          <xs:element name="substring" minOccurs="0" maxOccurs="1" type="xs:string" />
2417
+        </xs:choice>
2418
+        <xs:attribute name="action" type="FilterResult">
2419
+          <xs:annotation>
2420
+            <xs:documentation>Action to be taken when filter matches.</xs:documentation>
2421
+          </xs:annotation>
2422
+        </xs:attribute>
2423
+        <xs:attribute name="ignoreCase" type="xs:boolean">
2424
+          <xs:annotation>
2425
+            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>
2426
+          </xs:annotation>
2427
+        </xs:attribute>
2428
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
2429
+          <xs:annotation>
2430
+            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>
2431
+          </xs:annotation>
2432
+        </xs:attribute>
2433
+        <xs:attribute name="substring" type="xs:string">
2434
+          <xs:annotation>
2435
+            <xs:documentation>Substring to be matched.</xs:documentation>
2436
+          </xs:annotation>
2437
+        </xs:attribute>
2438
+      </xs:extension>
2439
+    </xs:complexContent>
2440
+  </xs:complexType>
2441
+  <xs:complexType name="whenEqual">
2442
+    <xs:complexContent>
2443
+      <xs:extension base="Filter">
2444
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2445
+          <xs:element name="action" minOccurs="0" maxOccurs="1" type="FilterResult" />
2446
+          <xs:element name="compareTo" minOccurs="0" maxOccurs="1" type="xs:string" />
2447
+          <xs:element name="ignoreCase" minOccurs="0" maxOccurs="1" type="xs:boolean" />
2448
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
2449
+        </xs:choice>
2450
+        <xs:attribute name="action" type="FilterResult">
2451
+          <xs:annotation>
2452
+            <xs:documentation>Action to be taken when filter matches.</xs:documentation>
2453
+          </xs:annotation>
2454
+        </xs:attribute>
2455
+        <xs:attribute name="compareTo" type="xs:string">
2456
+          <xs:annotation>
2457
+            <xs:documentation>String to compare the layout to.</xs:documentation>
2458
+          </xs:annotation>
2459
+        </xs:attribute>
2460
+        <xs:attribute name="ignoreCase" type="xs:boolean">
2461
+          <xs:annotation>
2462
+            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>
2463
+          </xs:annotation>
2464
+        </xs:attribute>
2465
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
2466
+          <xs:annotation>
2467
+            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>
2468
+          </xs:annotation>
2469
+        </xs:attribute>
2470
+      </xs:extension>
2471
+    </xs:complexContent>
2472
+  </xs:complexType>
2473
+  <xs:complexType name="whenNotContains">
2474
+    <xs:complexContent>
2475
+      <xs:extension base="Filter">
2476
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2477
+          <xs:element name="action" minOccurs="0" maxOccurs="1" type="FilterResult" />
2478
+          <xs:element name="ignoreCase" minOccurs="0" maxOccurs="1" type="xs:boolean" />
2479
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
2480
+          <xs:element name="substring" minOccurs="0" maxOccurs="1" type="xs:string" />
2481
+        </xs:choice>
2482
+        <xs:attribute name="action" type="FilterResult">
2483
+          <xs:annotation>
2484
+            <xs:documentation>Action to be taken when filter matches.</xs:documentation>
2485
+          </xs:annotation>
2486
+        </xs:attribute>
2487
+        <xs:attribute name="ignoreCase" type="xs:boolean">
2488
+          <xs:annotation>
2489
+            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>
2490
+          </xs:annotation>
2491
+        </xs:attribute>
2492
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
2493
+          <xs:annotation>
2494
+            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>
2495
+          </xs:annotation>
2496
+        </xs:attribute>
2497
+        <xs:attribute name="substring" type="xs:string">
2498
+          <xs:annotation>
2499
+            <xs:documentation>Substring to be matched.</xs:documentation>
2500
+          </xs:annotation>
2501
+        </xs:attribute>
2502
+      </xs:extension>
2503
+    </xs:complexContent>
2504
+  </xs:complexType>
2505
+  <xs:complexType name="whenNotEqual">
2506
+    <xs:complexContent>
2507
+      <xs:extension base="Filter">
2508
+        <xs:choice minOccurs="0" maxOccurs="unbounded">
2509
+          <xs:element name="action" minOccurs="0" maxOccurs="1" type="FilterResult" />
2510
+          <xs:element name="compareTo" minOccurs="0" maxOccurs="1" type="xs:string" />
2511
+          <xs:element name="ignoreCase" minOccurs="0" maxOccurs="1" type="xs:boolean" />
2512
+          <xs:element name="layout" minOccurs="0" maxOccurs="1" type="Layout" />
2513
+        </xs:choice>
2514
+        <xs:attribute name="action" type="FilterResult">
2515
+          <xs:annotation>
2516
+            <xs:documentation>Action to be taken when filter matches.</xs:documentation>
2517
+          </xs:annotation>
2518
+        </xs:attribute>
2519
+        <xs:attribute name="compareTo" type="xs:string">
2520
+          <xs:annotation>
2521
+            <xs:documentation>String to compare the layout to.</xs:documentation>
2522
+          </xs:annotation>
2523
+        </xs:attribute>
2524
+        <xs:attribute name="ignoreCase" type="xs:boolean">
2525
+          <xs:annotation>
2526
+            <xs:documentation>Indicates whether to ignore case when comparing strings.</xs:documentation>
2527
+          </xs:annotation>
2528
+        </xs:attribute>
2529
+        <xs:attribute name="layout" type="SimpleLayoutAttribute">
2530
+          <xs:annotation>
2531
+            <xs:documentation>Layout to be used to filter log messages.</xs:documentation>
2532
+          </xs:annotation>
2533
+        </xs:attribute>
2534
+      </xs:extension>
2535
+    </xs:complexContent>
2536
+  </xs:complexType>
2537
+  <xs:complexType name="AccurateLocal">
2538
+    <xs:complexContent>
2539
+      <xs:extension base="TimeSource">
2540
+        <xs:choice minOccurs="0" maxOccurs="unbounded" />
2541
+      </xs:extension>
2542
+    </xs:complexContent>
2543
+  </xs:complexType>
2544
+  <xs:complexType name="AccurateUTC">
2545
+    <xs:complexContent>
2546
+      <xs:extension base="TimeSource">
2547
+        <xs:choice minOccurs="0" maxOccurs="unbounded" />
2548
+      </xs:extension>
2549
+    </xs:complexContent>
2550
+  </xs:complexType>
2551
+  <xs:complexType name="FastLocal">
2552
+    <xs:complexContent>
2553
+      <xs:extension base="TimeSource">
2554
+        <xs:choice minOccurs="0" maxOccurs="unbounded" />
2555
+      </xs:extension>
2556
+    </xs:complexContent>
2557
+  </xs:complexType>
2558
+  <xs:complexType name="FastUTC">
2559
+    <xs:complexContent>
2560
+      <xs:extension base="TimeSource">
2561
+        <xs:choice minOccurs="0" maxOccurs="unbounded" />
2562
+      </xs:extension>
2563
+    </xs:complexContent>
2564
+  </xs:complexType>
2565
+</xs:schema>

+ 46 - 11
B2Uploader/Program.cs

@@ -1,8 +1,10 @@
1 1
 using B2Classes;
2 2
 using CommandLine;
3 3
 using Newtonsoft.Json;
4
+using NLog;
4 5
 using System;
5 6
 using System.Collections.Generic;
7
+using System.Diagnostics;
6 8
 using System.IO;
7 9
 using System.Linq;
8 10
 using System.Net;
@@ -36,9 +38,12 @@ namespace B2Uploader
36 38
 
37 39
     class Program
38 40
     {
41
+
42
+        static Logger logger = LogManager.GetCurrentClassLogger();
39 43
         static void Main(string[] args)
40 44
         {
41 45
             var result = CommandLine.Parser.Default.ParseArguments<CmdLineOptions>(args);
46
+                      
42 47
 
43 48
             var existCode = result.MapResult(options => {
44 49
                 if (!Directory.Exists(options.Directory))
@@ -47,23 +52,47 @@ namespace B2Uploader
47 52
                     return 0;
48 53
                 }
49 54
 
55
+                if (options.Verbose)
56
+                {
57
+                    logger.Debug("Authorizing User");
58
+                }
50 59
                 var auth = AuthorizeUser(options.AccountId, options.ApplicationKey);
60
+                if (options.Verbose)
61
+                {
62
+                    logger.Debug("Listing Buckets");
63
+                }
51 64
                 var buckets = ListBuckets(new ListBucketsRequest() { accountId = auth.accountId }, auth.authorizationToken, auth.apiUrl);
52 65
 
53 66
                 var bucket = buckets.buckets.First();
54 67
 
68
+                logger.Debug("Using Bucket Named {0} for uploads", bucket.bucketName);
69
+
70
+
55 71
                 SearchOption so = SearchOption.TopDirectoryOnly;
56 72
                 if (options.recursive)
57 73
                 {
74
+                    if (options.Verbose)
75
+                    {
76
+                        logger.Debug("Using Reurisve mode for uploads");
77
+                    }
58 78
                     so = SearchOption.AllDirectories;
59 79
                 }
60 80
 
61 81
                 string[] FilesToProcess = Directory.GetFiles(options.Directory, "*", so);
62 82
 
83
+                if (options.Verbose)
84
+                {
85
+                    logger.Debug("Found {0} files to upload", FilesToProcess.Length);
86
+                }
87
+
63 88
                 int maxParallel = 2;
64 89
 
65 90
                 if(options.Threads > 2)
66 91
                 {
92
+                    if (options.Verbose)
93
+                    {
94
+                        logger.Debug("Mutliple threads for upload: {0}", options.Threads);
95
+                    }   
67 96
                     maxParallel = options.Threads;
68 97
                 }
69 98
 
@@ -96,7 +125,7 @@ namespace B2Uploader
96 125
                     }
97 126
                     if (found)
98 127
                     {
99
-                        Console.WriteLine("File {0} exists already, skipping", fileName);
128
+                       logger.Debug("File {0} exists already, skipping", fileName);
100 129
                     }
101 130
                     else
102 131
                     {
@@ -114,8 +143,8 @@ namespace B2Uploader
114 143
                             }
115 144
                             catch(Exception ex)
116 145
                             {
117
-                                Console.WriteLine("Uploaded Failed. Retrying");
118
-                                Console.WriteLine(ex.Message);
146
+                                logger.Error("Uploaded Failed. Retrying");
147
+                                logger.Error(ex.Message);
119 148
                                 uploaded = false;
120 149
                                 retries += 1;
121 150
                                 Thread.Sleep(TimeSpan.FromSeconds(30));
@@ -123,7 +152,7 @@ namespace B2Uploader
123 152
                         }
124 153
                         if (!uploaded)
125 154
                         {
126
-                            Console.WriteLine("Uploaded Failed 3 times... Please retry later!");
155
+                            logger.Error("Uploaded Failed 3 times... Please retry later!");
127 156
                         }
128 157
                     }
129 158
                 });
@@ -138,7 +167,7 @@ namespace B2Uploader
138 167
         static AuthorizeResponse AuthorizeUser(string accountId, string applicationKey)
139 168
         {
140 169
             HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("https://api.backblaze.com/b2api/v1/b2_authorize_account");
141
-            string credentials = Convert.ToBase64String(Encoding.UTF8.GetBytes(accountId + ":" + applicationKey));
170
+            string credentials = Convert.ToBase64String(Encoding.UTF8.GetBytes(string.Format("{0}:{1}", accountId, applicationKey)));
142 171
             webRequest.Headers.Add("Authorization", "Basic " + credentials);
143 172
             webRequest.ContentType = "application/json; charset=utf-8";
144 173
             WebResponse response = (HttpWebResponse)webRequest.GetResponse();
@@ -183,7 +212,9 @@ namespace B2Uploader
183 212
 
184 213
         static UploadFileResponse UploadFile(string authToken, string contentType, string filePath, string uploadUrl)
185 214
         {
186
-           String sha1 = GetSha1(filePath);
215
+            logger.Debug("Starting Uploading {0}", filePath);
216
+
217
+            String sha1 = GetSha1(filePath);
187 218
 
188 219
             var headers = GetAuthHeaders(authToken);
189 220
 
@@ -215,7 +246,7 @@ namespace B2Uploader
215 246
         static ListFileNamesResponse ListFileNames(ListFileNamesRequest request, string apiUrl, string authToken)
216 247
         {
217 248
             var headers = GetAuthHeaders(authToken);
218
-            string responseString =  MakeRequest(apiUrl + "/b2api/v1/b2_list_file_names", headers, JsonConvert.SerializeObject(request));
249
+            string responseString =  MakeRequest(string.Format("{0}/b2api/v1/b2_list_file_names", apiUrl), headers, JsonConvert.SerializeObject(request));
219 250
 
220 251
             return JsonConvert.DeserializeObject<ListFileNamesResponse>(responseString);
221 252
         }
@@ -228,9 +259,13 @@ namespace B2Uploader
228 259
         }
229 260
         
230 261
         static string MakeRequest(string url, List<Tuple<string,string>> headers, Stream data, string contentType="application/json; charset=utf-8")
231
-        {            
262
+        {
263
+            string reqId = DateTime.Now.Ticks.ToString("X2");
264
+            Stopwatch st = Stopwatch.StartNew();
232 265
             try
233 266
             {
267
+                
268
+                logger.Debug("Starting RequestID: {0}", reqId);
234 269
                 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
235 270
 
236 271
                 req.Method = "POST";
@@ -255,13 +290,13 @@ namespace B2Uploader
255 290
                 WebResponse response = (HttpWebResponse)req.GetResponse();
256 291
                 var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
257 292
                 response.Close();
258
-
293
+                Console.WriteLine("RequId: {0} MakeRequest Took {1}ms",reqId, st.ElapsedMilliseconds);
259 294
                 return responseString;
260 295
             }
261 296
             catch (Exception ex)
262 297
             {
263
-                Console.WriteLine("Error talking to server: {0}", ex.Message);
264
-                Console.WriteLine("URL: {0}", url);
298
+                logger.Error("ReqId: {1} Error talking to server: {0}", ex.Message, reqId);
299
+                logger.Error("URL: {0}", url);
265 300
                 throw;
266 301
             }
267 302
         }

+ 3 - 0
B2Uploader/packages.config

@@ -2,4 +2,7 @@
2 2
 <packages>
3 3
   <package id="CommandLineParser" version="2.0.275-beta" targetFramework="net45" />
4 4
   <package id="Newtonsoft.Json" version="7.0.1" targetFramework="net452" />
5
+  <package id="NLog" version="4.2.2" targetFramework="net45" />
6
+  <package id="NLog.Config" version="4.2.2" targetFramework="net45" />
7
+  <package id="NLog.Schema" version="4.2.1" targetFramework="net45" />
5 8
 </packages>