log4net 代码配置 sqlite
我有一个winform项目, 需要使用日志功能, 并且不希望用户看到我的日志内容和配置文件. 所以选择了用代码配置log4net.
网上的log4net例子很多都是使用配置文件, 使用代码配置的不多. 另外数据库我使用的是sqlite, access的sql太难用了.
首先下载log4net.dll并添加到项目. 下载地址:http://logging.apache.org/log4net/
一般使用log4net需要在项目的AssemblyInfo.cs下面添加[assembly: log4net.Config.XmlConfigurator(Watch = true)].
但是代码配置不用加这句, 而是在Program.cs的Main()方法里面加初始化操作.
log4net的配置代码如下:
using log4net.Appender; using log4net.Config; using log4net.Layout; namespace MyLog { public class LogHelper { public static readonly log4net.ILog logProxy = log4net.LogManager.GetLogger("logProxy"); //记录异常日志数据库连接字符串 private const string _ConnectionString = " Data Source = Global/log4net.db3"; /// <summary> /// 使用SQLite记录异常日志 /// </summary> public static void SetADONetAppender() { log4net.Repository.Hierarchy.Hierarchy hier = log4net.LogManager.GetRepository() as log4net.Repository.Hierarchy.Hierarchy; if (hier != null) { log4net.Appender.AdoNetAppender adoAppender = new log4net.Appender.AdoNetAppender(); adoAppender.Name = "AdoNetAppender"; adoAppender.CommandType = System.Data.CommandType.Text; adoAppender.BufferSize = 1; adoAppender.ConnectionType = "System.Data.SQLite.SQLiteConnection, System.Data.SQLite, Version=1.0.94.0, Culture=neutral"; adoAppender.ConnectionString = _ConnectionString; adoAppender.CommandText = @"INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Source],[Message],[Exception]) VALUES" + " (@log_date, @thread, @log_level, @logger,@source, @message, @exception)"; adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@log_date", DbType = System.Data.DbType.DateTime, Layout = new log4net.Layout.RawTimeStampLayout() }); adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@thread", DbType = System.Data.DbType.String, Size = 255, Layout = new Layout2RawLayoutAdapter(new PatternLayout("%thread")) }); adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@log_level", DbType = System.Data.DbType.String, Size = 50, Layout = new Layout2RawLayoutAdapter(new PatternLayout("%level")) }); adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@logger", DbType = System.Data.DbType.String, Size = 255, Layout = new Layout2RawLayoutAdapter(new PatternLayout("%logger")) }); adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@source", DbType = System.Data.DbType.String, Size = 255, Layout = new Layout2RawLayoutAdapter(new PatternLayout("%file:%line")) }); adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@message", DbType = System.Data.DbType.String, Size = 4000, Layout = new Layout2RawLayoutAdapter(new PatternLayout("%message")) }); adoAppender.AddParameter(new AdoNetAppenderParameter { ParameterName = "@exception", DbType = System.Data.DbType.String, Size = 4000, Layout = new Layout2RawLayoutAdapter(new ExceptionLayout()) }); adoAppender.ActivateOptions(); BasicConfigurator.Configure(adoAppender); } } } }
下面是Program.cs的代码: (红色为我添加的代码)
using System; using System.Windows.Forms; namespace MyLog { static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { LogHelper.SetADONetAppender();//程序启动时候初始化log4net Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } } }
代码配置好了, 还要为项目添加System.Data.SQLite.dll . 然后建立数据库. 用sqlite的管理工具生成一个log4net.db3, 使用以下代码生成表:
CREATE TABLE Log ( LogId INTEGER PRIMARY KEY, Date DATETIME NOT NULL, Thread VARCHAR( 50 ) NOT NULL, Level VARCHAR( 50 ) NOT NULL, Logger VARCHAR( 255 ) NOT NULL, Source VARCHAR( 255 ) NOT NULL, Message TEXT DEFAULT 'NULL', Exception TEXT DEFAULT 'NULL' );
程序调用写日志的代码:
LogHelper.logProxy.Debug("登录方法Login出错了.");
一切就绪, 运行程序, 执行调用代码, 然后查看文件: Debug/Global/log4net.db3 看是否写入了日志数据.
至于sqlite如何设置密码, 这个有待解决.

浙公网安备 33010602011771号