你居然問在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