Вопрос по .net, log4net-configuration, initialization, xmlconfigurator, log4net – инициализация log4net

27

Мы искали дубликаты, но должны спросить следующее, каким бы простым оно ни казалось, чтобы раз и навсегда разобраться в этом!

В новом консольном приложении, использующем log4net версии 1.2.10.0 на VS28KSP1 на 64-битной W7, у меня есть следующий код: -

using log4net;
using log4net.Config;

namespace ConsoleApplication1
{
    class Program
    {
        static readonly ILog _log = LogManager.GetLogger(typeof(Program));
        static void Main(string[] args)
        {
            _log.Info("Ran");
        }
    }
}

В моемapp.config, Я имею:



  
    
  
  
    
      
      
      
      
      
      
      
      
        
      
    

    
      
      
    
  


Это ничего не пишет, если я не добавлю атрибут:

[ assembly:XmlConfigurator ]

Или явно инициализируйте его в Main ():

_log.Info("This will not go to the log");
XmlConfigurator.Configure();
_log.Info("Ran");

Это поднимает следующие вопросы: я

Я почти уверен, что яЯ видел, как это работает где-то в некоторой версии log4net без добавления атрибута сборки или вызова в Main. Может ли кто-нибудь заверить меня, что яя не представляю это?Может кто-то, пожалуйста, указать мне, где в документе прямо указано, что требуются и раздел конфигурации, и перехват инициализации - надеюсь, с объяснением того, когда это изменилось, если это произошло?

Я легко могу себе представить, почему это может быть политика - с явным шагом инициализации, чтобы избежать неожиданностей и т. Д.просто я, кажется, вспоминаю, что это не всегда так ... (И обычно у меня есть конфиг в отдельном файле, который обычно выводит конфигурации из картинки)

Ваш Ответ

1   ответ
28

Страница конфигурации в руководстве:

Конфигурация log4net может быть настроена с использованием атрибутов уровня сборки, а не задана программно.

Атрибут XmlConfiguratorAttribute:log4net.Config.XmlConfiguratorAttribute ПозволяетXmlConfigurator настраиваться с использованием следующих свойств:

ConfigFile ...ConfigFileExtension ...

Если ни одно из свойств ConfigFile или ConfigFileExtension не указано, файл конфигурации приложения (например, TestApp.exe.config) будет использоваться в качестве файла конфигурации log4net.

Пример использования:

// Configure log4net using the .config file
[assembly: log4net.Config.XmlConfigurator(Watch=true)]
// This will cause log4net to look for a configuration file
// called TestApp.exe.config in the application base
// directory (i.e. the directory containing TestApp.exe)
// The config file will be watched for changes.

Я согласен, что этоЭто немного неоднозначно, но я понимаю, что использование этого примера означает, что log4net не будет использовать файл .config без вышеуказанного атрибута; и тот факт, что они указывают на то, что вы должны использовать одно из двух свойств, но ничего не говорите об исключении атрибута в целом, подсказывает мне, что атрибут (или программный вызов) необходим для использования app.config в так, как вы хотите.

@Peter Lillevold: У меня нет такого намерения, не уверен, откуда у вас идея? Я'Мне просто интересно понять, как я когда-либо думал, что это возможно для работы без какой-либо формы явной конфигурации через Атрибут или вызов Configurator.Configure ...? Ruben Bartelink
@Ruben - Почему вы переключаетесь на другую платформу только потому, что вам нужно инициализировать log4net? Peter Lillevold
@RubenBartelink: NLog проще в настройке, но в конце концов бесполезен, так как большинство их конфигураций нет лог или не работать как задумано. Пока log4net'Конфигурация странная, по крайней мере, их вещиработает! Mrchief
Все звучит довольно правдоподобно. Все еще ищу больше, хотя - яя убежден, что ямы видели материал, отправляемый в файл журнала без явного вызова XmlConfiguratorAttribute или XmlConfigurator.Configure. Кажется, это достаточно согласованно, не работает в 1.2.10, и код через Reflector не предполагает, что есть какая-либо причина, почему он будет работать без маркера или явного вызова. Может быть, я должен просто использовать вместо NLog, и тамне было бы ни одной из этих проблем: P Ruben Bartelink

Похожие вопросы