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

本文关键字:Log4net 登录 文件 Windows 应用程序 | 更新日期: 2023-09-27 17:50:26

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

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

为了让NHibernate生成的查询记录到文件中,我在我的配置文件中添加了以下建议:

配置文件

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

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

我从AssemblyInfo.cs中删除了这个:

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

并在创建Configuration实例之前添加了以下内容:

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

它创建了包含日志文件的文件夹。我甚至改变了attribute:

<appendToFile value="false" 

<appendToFile value="true"