2015-05-23 2 views
1

Я пытаюсь впервые использовать Log4net в своем приложении WinForm, прежде чем я подумал, будет ли он работать в моем приложении консоли, которое даже не произвело каких-либо журнальный файл.Как использовать Log4net для входа в файл в приложении Windows

Я также упомянул другие сообщения, чтобы добиться регистрации, но безрезультатно.

Чтобы получить NHibernate генерируются запросы регистрируются в файле, я добавил следующее в моем Config File, как предложено в post:

Config File

<configuration> 
    <configSections> 
    <section name="hibernate-configuration" type="NHibernate.Cfg.ConfigurationSectionHandler, NHibernate" /> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> 
    </configSections> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="NHibernate" culture="neutral" publicKeyToken="aa95f207798dfdb4" /> 
     <bindingRedirect newVersion="3.4.0.0" oldVersion="3.1.0.4000" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2"> 
    <session-factory> 
     <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property> 
     <property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property> 
     <property name="connection.connection_string">Data Source=localhost\SQLEXPRESS;Initial Catalog=NHibernateIntro;Integrated Security=True</property> 
     <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property> 
     <property name="show_sql">true</property> 
     <property name="cache.use_second_level_cache">true</property> 
     <property name="cache.use_query_cache" >true</property> 
     <property name="cache.provider_class">NHibernate.Caches.SysCache.SysCacheProvider, NHibernate.Caches.SysCache</property> 
     <!-- <mapping assembly="NHibernateTest"/>--> 
    </session-factory> 
    </hibernate-configuration> 

    <log4net debug="false"> 

    <!-- Define some output appenders --> 
    <appender name="trace" 
      type="log4net.Appender.TraceAppender, log4net"> 
     <layout type="log4net.Layout.PatternLayout,log4net"> 
     <param name="ConversionPattern" 
      value="%d{ABSOLUTE} %-5p %c{1}:%L - %m%n" /> 
     </layout> 
    </appender> 

    <appender name="console" 
      type="log4net.Appender.ConsoleAppender, log4net"> 
     <layout type="log4net.Layout.PatternLayout,log4net"> 
     <param name="ConversionPattern" 
      value="%d{ABSOLUTE} %-5p %c{1}:%L - %m%n" /> 
     </layout> 
    </appender> 

    <appender name="rollingFile" 
      type="log4net.Appender.RollingFileAppender,log4net" > 

     <param name="File" value="log.txt" /> 
     <param name="AppendToFile" value="false" /> 
     <param name="RollingStyle" value="Date" /> 
     <param name="DatePattern" value="yyyy.MM.dd" /> 
     <param name="StaticLogFileName" value="true" /> 

     <layout type="log4net.Layout.PatternLayout,log4net"> 
     <param name="ConversionPattern" 
      value="%d [%t] %-5p %c - %m%n" /> 
     </layout> 
    </appender> 

    <!-- Setup the root category, add the appenders and set the default priority --> 
    <root> 
     <priority value="DEBUG" /> 
     <appender-ref ref="console" /> 
    </root> 
    <logger name="NHibernate"> 
     <level value="WARN" /> 
    </logger> 

    <logger name="NHibernate.SQL"> 
     <level value="DEBUG" /> 
     <appender-ref ref="rollingFile" /> 
    </logger> 

    </log4net> 

</configuration> 

Затем я добавил следующее AssemblyInfo. cs:

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

Это все, что мне было предложено в вышеуказанном сообщении. Но это не сработало. Я что-то упускаю?

Обновлено:

Ниже приводится простой класс с простыми методами, в которых я использую NHibernate и хотят результирующие запросы, которые будут показаны в файле:

public class Merger 
    { 
     public static void Run(ISessionFactory factory) 
     { 
      Customer customer; 

      using (var session = factory.OpenSession()) 
      using (var tx = session.BeginTransaction()) 
      { 
       customer = session.Get<Customer>(6946816); 
      } 

      customer.FirstName = "example"; 

      using (var session = factory.OpenSession()) 
      using (var tx = session.BeginTransaction()) 
      { 

       object anothercustomer = session.Merge(customer); 
       session.SaveOrUpdate(anothercustomer); 
       tx.Commit(); 
      } 

     } 
    } 
+0

Кажется, что вы используете только один appender - определенный на * root * - консоли. Попробуйте расширить logger ' <значение уровня =" DEBUG "/> ' –

+0

@Radim Как вам было предложено, я обновил config, но это тоже не сработало. В config написано: value = "log.txt", что означает, что он должен создать файл журнала, где принадлежит мой проект. Должен ли я использовать какой-либо метод регистрации или что-то, чтобы получить журналы, записанные в файле журнала, или это сделано легко, потому что я не использовал какой-либо метод или что-то – Sadiq

+0

Извините, не уверен, что не так ... Надеюсь, вы получите ответ –

ответ

1

Я удалил это из AssemblyInfo .cs: ​​

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

И добавил следующее непосредственно перед созданием экземпляра конфигурации:

log4net.Config.XmlConfigurator.Configure(); 
var cfg = new Configuration(); // creating Configuration instance 

И создала папку, содержащую файл журнала. Я даже изменил атрибут:

<appendToFile value="false" 

в

<appendToFile value="true" 

так, что файл не будет переписан.

+0

Отличная работа, сэр. –

Смежные вопросы