<?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-2018 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>
