首页 > 解决方案 > 如何在多层应用程序中拥有单个 log4net dll

问题描述

我有一个单独的项目用于登录我的 web api 解决方案。在日志记录项目中,我使用的是 log4net dll。它一切正常。

看起来我还必须在我的 web api 项目中添加 log4net dll,这是我的应用程序的入口点。

1)为什么我需要在我的 web api 项目中添加 log4net dll?

2)有没有办法在web api项目中不添加log4net来完成这项工作?我喜欢在不同的应用程序中使用我的记录器 peoject,并且不想在多个项目中使用 log4net。

 public class Logger : ILogger
 {
    private static readonly ILog LoggerObj = LogManager.GetLogger("ErrorLog");

    public Logger()
    {
        XmlConfigurator.Configure();
    }
 }

全球.asax

        protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        UnityConfig.RegisterComponents();
        GlobalConfiguration.Configure(WebApiConfig.Register);
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
        BundleConfig.RegisterBundles(BundleTable.Bundles);

        // Initialize log4net.
        //log4net.Config.XmlConfigurator.Configure();

        // Initialize log4net.
        var logger = new Logger();
    }

标签: c#asp.net-web-apilogginglog4net

解决方案


我看到这一点的唯一方法是将您的 Logging 项目添加为对您的 Web api 项目或您想使用 Logging 的任何其他项目的引用。在您的 Web Api 项目中,右键单击 References -> Add References。在 Project -> Solution 下选择 Logging 项目,然后单击 OK。

编辑:

看看我的实现。我在一个单独的项目中做了,并按照上述步骤链接到其他项目。

namespace MyProject.Logger {
public partial class Log {

    private static readonly Log _instance = new Log();
    protected ILog monitoringLogger;
    protected static ILog debugLogger;

    private Log() {
        monitoringLogger = LogManager.GetLogger(System.Environment.MachineName);
        debugLogger = LogManager.GetLogger(System.Environment.MachineName);
    }

    public static void Debug(string message) {
        debugLogger.Debug(message);
    }

    public static void Debug(string message, Exception exception) {
        debugLogger.Debug(message, exception);
    }

    public static void Info(string message) {
        _instance.monitoringLogger.Info(message);
    }
}

希望能帮助到你


推荐阅读