如何在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();
}
}
}
我从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"