你居然问在1 前4个问题,你要明白,你已经使用了NuGet包管理器,这是一个很好的做法,包括使用的NuGet可用的软件包,但不作为手动自动放置包在适当的地方,让您轻松地将此软件包添加到解决方案的其他项目,提供版本控制等。 了解更多关于NuGet的信息。例如,here。
现在关于你的问题:
首先:没有,log4net
包不仅含有log4net.dll
文件。它也有log4net.xml
文件。是的,您可以手动添加这两个文件,而无需使用NuGet软件包管理器。
第二个:它是您的项目中的NuGet包列表。你只能删除它,如果你不打算使用NuGet。但是,这不是一个好主意 - 让它在那里,它是一个轻量级的XML文件。
第三:这是一个面向对象的问题。创建一个单独的全球记录,例如:
public static class LoggingFactory
{
private static ILog _logger;
private static CreateLogger()
{
// Some log4net initialization
return LogManager.GetLogger("Logger");
}
public static GetLogger()
{
return _logger ?? (_logger = CreateLogger());
}
}
public class AnyClassOfYourWholeSolution
{
LoggingFactory.GetLogger().DebugFormat("{0} {1}", a, b);
}
第四:这是OOP的问题又来。创建一个适配器,并使用它:
public interface ILogger
{
void Debug(string ip, string message);
void Info(string ip, string message);
void Error(string ip, string message);
}
public class Log4NetLogger : ILogger
{
private ILog _logger;
public Log4NetLogger()
{
// Some log4net initialization
_logger = LogManager.GetLogger("Logger");
}
public void Debug(string ip, string message)
{
// ...
}
public void Info(string ip, string message)
{
// ...
}
public void Error(string ip, string message)
{
// ...
}
}
public static class LoggingFactory
{
private static ILogger _loggerAdapter;
private static Initialize(ILogger adapter)
{
_loggerAdapter = adapter;
}
public static GetLogger()
{
return _logger;
}
}
public class BeginningOfYourProject
{
// Main() or Global.asax or Program.cs etc.
LoggingFactory.Initialize(new Log4NetLogger());
}
public class AnyClassOfYourWholeProject
{
LoggingFactory.GetLogger().Debug(ip, message);
}
或者你也可以提取IP来的log4net的属性:
// During initialization
log4net.ThreadContext.Properties["ip"] = ip;
// log4net Config
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%n%-5p %d %t IP: %property{ip} %m" />
</layout>
这一切都取决于你的幻想。
如果您在整个应用程序中使用它,则需要在每个将要使用它的课程中引用该程序集。 – Brian