如何在多层应用程序中使用单个log4net dll

时间:2018-11-19 10:53:24

标签: c# asp.net-web-api logging log4net

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

好像我也必须在我的Web api项目中添加log4net dll,这也是我的应用程序的入口点。

  

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

     

2)是否可以在Web api项目中不添加log4net的情况下完成此工作?我喜欢在不同的应用程序中使用记录器对象,并且不想在多个项目中使用log4net。

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

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

Global.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();
    }

1 个答案:

答案 0 :(得分:0)

我看到的唯一方法是将您的Logging项目添加为对Web api项目或您想使用Logging的任何其他项目的引用。 在您的Web Api项目上,右键单击“引用”->“添加引用”。在“项目”->“解决方案”下,选择“正在记录项目”,然后单击“确定”。

编辑:

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

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);
    }
}

希望有帮助