سؤال

لقد كتبت .NET DLL والتي تسمى من تطبيق آخر باستخدام com interop. أرغب في استخدام log4net ، لكنني بحاجة إلى تحديد موقع ملف السجل في وقت التشغيل من التطبيق الآخر.

لقد استخدمت دائمًا log4net بأبسط طريقة ممكنة لمشروع WinForms ، ولكن نظرًا لأن مشروع DLL لا يحتوي على تطبيق. حاول قراءة ما يصل قليلاً عن كيفية عمل Log4Net وحاول تعيينه دون استخدام ملف .Config على الإطلاق.

لقد وصلت إلى المرحلة التي تجمع فيها ، ونوعًا من المطابقة لفهمي الصغير لـ Log4Net ، لكنه لا يكتب إلى ملف السجل.

إليك ما لدي حتى الآن ، هل يمكن لأي شخص أن يشير إلى أخطائي/المفاهيم الخاطئة الصارخة ، وإلا أخبرني طريقة أفضل لتسجيلها من DLL الخاص بي؟

    private log4net.Core.ILogger _ilogger;
    private ILog _logger;

    public void Initialize(String LogFileName)
    {
        log4net.Repository.ILoggerRepository Repo = null;
        try {
            Repo = log4net.LogManager.GetRepository(Assembly.GetExecutingAssembly().FullName);

        } catch (log4net.Core.LogException) {
            //ignore, domain not yet created
        }

        if (Repo == null) {
            Repo = log4net.LogManager.CreateRepository(Assembly.GetExecutingAssembly().FullName);

            log4net.Appender.RollingFileAppender appender = new log4net.Appender.RollingFileAppender();
            appender.Layout = new log4net.Layout.PatternLayout("%d - %m%n");
            appender.File = LogFileName;
            appender.MaxSizeRollBackups = 10;
            appender.MaximumFileSize = "100MB";
            appender.AppendToFile = true;
            appender.Threshold = log4net.Core.Level.Debug; //NEW: set level to Debug
            appender.ActivateOptions();

            Repo.Threshold = log4net.Core.Level.Debug; //NEW: set level to Debug

            log4net.Config.BasicConfigurator.Configure(Repo, appender);
        }

       // This doesn't seem to create the interface I need for logging
        _ilogger = Repo.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.FullName);

       // This doesn't seem to write to the log file for some reason.
        _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.FullName);
        _logger.Debug("Application started");
    }

شكرًا!

هل كانت مفيدة؟

المحلول

تحرير التحديث. أعد قراءة السؤال. يبدو أنك تحتاج فقط إلى استدعاء النسخة المحملة من هذا (تمرير تفاصيل ملف التكوين)- هل تريد فقط تكوين التسجيل من داخل COM DLL؟

مازحا أنا google'd log4com و وجدت هذا. لم أستخدمها ولكن قد يكون الأمر يستحق نظرة!

نصائح أخرى

أعتقد أن الإجابة هي أنني لم أكن بحاجة إلى مستودع جديد على الإطلاق. كنت فقط جعل الأمور معقدة للغاية. يبدو أن هذه النسخة المدمجة تعمل بشكل جيد:

public void Initialize(String LogFileName)
    {
        log4net.Appender.RollingFileAppender appender = new log4net.Appender.RollingFileAppender();
        appender.Layout = new log4net.Layout.PatternLayout("%d - %m%n");
        appender.File = LogFileName;
        appender.MaxSizeRollBackups = 10;
        appender.MaximumFileSize = "100MB";
        appender.AppendToFile = true;
        appender.Threshold = log4net.Core.Level.Debug;
        appender.ActivateOptions();
        log4net.Config.BasicConfigurator.Configure(appender);

        _logger = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType.FullName);
        _logger.Debug("Application started");
    }

حاول بشكل صريح تعيين المستوى لتصحيح كل من المسجل والملحق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top