Добавление приложения автоматически - PullRequest
0 голосов
/ 16 октября 2018

В log4net я пытаюсь добавить appenders программно для каждого экземпляра, используя следующий код.

Я бы понял, почему для RollingFileAppender мне нужно написать:

((Logger)log.Logger).AddAppender(newFileAppender);

, а дляAdoNetAppenders Я должен написать:

hierarchy.Root.AddAppender(newAdoNetAppender);

Если я напишу:

hierarchy.Root.AddAppender(newFileAppender);

, он будет регистрировать каждую строку дважды.

Если я напишу:

((Logger)log.Logger).AddAppender(newAdoNetAppender);

он не будет входить в базу данных.

Или, может быть, есть и другие ошибки?

Global.asax :

XmlConfigurator.ConfigureAndWatch(new FileInfo("Foo.xml"));

Определение свойства:

LogicalThreadContext.Properties["InstanceName"] = instance;

Код :

public static void SetLog4NetAppenderOptions(ILog log, string instanceName)
    {
        Hierarchy hierarchy = LogManager.GetRepository() as Hierarchy;

        if (hierarchy != null)
        {
            RollingFileAppender genericFileAppender = (RollingFileAppender)hierarchy.GetAppenders().FirstOrDefault(x => x.GetType() == typeof(RollingFileAppender) && x.Name == "RollingFile");
            if (genericFileAppender != null)
            {
                genericFileAppender.Threshold = defaultLevel;
                genericFileAppender.ActivateOptions();

                if (!String.IsNullOrEmpty(instanceName))
                {
                    RollingFileAppender specificFileAppender = (RollingFileAppender)hierarchy.GetAppenders().FirstOrDefault(x => x.GetType() == typeof(RollingFileAppender) && x.Name == "RollingFile_" + instanceName);
                    if (specificFileAppender == null)
                    {
                        RollingFileAppender newFileAppender = new RollingFileAppender();
                        newFileAppender.Threshold = defaultLevel;
                        newFileAppender.AppendToFile = genericFileAppender.AppendToFile;
                        newFileAppender.MaximumFileSize = genericFileAppender.MaximumFileSize;
                        newFileAppender.MaxFileSize = genericFileAppender.MaxFileSize;
                        newFileAppender.LockingModel = genericFileAppender.LockingModel;
                        newFileAppender.Layout = genericFileAppender.Layout;
                        newFileAppender.Name = String.Format("RollingFile_{0}", instanceName);
                        newFileAppender.File = genericFileAppender.File.Replace("_log", "_" + instanceName);                                                    newFileAppender.ActivateOptions();                          ((Logger)log.Logger).AddAppender(newFileAppender);
                    }
                }
            }

                if (!String.IsNullOrEmpty(instanceName))
                {
                    AdoNetAppender specificDbAppender = (AdoNetAppender)hierarchy.GetAppenders().FirstOrDefault(x => x.GetType() == typeof(AdoNetAppender) && x.Name == "AdoNetAppender_" + instanceName);
                    if (specificDbAppender == null)
                    {
                        AdoNetAppender newAdoNetAppender = new AdoNetAppender();
                        newAdoNetAppender.ConnectionType = "Foo";
                        newAdoNetAppender.CommandText = "Foo";
                        newAdoNetAppender.Name = String.Format("AdoNetAppender_{0}", instanceName);
                        newAdoNetAppender.AddParameter(new AdoNetAppenderParameter
                        {
                            ParameterName = "@log_date",
                            DbType = DbType.DateTime,
                            Layout = new RawTimeStampLayout()
                        });
                        // add other parameters
                        newAdoNetAppender.ConnectionString = ConfigurationManager.ConnectionStrings[Settings.Default.ConnectionStringBaseKey + instanceName].ConnectionString;
                        newAdoNetAppender.ActivateOptions();
                        hierarchy.Root.AddAppender(newAdoNetAppender);
                    }
                }
        }
    }

РЕДАКТИРОВАТЬ: я должен добавить, если я запускаю этот код дважды, второй раз он будетфильтр игнорирования журнала.

1 Ответ

0 голосов
/ 16 октября 2018

Наконец я нашел:

hierarchy.Root.AddAppender(newFileAppender);

- лучшее решение, но только с MinimalLock, так:

newFileAppender.LockingModel = new FileAppender.MinimalLock();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...