<?xml version="1.0" encoding="utf-8"?>
<!--

 Licensed to the Apache Software Foundation (ASF) under one
 or more contributor license agreements.  See the NOTICE file
 distributed with this work for additional information
 regarding copyright ownership.  The ASF licenses this file
 to you under the Apache License, Version 2.0 (the
 "License"); you may not use this file except in compliance
 with the License.  You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing,
 software distributed under the License is distributed on an
 "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License.

-->
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
  <metadata>
    <id>log4net</id>
    <version>2.0.6</version>
    <title>Apache log4net</title>
    <summary>The Apache log4net library is a tool to help the programmer output log statements to a variety of output targets.</summary>
    <description>log4net is a tool to help the programmer output log statements to a variety of output targets. In case of problems with an application, it is helpful to enable logging so that the problem can be located. With log4net it is possible to enable logging at runtime without modifying the application binary. The log4net package is designed so that log statements can remain in shipped code without incurring a high performance cost. It follows that the speed of logging (or rather not logging) is crucial. 

At the same time, log output can be so voluminous that it quickly becomes overwhelming. One of the distinctive features of log4net is the notion of hierarchical loggers. Using these loggers it is possible to selectively control which log statements are output at arbitrary granularity. 

log4net is designed with two distinct goals in mind: speed and flexibility</description>
    <authors>The Apache Software Foundation</authors>
    <owners>Apache Logging Project, Jiří Činčura</owners>
    <licenseUrl>http://logging.apache.org/log4net/license.html</licenseUrl>
    <projectUrl>http://logging.apache.org/log4net/</projectUrl>
    <iconUrl>https://www.apache.org/images/feather.png</iconUrl>
    <copyright>Copyright 2004-2016 The Apache Software Foundation</copyright>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <tags>logging log tracing logfiles</tags>
    <dependencies>
      <group targetFramework=".NETStandard1.3">
        <dependency id="System.AppContext" version="[4.1.0, )" />
        <dependency id="System.Collections.NonGeneric" version="[4.0.1, )" />
        <dependency id="System.Console" version="[4.0.0, )" />
        <dependency id="System.Diagnostics.Debug" version="[4.0.11, )" />
        <dependency id="System.Diagnostics.Process" version="[4.1.0, )" />
        <dependency id="System.Diagnostics.StackTrace" version="[4.0.1, )" />
        <dependency id="System.Diagnostics.TraceSource" version="[4.0.0, )" />
        <dependency id="System.IO.FileSystem" version="[4.0.1, )" />
        <dependency id="System.IO.FileSystem.Watcher" version="[4.0.0, )" />
        <dependency id="System.Linq" version="[4.1.0, )" />
        <dependency id="System.Net.NameResolution" version="[4.0.0, )" />
        <dependency id="System.Net.Requests" version="[4.0.11, )" />
        <dependency id="System.Net.Sockets" version="[4.1.0, )" />
        <dependency id="System.Reflection" version="[4.3.0, )" />
        <dependency id="System.Reflection.Extensions" version="[4.0.1, )" />
        <dependency id="System.Reflection.TypeExtensions" version="[4.1.0, )" />
        <dependency id="System.Runtime.Extensions" version="[4.1.0, )" />
        <dependency id="System.Runtime.InteropServices" version="[4.1.0, )" />
        <dependency id="System.Runtime.InteropServices.RuntimeInformation" version="[4.0.0, )" />
        <dependency id="System.Runtime.Serialization.Formatters" version="[4.3.0, )" />
        <dependency id="System.Text.RegularExpressions" version="[4.1.0, )" />
        <dependency id="System.Threading" version="[4.0.11, )" />
        <dependency id="System.Threading.Thread" version="[4.0.0, )" />
        <dependency id="System.Threading.Timer" version="[4.0.1, )" />
        <dependency id="System.Xml.ReaderWriter" version="[4.0.11, )" />
        <dependency id="System.Xml.XmlDocument" version="[4.0.1, )" />
      </group>
    </dependencies>
  </metadata>
  <files>
    <file src="bin\net\2.0\release\log4net.dll" target="lib\net20-full" />
    <file src="bin\net\2.0\release\log4net.xml" target="lib\net20-full" />
    <file src="bin\net\3.5\release\log4net.dll" target="lib\net35-full" />
    <file src="bin\net\3.5\release\log4net.xml" target="lib\net35-full" />
    <file src="bin\net\4.0\release\log4net.dll" target="lib\net40-full" />
    <file src="bin\net\4.0\release\log4net.xml" target="lib\net40-full" />
    <file src="bin\net\4.5\release\log4net.dll" target="lib\net45-full" />
    <file src="bin\net\4.5\release\log4net.xml" target="lib\net45-full" />
    <file src="bin\net-cp\3.5\release\log4net.dll" target="lib\net35-client" />
    <file src="bin\net-cp\3.5\release\log4net.xml" target="lib\net35-client" />
    <file src="bin\net-cp\4.0\release\log4net.dll" target="lib\net40-client" />
    <file src="bin\net-cp\4.0\release\log4net.xml" target="lib\net40-client" />
    <file src="bin\netstandard\1.3\Release\log4net.dll" target="lib\netstandard1.3" />
  </files>
</package>
