<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
  </configSections>
  <appSettings>
  </appSettings>
  <log4net>
    <!--定义输出到文件中-->
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <!--定义文件存放位置-->
      <file value="D:/log4netfile.txt" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value="yyyyMMdd-HH:mm:ss" />
      <layout type="log4net.Layout.PatternLayout">
        <!--每条日志末尾的文字说明-->
        <footer value="by12" />
        <!--输出格式-->
        <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
        <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline" />
      </layout>
    </appender>
    <!--定义输出到控制台命令行中-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <!--定义输出到windows事件中-->
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
    <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb-->
    <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
      <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb" />
      <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)" />
      <!--定义各个参数-->
      <parameter>
        <parameterName value="@logDate" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@thread" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logLevel" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger" />
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="240" />
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message" />
        </layout>
      </parameter>
    </appender>
    <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->
    <root>
      <!--文件形式记录日志-->
      <appender-ref ref="LogFileAppender" />
      <!--控制台控制显示日志-->
      <appender-ref ref="ConsoleAppender" />
      <!--Windows事件日志-->
      <appender-ref ref="EventLogAppender" />
      <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉
      <appender-ref ref="AdoNetAppender_Access" />
      -->
    </root>  </log4net>
</configuration>
AssemblyInfo.cs 和窗体中都加了这句代码
[assembly: log4net.Config.XmlConfigurator(Watch = true)]窗体中运行如下代码为什么在设置路径没有看到错误日志?
           log4net.ILog mLog =
    LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            mLog.Error("this is a test log message!");难道还要在其他地方设置么?不懂,,

解决方案 »

  1.   

    在</root>后加一个logger节点:        <logger name="myLogger">
                <level value="ERROR"/>
            </logger>
    然后程序调用:            ILog log = LogManager.GetLogger("myLogger");
                if (log.IsErrorEnabled)
                    log.Error("this is a test log message!");
    试试
      

  2.   


    <configSections>
    <sectionGroup name="common">
    <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
    </sectionGroup>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    </configSections>
      

  3.   

    以下配置:<?xml version="1.0" encoding="utf-8"?>
    <configuration>
        <configSections>
            <section name="log4net"  type="log4net.Config.IgnoreSectionHandler"  />
        </configSections>
        <log4net>
            <root>
                <appender-ref ref="LogFileAppender" />
            </root>
            <logger name="myLogger">
            </logger>
            <appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
                <param name="File" value="F:/log-file.txt" />
                <param name="AppendToFile" value="true" />            <layout type="log4net.Layout.PatternLayout">
                    <param name="ConversionPattern" value="时间:%d 优先级:%p 消息:%m 语句所在文件:%F 语句所在行号:%L %n"  />
                </layout>
            </appender>
        </log4net>
    </configuration>程序:            ILog log = LogManager.GetLogger("myLogger");
                if (log.IsDebugEnabled)
                    log.Debug("Debug");
                if (log.IsInfoEnabled)
                    log.Info("Info");
                if (log.IsErrorEnabled)
                    log.Error("Error");亲测没问题,你试试
      

  4.   


    很不幸,放在我上面还是没有用、你的这句代码放在那里了》?[assembly: log4net.Config.XmlConfigurator(Watch = true)]
      

  5.   

    我没带参数:
    [assembly: log4net.Config.XmlConfigurator()]
    也是放到AssemblyInfo.cs里
      

  6.   

    你的配置文件不是写在app.config里的?
    改一下AssemblyInfo.cs,[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]然后把你的log4net.config文件拷到程序的生成目录下再试试
      

  7.   


    嗯,,确实是这样,,可以了,,还问个问题,,,这个怎么用呢?
    难道每个窗口里面用用那个方法?
    在catch里面写?
      

  8.   

    Log4Net使用详解(续)
    log4net使用详解
    不过貌似你的配置代码就是从我那里copy过来的。
      

  9.   


    怎么让程序一抛异常就记录日志,,难道要在没个catch里面调用?
      

  10.   

    http://blog.csdn.net/jing_xin/article/details/2416583
      

  11.   

    winform的话,可以在Program.cs的Main方法里加上:Application.ThreadException += (sender, e) => 
    {
        ILog log = LogManager.GetLogger("myLogger");
        log.Error("Error");
    };
    asp.net的话,可以重写Gloabl.asax的OnError方法
      

  12.   


    我是winform的,加了上面代码程序抛异常后创建了txt文件,但是没有异常信息,还要设置其他的么?
      

  13.   

    标记以下,正好项目利用到了log4net