如何从.NET Framework初始化.net Core ILogger或ILoggerFactory并注入到.Net Core中内置的类库中的构造函数

时间:2019-04-11 22:01:12

标签: c# .net

我正在使用使用.NET Core构建的类库。该库只有一个公共类,其构造函数接受ILoggerFactory,而另一个重载的构造函数接受ILogger。但是我在使用.NET Framework 4.7构建的控制台应用程序中使用了该库。我的控制台应用程序使用Log4Net进行日志记录。但是我需要注入ILogger或ILoggerFactory的实例,以便基于我的log.config设置来记录类库的错误。

我尝试如下

ILogger logger = new LoggerFactory()。CreateLogger(); var contentManager = new ContentManager(logger);

但是我不知道如何将Log4Net实例传递给LoggerFactory。

private static ILog _log = LogManager.GetLogger(typeof(Program));
static void Main(string[] args)
{
   ILogger logger = new LoggerFactory().CreateLogger<ContentManager>();
   var contentManager = new ContentManager(logger);
   contentManager.Run();
}

我没有发现任何记录,ContentManager也没有引发任何异常。我知道ILogger实例对我的控制台应用程序不了解Log4Net,我如何传递Log4Net实例?在这方面需要帮助。

1 个答案:

答案 0 :(得分:0)

尝试使用Adapter Pattern来促进委派到Log4Net。我不熟悉Log4Net,但我想您会理解以下示例:

import csv


#sorts all the student data into a class
class Students():
    def __init__(self,student_id, first_name,second_name,student_parent,parent_email):

        self.student_id = student_id
        self.first_name = first_name
        self.second_name = second_name
        self.student_parent = student_parent
        self.parent_email = parent_email


    def __repr__(self):
        return self.student_id + " " + self.first_name + " " +self.second_name + " " + self.student_parent + " " + self.parent_email


student_list = []

#opens the csv file, takes out the information and saves them in the Student Class
student_file = open('student_list.csv')
student_file_reader = csv.reader(student_file)
for row in student_file:
    row_string = str(row)
    row_parts1,row_parts2,row_parts3,row_parts4,row_parts5 = row_string.split(',')
    student_list.append(Students(row_parts1,row_parts2,row_parts3,row_parts4,row_parts5))

然后在您的代码中可以执行以下操作:

class MyLoggerAdapter : Library.ILogger 
{
    private readonly ILog _delegation;

    public MyLoggerAdapter(ILog delegation)
    {
        _delegation = delegation;
    }

    public void ILogger.Debug(string msg, params object[] p)
    {
        _delegation.Debug(msg, p); 
    }
}