inicjalizacja log4net
Trudno mi było znaleźć duplikaty, ale muszę zadać następujące pytania, bez względu na to, jak może się to wydawać podstawowe, aby wyjaśnić to raz na zawsze!
W nowej aplikacji Console używającej log4net w wersji 1.2.10.0 na VS28KSP1 w 64-bitowym W7 mam następujący kod: -
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");
}
}
}
W moimapp.config
, Mam:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Program.log" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="1MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="[%username] %date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
</configuration>
To nic nie pisze, chyba że dodam atrybut:
[ assembly:XmlConfigurator ]
Lub jawnie zainicjuj go w Main ():
_log.Info("This will not go to the log");
XmlConfigurator.Configure();
_log.Info("Ran");
Rodzi to następujące pytania:
Jestem prawie pewien, że widziałem go działającego gdzieś w jakiejś wersji log4net bez dodania atrybutu zespołu lub wywołania w Main. Czy ktoś może mnie zapewnić, że nie wyobrażam sobie tego?Czy ktoś może mi wskazać, gdzie w dokumencie wyraźnie stwierdza się, że wymagana jest zarówno sekcja config, jak i hak inicjujący - mam nadzieję, że z wyjaśnieniem, kiedy to się zmieniło, jeśli tak się stało?Mogę sobie łatwo wyobrazić, dlaczego to może być polityka - po wyraźnym kroku inicjalizacji, aby uniknąć niespodzianek itp., Wydaje mi się, że pamiętam, że nie zawsze tak jest ... (I normalnie mam konfigurację w osobnym pliku , która zazwyczaj wykonuje konfiguracje poza obrazem)