log4net inicializace

hlasů
27

Díval jsem se tvrdě duplikáty, ale musí položit následující, bez ohledu na to, jak základní by se mohlo zdát, aby bylo jasné, jednou provždy!

V čerstvém aplikace konzoly pomocí log4net verzi 1.2.10.0 na VS28KSP1 na 64 bit W7 jsem následující kód: -

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

Podle mého app.config, musím:

<?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 doesnt napsat cokoli, pokud se buď přidat atribut:

[ assembly:XmlConfigurator ]

Nebo explicitně inicializovat ji do main ():

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

To vyvolává následující otázky:

  1. Jsem si téměř jistý, viděl jsem, že pracuje někde na nějaké verzi log4net bez přidání atributu sestavení nebo volání v hlavní. Může někdo mě ujišťují, nejsem si představoval, že?
  2. Může mi někdo prosím, místo mě, kde v doc výslovně uvádí, že je zapotřebí jak config úsek a inicializace hák - snad s vysvětlením, když se to změnilo, kdyby tomu tak bylo?

Umím si snadno představit, proč by to mohlo být politika - mají inicializační krok explicitní, aby se zabránilo překvapení atd., Je to jen, že jsem vzpomínám to ne vždy je případ ... (A normálně mám config v samostatném souboru , která obvykle trvá configSections mimo obraz)

Položena 11/08/2009 v 16:32
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
28

Podle konfigurační stránce v příručce :

Konfigurace log4net lze konfigurovat pomocí montážní úrovni atributy, než je uvedeno programově.

XmlConfiguratorAttribute: The log4net.Config.XmlConfiguratorAttributeUmožňuje XmlConfiguratorbýt konfigurovány pomocí následující vlastnosti:

  • ConfigFile ...
  • ConfigFileExtension ...

Pokud ani jeden z vlastností ConfigFile nebo ConfigFileExtension jsou specifikovány, bude konfigurační soubor aplikace (např TestApp.exe.config) být použity jako konfiguračního souboru log4net.

Příklad použití:

// 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.

Souhlasím, že je to trochu nejasné, ale interpretovat existenci příklad použití v tom smyslu, že log4net nebude používat soubor .config bez výše uvedené atributu; a skutečnost, že poukazují na to, že budete muset použít jednu ze dvou vlastností, ale nic o vynechávání atribut zcela neříkejte mi naznačuje, že je třeba atribut (nebo programový volání) používat App.config v jak chcete.

Odpovězeno 11/08/2009 v 17:19
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more