Move away from `Common.Logging` library

@rikbosch thank you, you saved my day!

This is a nice situation. Initial thought was to remove the need to upgrade current project dependencies to latest versions to use Hangfire. This decision works perfectly with Newtonsoft.Json package, but failed for Common.Logging. So, some action required for logging subsystem in Hangfire.

Continue to use Common.Logging 2.2.0

This seem as a reasonable solution unless some other package you use in your application depends on the latest version. In that case you will be unable to use Hangfire, so it is unacceptable to continue to use the old version.

Upgrade Common.Logging to the latest version

This step will require additional actions for Hangfire users as they need to update some other packages (for example, Common.Logging.NLog) in order to use the latest package version. The trouble is that other Hangfire packages (Hangfire.PostgreSql) depend on the old version of Common.Logging package, and they should be re-released.

After upgrading, we may have the same problems in future.

Change Hangfire to use LibLog

A single file for you to either copy/paste or install via nuget, into your library/framework/application to enable dependency free logging. It contains transparent built-in support for NLog, Log4Net, EntLib Logging, Serilog and Loupe or allows the user to define a custom provider.
LibLog readme

So, if you use one of the logging library mentioned above, you don’t need to install anything else, it just works. If you have other logging provider, all you need is to implement two simple interfaces:

public interface ILogProvider
{
    ILog GetLogger(string name);
}

public interface ILog
{
    bool Log(LogLevel logLevel, Func<string> messageFunc);
    void Log<TException>(LogLevel logLevel, Func<string> messageFunc, TException exception) where TException : Exception;
}

This step will require to do the following things:

  • Replace all references to Common.Logging API with the new logging provider in all Hangfire projects using Common.Logging.
  • Implement interfaces described above for target projects if required, or at least remove the LogManager.Adapter = /* ... */ line in the project.

Actions described above are similar to actions required to do after upgrading the Common.Logging version to the latest one, so it seems reasonable to me to perform the switch to the LibLog as soon as possible.