首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用log4net包

使用log4net包
EN

Stack Overflow用户
提问于 2015-06-16 03:56:07
回答 1查看 7.1K关注 0票数 1

我最近将log4net包添加到我的web应用程序中。现在我有几个问题:

  1. 我通过VS 2013软件包安装添加了log4net包,并添加了整个包。我猜想log4net只是dll,我可以通过添加dll将它添加到我的项目中?
  2. 当我添加log4net包时,packages.config文件已经添加到我的项目中,其内容如下:

那是什么?我能把它移走吗?

  1. 我可以在整个项目中使用log4net而不必在每个类的顶部定义它吗?
  2. 我想给消息部分添加一个额外的字段。例如,我想记录这样的事件: Log.Debug(IP,“这是一条调试级别的消息。通常是您最详细的级别。”);

日志文件如下所示:

代码语言:javascript
复制
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.
  1. 我还将%line添加到conversionPattern中,但它不起作用。每次从72开始。怎么解决这个问题呢?
  2. 如何在wcf应用程序中记录应用程序的停止和启动?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-16 04:32:20

首先,您需要理解使用了NuGet包管理器,使用NuGet包含可用的包是一种很好的做法,而不是手动的,因为它会自动将包放置在适当的位置,让您可以轻松地将该包添加到其他解决方案项目中,提供版本控制等等。例如,这里

关于你的问题:

First:不,log4net包不仅包含log4net.dll文件。它也有log4net.xml文件。是的,您可以手动添加这两个文件,而无需使用NuGet包管理器。

第二个:它是项目中NuGet包的列表。只有在不使用NuGet的情况下才能删除它。然而,这不是一个好主意-让它在那里,它是一个单一的重量轻的XML-文件。

第三代:这是一个面向对象的问题。创建一个单例全局记录器,例如:

代码语言:javascript
复制
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);
}

第四:,这又是一个面向对象的问题。创建一个适配器并使用它:

代码语言:javascript
复制
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的属性:

代码语言:javascript
复制
// 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>

这都取决于你的幻想。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30858508

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档