USE [ASPNETDB]
GO
/****** 对象:  Table [dbo].[Log]    脚本日期: 12/21/2011 22:41:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[Log]([ID] [int] IDENTITY(1,1) NOT NULL,[Date] [datetime] NOT NULL,[Thread] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,[Level] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,[Logger] [varchar](200) COLLATE Chinese_PRC_CI_AS NULL,[UserName] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,[ControlName] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,[ActionName] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,[Message] [text] COLLATE Chinese_PRC_CI_AS NULL,[IP] [varchar](20) COLLATE Chinese_PRC_CI_AS NULL,[MachineName] [varchar](100) COLLATE Chinese_PRC_CI_AS NULL,[Browser] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,[Location] [text] COLLATE Chinese_PRC_CI_AS NULL,[Exception] [text] COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]GO
SET ANSI_PADDING OFF

<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender,log4net">

<!--BufferSize为缓冲区大小,只有日志记录超设定值才会一块写入到数据库-->

<bufferSize value="10" /><!—或写为<param name="BufferSize" value="10" />-->

<!--引用-->

<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

<!--连接数据库字符串-->

<connectionString value="data source=.;initial catalog=Test;integrated security=false;persist security info=True;User ID=sa;Password=;" />

<!--插入到表Log-->

<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Operator],[Message],[ActionType],[Operand],[IP],[MachineName],[Browser],[Location],[Exception]) VALUES (@log_date, @thread, @log_level, @logger,@operator, @message,@action_type,@operand,@ip,@machineName,@browser,@location,@exception)" />

<!—日志记录时间,RawTimeStampLayout为默认的时间输出格式 -->

<parameter>

<parameterName value="@log_date" />

<dbType value="DateTime" />

<layout type="log4net.Layout.RawTimeStampLayout" />

</parameter>

<!--线程号-->

<parameter>

<parameterName value="@thread" />

<dbType value="String" />

<!—长度不可以省略,否则不会输出-->

<size value="100" />

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%thread" />

</layout>

</parameter>

<!--日志等级-->

<parameter>

<parameterName value="@log_level" />

<dbType value="String" />

<size value="100" />

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%level" />

</layout>

</parameter>

<!--日志记录类名称-->

<parameter>

<parameterName value="@logger" />

<dbType value="String" />

<size value="200" />

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%logger" />

</layout>

</parameter>

<!--操作者。这个是自定义的输出字段,使用重新实现的布局器ReflectionLayout -->

<parameter>

<parameterName value="@operator" />

<!—设置为Int32时只有bufferSize的 value<="1"才正确输出,没有找出原因。-->

<dbType value="Int16" />

<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">

<conversionPattern value="%property{Operator}" />

</layout>

</parameter>

<!--操作对象-->

<parameter>

<parameterName value="@operand" />

<dbType value="String" />

<size value="300" />

<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">

<conversionPattern value="%property{Operand}" />

</layout>

</parameter>

<!—IP地址-->

<parameter>

<parameterName value="@ip" />

<dbType value="String" />

<size value="20" />

<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">

<conversionPattern value="%property{IP}" />

</layout>

</parameter>

<!--机器名-->

<parameter>

<parameterName value="@machineName" />

<dbType value="String" />

<size value="100" />

<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">

<conversionPattern value="%property{MachineName}" />

</layout>

</parameter>

<!--浏览器-->

<parameter>

<parameterName value="@browser" />

<dbType value="String" />

<size value="50" />

<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">

<conversionPattern value="%property{Browser}" />

</layout>

</parameter>

<!—日志消息-->

<parameter>

<parameterName value="@message" />

<dbType value="String" />

<size value="3000" />

<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">

<conversionPattern value="%property{Message}" />

</layout>

</parameter>

<!--动作类型-->

<parameter>

<parameterName value="@action_type" />

<dbType value="Int16" />

<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">

<conversionPattern value="%property{ActionType}" />

</layout>

</parameter>

<!—记录日志的位置-->

<parameter>

<parameterName value="@location" />

<dbType value="String" />

<size value="2000" />

<layout type="log4net.Layout.PatternLayout">

<conversionPattern value="%location" />

</layout>

</parameter>

<!—异常信息。ExceptionLayout 为异常输出的默认格式-->

<parameter>

<parameterName value="@exception" />

<dbType value="String" />

<size value="4000" />

<layout type="log4net.Layout.ExceptionLayout" />

</parameter>

</appender>

注意:

向表中输出的字段不能多于数据表本身字段,而反之则可以,但这些多余字段一定使其可以为空,否则便写不到数据库;

输出字段的类型一定是对应数据表字段数据类型可以隐式转换的,而且长度也不能超过,否则也不能写入;

数据表字段设置尽量可以为空,这样可以避免一条日志记录存在空数据导致后面的日志都记录不了。

4.3<logger>的配置
在配置文件<appender>中的配置好了输出的介质,格式,过滤方式,还要定义日志对象<logger>。

在框架的体系里,所有的日志对象都是根日志(root logger)的后代。 因此如果一个日志对象没有在配置文件里显式定义,则框架使用根日志中定义的属性。在<root>标签里,可以定义level级别值和Appender的列表。如果没有定义LEVEL的值,则缺省为DEBUG。可以通过<appender-ref>标签定义日志对象使用的Appender对象。<appender-ref>声明了在其他地方定义的Appender对象的一个引用。在一个logger对象中的设置会覆盖根日志的设置。而对Appender属性来说,子日志对象则会继承父日志对象的Appender列表。这种缺省的行为方式也可以通过显式地设定<logger>标签的additivity属性为false而改变。

<root>不显式申明时使用默认的配置。我觉得在使用时不定义<root>,自定义多个<logger>,在程序中记录日志时直接使用<logger>的name来查找相应的<logger>,这样更灵活一些。例如:

<!--同时写两个文件和数据库-->

<logger name="ReflectionLayout">

<level value="DEBUG"/>

<appender-ref ref="HashtableLayout"/>

<appender-ref ref="ReflectionLayout"/>

<appender-ref ref="ADONetAppender"/>

</logger>

4.4关联配置文件
log4net默认关联的是应用程序的配置文件App.config(BS程序是Web.config),可以使用程序集自定义属性来进行设置。下面来介绍一下这个自定义属性:

log4net.Config.XmlConifguratorAttribute。

XmlConfiguratorAttribute有3个属性:

ConfigFile: 配置文件的名字,文件路径相对于应用程序目录

(AppDomain.CurrentDomain.BaseDirectory)。ConfigFile属性不能和ConfigFileExtension属性一起使用。

ConfigFileExtension: 配置文件的扩展名,文件路径相对于应用程序的目录。ConfigFileExtension属性不能和ConfigFile属性一起使用。

Watch: 如果将Watch属性设置为true,就会监视配置文件。当配置文件发生变化的时候,就会重新加载。

如果ConfigFile和ConfigFileExtension都没有设置,则使用应用程序的配置文件App.config(Web.config)。

可以在项目的AssemblyInfo.cs文件里添加以下的语句:

//监视默认的配置文件,App.exe.config

[assembly: log4net.Config.XmlConfigurator(Watch = true)]

//监视配置文件,App.exe.log4net。

[assembly: log4net. Config.XmlConfigurator(ConfigFileExtension = "log4net", Watch = true)]

//使用配置文件log4net.config,不监视改变。注意log4net.config文件的目录,BS程序在站点目录//下,CS则在应用程序启动目录下,如调试时在\bin\Debug下,一般将文件属性的文件输出目录调为//始终复制即可

[assembly: log4net. Config.XmlConfigurator(ConfigFile = "log4net.config")]

//使用配置文件log4net.config,不监视改变

[assembly: log4net. Config.XmlConfigurator()]

也可以在Global.asax的Application_Start里或者是Program.cs中的Main方法中添加,注意这里一定是绝对路径,如下所示:

//这是在BS程序下,使用自定义的配置文件log4net.xml,使用Server.MapPath("~") + //@"\log4net.xml”来取得路径。 \log4net.xml为相对于站点的路径

// ConfigureAndWatch()相当于Configure(Watch = true)

log4net.Config.XmlConfigurator.ConfigureAndWatch(

new System.IO.FileInfo(Server.MapPath("~") + @"\log4net.xml"));

//这是在CS程序下,可以用以下方法获得:

string assemblyFilePath = Assembly.GetExecutingAssembly().Location;

string assemblyDirPath = Path.GetDirectoryName(assemblyFilePath);

string configFilePath = assemblyDirPath + " \\log4net.xml";

log4net.Config.XmlConfigurator.ConfigureAndWatch(

new FileInfo(configFilePath));

或直接使用绝对路径:

//使用自定义的配置文件,直接绝对路径为:c:/log4net.config

log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(@"c:/log4net.config"));

转自:http://www.cnblogs.com/neekerss/archive/2011/01/04/1925171.html

转载于:https://www.cnblogs.com/shiningrise/archive/2011/12/21/2296411.html

Log4net数据表相关推荐

  1. Activiti——数据表结构

    备注: 本文转自:http://blog.csdn.net/hj7jay/article/details/51302829 转载目的在于个人学习使用,如有涉及著作权相关问题,请联系本人,本人将第一时间 ...

  2. java查询mysql装载bean_jsp与javabean链接mysql数据库并查询数据表的简单实例源码

    jsp与javabean链接mysql数据库并查询数据表的简单实例源码.这个简单的实例是给新手学习的,或者一些高手临时忘记怎么使用jsp操作mysql数据库时候查找的,包括了建立mysql数据库连接的 ...

  3. Ubuntu环境下使用gnuplot由数据表绘制曲线图

    在ubuntu中安装NS-3之后,编译DASH仿真器Simulation,在由自适应算法得到仿真结果后可以直接导出数据表,包含仿真时间.每次跳转的视频切片的BitRate等等,这时候可以在Linux环 ...

  4. 数据库2.0 -- 数据类型和数据表的基本操作

    mysql支持多种数据类型,一般可以分为,数值,日期时间和字符(串) 数值类型 日期和时间类型 字符串类型 创建数据表 我们首先应该明白的就是一个结构的问题,一个用户可以管理多个数据库,每个数据库下面 ...

  5. iOS-查询数据库--指定数据表中的当前数据行的总数量

    很多时候,我们在查询一个表的时候,不想得到里面的记录内容,只是想简单的得到符合查询条件的记录条数. FMDB中有一个很简单的方法就可以实现,见下面的代码实例: #import "FMdata ...

  6. mysql表导出和导入命令行_MySQL命令行导出导入数据库和数据表-Go语言中文社区...

    MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:Program FilesMySQLMySQL Server ...

  7. 将数据追加到html 表格中,将数据添加到数据表中

    将数据添加到数据表中 03/30/2017 本文内容 在创建 DataTable 并使用列和约束定义其结构之后,您可以将新的数据行添加到表中. 要添加新行,可将一个新变量声明为 DataRow 类型. ...

  8. python数据库建表_mysql数据表如何创建

    在 MySQL 中,可以使用 CREATE TABLE 语句创建表.其语法格式为:CREATE TABLE <表名> ([表定义选项])[表选项][分区选项]; 其中,[表定义选项]的格式 ...

  9. 规格表管理之保存规格表数据表数据

    保存规格表数据表数据 添加路由: # -------规格路由表--------url(r'goods/simple/$',specs.SpecsView.as_view({'get':'simple' ...

最新文章

  1. hihocoder1718 最长一次上升子序列
  2. python中,如何将多行进行输出,同时将行尾的换行符去掉
  3. 【Python】查找目标值在列表中的索引序号
  4. Qt线程之QRunnable的使用详解
  5. 【uoj#37/bzoj3812】[清华集训2014]主旋律 状压dp+容斥原理
  6. 同时运行多个logstash而kibana监控界面只统计到一个的问题
  7. [MYSQL]如何并发查询并更新
  8. 南宁二中三中高考2021成绩查询,2020年南宁二中三中录取总成绩不低于A
  9. 免费2款标注工具实操(内含下载链接)
  10. python怎么读程序-python 怎么念
  11. 蚂蚁庄园 php源码,求一个基于Auto.js的蚂蚁庄园脚本
  12. CPAL脚本自动化测试 ———— Test Report系列函数及使用
  13. 深入理解短时傅里叶变换 STFT + Python 代码详解
  14. 离散时间傅里叶变换(一)
  15. 怎么彻底卸载cad2017_电脑中cad卸载不干净重装失败的处理方法
  16. 怎么看计算机内存和独显,怎么看电脑是集成显卡还是独立显卡
  17. matlab读取nc数据的某一列数据库,科学网—.nc数据读取详细资料matlab2010a及后面的版本 - 张凌的博文...
  18. 计算机更改刷新频率,电脑屏幕刷新频率无法更改怎么办
  19. 联想拯救者19款原厂系统镜像
  20. Hard link and soft link in Linux

热门文章

  1. SQLServer数据库文件组相关知识笔记
  2. SQLServer常用的配置函数笔记
  3. 后端技术:Hibernate 和 MyBatis 哪个更好用?
  4. 没想到,Git居然有3种“后悔药”!
  5. 后端:Spring IOC 知识点总结,写得太好了!
  6. php 直播服务器搭建,基于Nginx搭建RTMP/HLS视频直播服务器
  7. element ui 空格_空格是您的UI朋友。 大量使用它。
  8. QML-关于Qt.rgba()颜色无法正常显示问题
  9. 《HTML5 2D游戏编程核心技术》——第1章,第1.3节特别功能
  10. Android之上下文context