在codeproject上找了一个http://www.codeproject.com/Articles/403936/log4Net-and-SQLite
那个是log4net+sqlite的web例子,可是我移植到winform上面以后,一直不起作用。创建SQLite的SQL语句如下:
 CREATE TABLE Log (  
    LogId        INTEGER PRIMARY KEY,  
    Date        DATETIME NOT NULL,  
    Level        VARCHAR(50) NOT NULL,  
    Logger        VARCHAR(255) NOT NULL,  
    Source        VARCHAR(255) NOT NULL,  
    Message        TEXT DEFAULT NULL 
    ); 
增加的< appender>节点配置如下:
 
<appender name="AdoNetAppender_SQLite" type="log4net.Appender.AdoNetAppender"> 
  <bufferSize value="100" /> 
  <connectionType value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.66.0, Culture=neutral" /> 
  <!--SQLite连接字符串--> 
  <connectionString value="Data Source=c:\\log4net.db;Version=3;" /> 
  <commandText value="INSERT INTO Log (Date, Level, Logger,Source, Message) VALUES (@Date, @Level, @Logger, @Source, @Message)" /> 
  <parameter> 
    <parameterName value="@Date" /> 
    <dbType value="DateTime" /> 
    <layout type="log4net.Layout.RawTimeStampLayout" /> 
  </parameter> 
  <parameter> 
    <parameterName value="@Level" /> 
    <dbType value="String" /> 
    <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%level" /> 
    </layout> 
  </parameter> 
  <parameter> 
    <parameterName value="@Logger" /> 
    <dbType value="String" /> 
    <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%logger" /> 
    </layout> 
  </parameter> 
  <parameter> 
    <parameterName value="@Source" /> 
    <dbType value="String" /> 
    <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%file:%line" /> 
    </layout> 
  </parameter> 
  <parameter> 
    <parameterName value="@Message" /> 
    <dbType value="String" /> 
    <layout type="log4net.Layout.PatternLayout"> 
      <conversionPattern value="%message" /> 
    </layout> 
  </parameter> 
</appender> 

解决方案 »

  1.   

    调用如下    public partial class Form1 : Form
        {
            private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Form1).FullName);        public Form1()
            {
                InitializeComponent();
            }        private void button1_Click(object sender, EventArgs e)
            {
                log.Info(DateTime.Now.ToString() + ": login success");//写入一条新log
                log.Error(DateTime.Now.ToString() + ": login Error");//写入一条新log
            }
        }
      

  2.   

    效果是log4net日志不往sqlite数据库中写入,数据库表建的应该是没有问题的
      

  3.   

    LogId Integer NOT NULL PRIMARY KEY AUTOINCREMENT
      

  4.   

    一般的, log4net 的 web 项目, 会在 AssemblyInfo.cs 内有个初始化调用,
    以 AssemblyAttribute 形式给出的.
    迁移到 winform 后, 需要你手工初始化.就是 config 一个 appender.
      

  5.   

    我是参考http://zhoufoxcn.blog.51cto.com/792419/429988/来写的
    winform使用log4net 写txt文件已经没有问题
    如果有实例就好了
      

  6.   

    查了半天我自己怀疑是sqlite或者log4net的版本问题。
    可是为什么不报错呢?不引用system.data.sqlite.dll都不会报错的!
      

  7.   

    1、写个Test,断点调试或日志输出,捕获写日志到数据库操作的异常,分析之
    2、检查System.Data.Sqlite.dll对应是32bit还是64bit版本的
    3、检查 c:\\log4net.db 是否有写权限
    4、<connectionString value="Data Source=c:\\log4net.db;Version=3;" />  是否有passwod
      

  8.   

    OK了,需要保证版本的一致性
    <configuration>
      <configSections>
        <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net, Version=1.2.11.0, Culture=neutral"/>
      </configSections>
      <log4net debug="true">
        
        <appender name="sqlite" type="log4net.Appender.AdoNetAppender">
          <bufferSize value="1"/>
          <connectionType value="System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.81.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139"/>
          <connectionString value="data source=log4net.db;Synchronous=Off "/>
          <commandText value="INSERT INTO log4net(appdomain, aspnetcache, aspnetcontext, aspnetrequest, aspnetsession, [date], exception, file, identity, location, level, line, logger, message, method, ndc, property, stacktrace, stacktracedetail, [timestamp], thread, type, username, utcdate) VALUES (@appdomain, @aspnetcache, @aspnetcontext, @aspnetrequest, @aspnetsession, @date, @exception, @file, @identity, @location, @level, @line, @logger, @message, @method, @ndc, @property, @stacktrace, @stacktracedetail, @timestamp, @thread, @type, @username, @utcdate)"/>
          <parameter>
            <parameterName value="@appdomain"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%appdomain"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@aspnetcache"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%aspnet-cache"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@aspnetcontext"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%aspnet-context"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@aspnetrequest"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%aspnet-request"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@aspnetsession"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%aspnet-session{Usuario}"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@date"/>
            <dbType value="DateTime"/>
            <layout type="log4net.Layout.RawTimeStampLayout"/>
          </parameter>
          <parameter>
            <parameterName value="@exception"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%exception"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@file"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%file"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@identity"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%identity"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@location"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%location"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@level"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%level"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@line"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%line"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@logger"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%logger"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@message"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%message"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@method"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%method"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@ndc"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%ndc"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@property"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%property"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@stacktrace"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%stacktrace"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@stacktracedetail"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%stacktracedetail"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@timestamp"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%timestamp"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@thread"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%thread"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@type"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%type"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@username"/>
            <dbType value="String"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%username"/>
            </layout>
          </parameter>
          <parameter>
            <parameterName value="@utcdate"/>
            <dbType value="DateTime"/>
            <layout type="log4net.Layout.PatternLayout">
              <conversionPattern value="%utcdate{yyyy-MM-dd HH:mm:ss}"/>
            </layout>
          </parameter>
        </appender>
        <root>
          <level value="ALL"/>
          <appender-ref ref="sqlite"/>
        </root>
      </log4net></configuration>
      

  9.   


    CREATE TABLE [log4net] ( 
        [appdomain] varchar, [aspnetcache] varchar, [aspnetcontext] varchar,
        [aspnetrequest] varchar, [aspnetsession] varchar, [date] datetime,
        [exception] varchar, [file] varchar, [identity] varchar, 
        [location] varchar, [level] varchar, [line] integer, 
        [logger] varchar, [message] varchar, [method] varchar, 
        [ndc] varchar, [property] varchar, [stacktrace] varchar, 
        [stacktracedetail] varchar, [timestamp] bigint,  [thread] varchar,
        [type] varchar,  [username] varchar, [utcdate] datetime, 
        [appfree1] varchar, [appfree2] varchar,  [appfree3] varchar);