Logback: the reliable, generic, fast and flexible logging framework.
Copyright (C) 1999-2017, QOS.ch. All rights reserved.

This program and the accompanying materials are dual-licensed under
either the terms of the Eclipse Public License v1.0 as published by
the Eclipse Foundation

  or (per the licensee's choosing)

under the terms of the GNU Lesser General Public License version 2.1
as published by the Free Software Foundation.

The EPL/LGPL dual-license serves several purposes. The LGPL license ensures continuity in terms of licensing of the logback project. Prior to version 0.9.18,
logback was licensed (exclusively) under the LGPL v2.1. Moreover, since the EPL is deemed incompatible by the Free Software Foundation, the LGPL will allow various licensees, in particular software distributors who may be already bound by the terms of the GPL or the LGPL, to distribute our software.
On the other hand, the EPL license will placate organizations which refuse certain restrictions imposed by the LGPL.
Please note that logback-classic is intended to be used behind the SLF4J API, which is licensed under the MIT license.
If you wish to make a significant contribution to the logback project, you are invited to file a Contributor License Agreement. The purpose of this agreement is to formalize the terms of your contribution and to protect the project in case of litigation.
Upon request, we may exempt open-source projects from LGPL and EPL's reciprocity clauses so that the said projects can develop logback extensions under the license of their choice. Exemptions are granted on a case by case basis.