在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>
那个是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>
{
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
}
}
以 AssemblyAttribute 形式给出的.
迁移到 winform 后, 需要你手工初始化.就是 config 一个 appender.
winform使用log4net 写txt文件已经没有问题
如果有实例就好了
可是为什么不报错呢?不引用system.data.sqlite.dll都不会报错的!
2、检查System.Data.Sqlite.dll对应是32bit还是64bit版本的
3、检查 c:\\log4net.db 是否有写权限
4、<connectionString value="Data Source=c:\\log4net.db;Version=3;" /> 是否有passwod
<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>
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);