spujia
spujia

Reputation: 147

log4net: What is the difference/advantage between using ILog vs. ILogger?

In the below code example, both methods are used. There is a similar question here, but there is no real explanation given, and I cannot comment on the post.

public static partial class Log
{
    private readonly static Type ThisDeclaringType = typeof(Log);
    private static readonly ILogger defaultLogger;
    private static readonly ILog defaultLog;

    // Setup our default logger
    static Log()
    {
        defaultLogger = LoggerManager.GetLogger(Assembly.GetCallingAssembly(), "CTWorkManager");
        defaultLog = LogManager.GetLogger(Assembly.GetCallingAssembly(), "CTWorkManager");
    }

    public static void Info(object message)
    {
        if (defaultLogger.IsEnabledFor(Level.Info))
        {
            defaultLogger.Log(ThisDeclaringType, Level.Info, message, null);
        }
        if (defaultLog.IsInfoEnabled)
        {
            defaultLog.Info(message, null);
        }
    }
    // etc...
}

}

Upvotes: 3

Views: 5170

Answers (2)

Z.R.T.
Z.R.T.

Reputation: 1603

Logger is used as adjustment of logging. You can manage log LEVELS (you can read more about levels here), you can manage appander from Logger. Log, in turn, does the job of saving data to a specific file.

consider the following example:

log4net.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    </configSections>

    <log4net>
        <appender name="FooRollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="..\\logs\\foo.log" />
            <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
            <appendToFile value="true" />
            <rollingStyle value="Date" />
            <datePattern value=".yyyyMMdd" />
            <staticLogFileName value="false" />
            <layout type="log4net.Layout.PatternLayout">
                <conversionPattern value="===================================================================%n%-5p %d - %m%n%n" />
            </layout>
        </appender>
        <logger name="FooLogger">
            <level value="ALL" />
            <appender-ref ref="FooRollingLogFileAppender" />
        </logger>


      <appender name="BooRollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <file value="..\\logs\\boo.log" />
        <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value=".yyyyMMdd" />
        <staticLogFileName value="false" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="===================================================================%n%-5p %d - %m%n%n" />
        </layout>
      </appender>
      <appender name="console" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date %level %logger - %message%newline" />
        </layout>
      </appender>
      <logger name="BooLogger">
        <level value="WARN" />
        <appender-ref ref="BooRollingLogFileAppender" />
        <appender-ref ref="console" />
      </logger>


    </log4net>
</configuration>

Main.cs and Log.cs (just a name, it doesn't implement Ilog)

public class Log
{
    private static readonly ILog booLogger = LogManager.GetLogger("BooLogger");
    static Log()
    {
        XmlConfigurator.Configure(new FileInfo("log4net.config"));
    }


    public static void BooLog(string msg)
    {
        booLogger.Info(msg);
        booLogger.Fatal("fatal");
    }
}


static void Main()
{
    Log.BooLog("asdasd");
}

Upvotes: 0

mr.coffee
mr.coffee

Reputation: 1028

ILogger is the interface that all loggers implement. The interface defines additional methods useful for development e.g. IsEnabledFor(Level level). You can use ILogger to implement your own custom logger. You should use the ILog interface in your application for logging messages to.

Upvotes: 1

Related Questions