Reputation: 147
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
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
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