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"
这样文件就不会被覆盖。
我第一次尝试在我的 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"
这样文件就不会被覆盖。