RPrashant
RPrashant

Reputation: 227

How to get appender from log4net config file in .net core 2.2

I'm implementing log4net AsyncBufferingForwardingAppender in asp.net core 2.0, but I guess it is not supporting.
I have implemented log4net RollingFileAppender in core 2.0 & it worked successfully using log4.net config.

I am trying below code:
// sLoggerName = "BasicLogger"

internal static ILog Initialize(string sLoggerName)
{
    ILog objlogger = null;
    try
    {
        #region Log4net_Configuration
        XmlDocument log4netConfig = new XmlDocument();
        log4netConfig.Load(File.OpenRead("log4net.config"));
        var repo = log4net.LogManager.CreateRepository(Assembly.GetEntryAssembly(),
                   typeof(log4net.Repository.Hierarchy.Hierarchy));
        log4net.Config.XmlConfigurator.Configure(repo, log4netConfig["log4net"]);
        #endregion


        objlogger = log4net.LogManager
                        .GetLogger(log4net.LogManager.CreateRepository(Assembly.GetEntryAssembly(),
                        typeof(log4net.Repository.Hierarchy.Hierarchy)).Name, sLoggerName);

        // Iterating through each appender
        object[] objAppenders = objlogger.Logger.Repository.GetAppenders();

        foreach (object item in objAppenders)
        {
            var objFile = item as AppenderSkeleton; 
            if (objFile != null)
            {
                objFile.ActivateOptions();
            }
        }

        // Checking logger
        if (objlogger.Logger.Name != sLoggerName)
        {
            objlogger = null;
        }
    }
    catch (System.Exception)
    {
        // Handle exception
    }
    return objlogger;
}  

My log4net.config file configuration is as given below:

<?xml version="1.0"?>
  <log4net>
    <appender name="Basic" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="Logs/Basic.log"/>
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <param name="AppendToFile" value="true"/>
      <param name="Threshold" value="INFO" />
      <rollingStyle value="Composite" />
      <datePattern value="yyyyMMdd" />
      <maxSizeRollBackups value="300" />
      <maximumFileSize value="1MB" />
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%date{yyyy/MM/dd HH:mm:ss,fff}&#9;[%-5p]&#9;[%3t]&#9;%m%n" />
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="INFO" />
        <levelMax value="INFO" />
      </filter>
    </appender>

    <appender name="BasicAsyncBufferingForwarder" type="Easy.Logger.AsyncBufferingForwardingAppender">
      <lossy value="false" />
      <bufferSize value="500" />
      <idleTime value="3000" />
      <fix value="Message, ThreadName, Exception" />
      <appender-ref ref="Basic" />
    </appender>

    <logger name="BasicLogger">
      <level value="ALL" />
      <appender-ref ref="BasicAsyncBufferingForwarder" />
    </logger>

  </log4net>  

Count of objAppenders is always 0.
Is am I missing in coding? Thank you

Upvotes: 2

Views: 873

Answers (1)

DeveloperSD
DeveloperSD

Reputation: 316

Please recheck your type field...

It must be type="Easy.Logger.AsyncBufferingForwardingAppender, XXX"

XXX = "Assembly Name"

Refer below link https://github.com/NimaAra/Easy.Logger

Upvotes: 2

Related Questions