<?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.9</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-2017 The Apache Software Foundation</copyright>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <tags>logging log tracing logfiles</tags>
    <dependencies>
      <group targetFramework="net20-full" />
      <group targetFramework="net35-full" />
      <group targetFramework="net40-full" />
      <group targetFramework="net45-full" />
      <group targetFramework="net35-client" />
      <group targetFramework="net40-client" />
      <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>
