我最近将log4net软件包添加到了WCF Web应用程序中。现在我有几个问题:
我通过VS 2013软件包安装添加了log4net软件包,并添加了整个软件包。我的猜测是log4net只是dll,我可以通过添加dll将其添加到我的项目中吗?
当我添加log4net软件包时,一个packages.config文件已添加到我的项目中,其内容如下:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="log4net" version="2.0.3" targetFramework="net45" />
</packages>
Run Code Online (Sandbox Code Playgroud)它是什么?我可以删除它吗?
我可以在整个项目中使用log4net而不在每个类的顶部定义它吗?
我想在消息部分添加一个额外的字段。例如,我想记录这样的事件:
Log.Debug(IP,“这是一个调试级别的消息。通常是最详细的级别。”);
日志文件显示如下:
72 DEBUG 2015-06-16 08:17:41,713 [10] [(null)] [InsertDate] - from source IP(192.168.1.1) This is a DEBUG level message. Typically your most VERBOSE level.
Run Code Online (Sandbox Code Playgroud)
我还添加%line了conversionPattern,但它不起作用。每次从72开始。如何解决?
如何在WCF应用程序中记录应用程序的停止和启动?
您实际上在1中提出了4个问题。首先,您需要了解您已经使用了NuGet软件包管理器,这是一个很好的做法,可以使用NuGet包含可用软件包,但不要手动添加,因为它会自动将软件包放置在适当的位置,您可以添加该软件包可以轻松地解决方案的其他项目,提供版本控制等。有关NuGet的更多信息。例如,这里。
现在关于您的问题:
首先:不,log4net包中不仅包含log4net.dll文件。它也有log4net.xml文件。是的,您可以手动添加这两个文件,而无需使用NuGet软件包管理器。
第二:这是项目中NuGet软件包的列表。如果您不打算使用NuGet,则只能将其删除。但是,这不是一个好主意-放在那里,它是一个轻量级的XML文件。
第三:这是面向对象的问题。创建一个单例全局记录器,例如:
public static class LoggingFactory
{
private static ILog _logger;
private static ILog CreateLogger()
{
// Some log4net initialization
return LogManager.GetLogger("Logger");
}
public static ILog GetLogger()
{
return _logger ?? (_logger = CreateLogger());
}
}
public class AnyClassOfYourWholeSolution
{
LoggingFactory.GetLogger().DebugFormat("{0} {1}", a, b);
}
Run Code Online (Sandbox Code Playgroud)
第四:这又是一个面向对象的问题。创建一个适配器并使用它:
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);
}
Run Code Online (Sandbox Code Playgroud)
或者您可以将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>
Run Code Online (Sandbox Code Playgroud)
这完全取决于您的幻想。
| 归档时间: |
|
| 查看次数: |
6107 次 |
| 最近记录: |