使用 log4net 包
working with log4net package
我最近将 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>
这是什么?我可以删除它吗?
我可以在整个项目中使用 log4net 而无需在每个项目顶部定义它吗 class?
我想在消息部分添加一个额外的字段。例如我想记录这样的事件:
Log.Debug(IP,"This is a DEBUG level message. Typically your most VERBOSE level.");
日志文件显示如下:
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.
我还在 conversionPattern 中添加了 %line
,但它不起作用。每次都从72开始,请问如何解决?
如何在wcf应用程序中记录应用程序的停止和启动?
你实际上在 1 中问了 4 个问题。
首先,您需要了解您已经使用了 NuGet 包管理器,并且使用 NuGet 包含可用包是一个很好的做法,但不要手动,因为它会自动将包放置在适当的位置,让您可以轻松地将此包添加到其他解决方案项目, 提供版本控制等
阅读有关 NuGet 的更多信息。例如,here.
现在关于您的问题:
首先: 不,log4net
软件包不仅包含一个log4net.dll
文件。它还具有 log4net.xml
文件。是的,您可以在不使用 NuGet 包管理器的情况下手动添加这两个文件。
其次:是你项目中的NuGet包列表。如果您不打算使用 NuGet,则只能删除它。然而,这不是一个好主意 - 让它在那里,它是一个单一的轻量级 XML-文件。
三:是OOP的问题。创建一个单例全局记录器,例如:
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);
}
第四:又是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>
一切随心所欲
我最近将 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>
这是什么?我可以删除它吗?
我可以在整个项目中使用 log4net 而无需在每个项目顶部定义它吗 class?
我想在消息部分添加一个额外的字段。例如我想记录这样的事件:
Log.Debug(IP,"This is a DEBUG level message. Typically your most VERBOSE level.");
日志文件显示如下:
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.
我还在 conversionPattern 中添加了
%line
,但它不起作用。每次都从72开始,请问如何解决?如何在wcf应用程序中记录应用程序的停止和启动?
你实际上在 1 中问了 4 个问题。 首先,您需要了解您已经使用了 NuGet 包管理器,并且使用 NuGet 包含可用包是一个很好的做法,但不要手动,因为它会自动将包放置在适当的位置,让您可以轻松地将此包添加到其他解决方案项目, 提供版本控制等 阅读有关 NuGet 的更多信息。例如,here.
现在关于您的问题:
首先: 不,log4net
软件包不仅包含一个log4net.dll
文件。它还具有 log4net.xml
文件。是的,您可以在不使用 NuGet 包管理器的情况下手动添加这两个文件。
其次:是你项目中的NuGet包列表。如果您不打算使用 NuGet,则只能删除它。然而,这不是一个好主意 - 让它在那里,它是一个单一的轻量级 XML-文件。
三:是OOP的问题。创建一个单例全局记录器,例如:
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);
}
第四:又是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>
一切随心所欲