Windows应用程序中如何使用Log4net登录文件

How to use Log4net to log in File in Windows Application

我第一次尝试在我的 WinForm 应用程序中使用 Log4net,在此之前我想看看它是否适用于我的控制台应用程序,它甚至没有生成任何日志文件。

我也参考了其他 post 来实现日志记录,但无济于事。

为了将 NHibernate 生成的查询记录到文件中,我按照 post 中的建议在我的配置文件中添加了以下内容:

配置文件

<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)]

以上就是我的建议 post。但它没有用。我错过了什么吗?

更新:

以下是使用 NHibernate 并希望在文件中显示结果查询的简单方法 class:

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

        }
    }

我从 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" 

这样文件就不会被覆盖。