我正在使用使用.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实例?在这方面需要帮助。
答案 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);
}
}