Log4net数据表

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/297650.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

go float64 比较_Go 每日一库之 plot

Go 每日一库之 plot简介本文介绍 Go 语言的一个非常强大、好用的绘图库——plot。plot内置了很多常用的组件&#xff0c;基本满足日常需求。同时&#xff0c;它也提供了定制化的接口&#xff0c;可以实现我们的个性化需求。plot主要用于将数据可视化&#xff0c;便于我们观察、…

大前端快闪:package.json文件知多少?

最近在公司某项目参与了一些前端工作&#xff0c;作为后端抠脚大汉&#xff0c;改点前端细节磕磕绊绊&#xff0c;改点大前端、工程化、HTTP交互倒也还能做到柳暗花明。于是打算用后端程序猿的视角记录一些{大前端}的知识快闪&#xff0c;也算是帮助读者构建完整的全栈技能体系…

大牛C++编程开发学习建议50条

2019独角兽企业重金招聘Python工程师标准>>> 每个从事C开发的朋友相信都能给后来者一些建议&#xff0c;但是真正为此进行大致总结的很少。本文就给出了网上流传的对C编程开发学习的50条建议&#xff0c;总结的还是相当不错的&#xff0c;编程学习者&#xff08;不仅…

JQuery函数在IE浏览器中测试的注意事项

这几天刚学JQuery&#xff0c;在测试hide&#xff0c;show&#xff0c;slideToggle函数的时候&#xff0c;在firefox浏览器都很正常&#xff0c;而在IE浏览器里面却出现一些动画异常。这些过渡效果快结束的时候&#xff0c;都出现了一些跳动的现象&#xff0c;例如我对一个段落…

html2canvas改成同步,html2canvas转为图片异步转同步问题(记录)

描述&#xff1a;最近使用html2canvas插件截取页面上指定dom为图片&#xff0c;然后将生成的图片替换页面上的dom后&#xff0c;将替换后的页面内容保存至数据库&#xff0c;结果保存的是保存前的页面&#xff0c;初步判定是html2canvas的异步执行造成的。参考了两篇博文&#…

杨辉再发声明:没有及时交流工作进展,深表歉意

全世界只有3.14 % 的人关注了爆炸吧知识pixabay.com编者按加州大学付向东教授实名举报中科院上海神经所杨辉事件在过去一周成为学术界讨论的热点话题。付向东称自己2018年在神经所做学术报告后&#xff0c;杨辉重复其实验却未告知并抢发文章。杨辉7月3日发表声明&#xff0c;称…

fedora12下pppoe服务器的搭建

1. 查看系统上是否安装了pppoe服务器软件[rootlocalhost ~]# rpm -qa | grep pppoerp-pppoe-3.10-6.fc12.i686若显示以上信息则已经安装了pppoe软件&#xff0c;若无信息则首先安装pppoe软件[rootlocalhost ~]# yum install pppoe2. 配置系统支持IP转发[rootlocalhost ~]# vim …

z变换公式表_如何使用标准正态分布表?

正态分布这个概念在统计学中很常见&#xff0c;在做与正态分布有关计算的时候经常会用到标准正态分布表。如果知道一个数值的标准分数即z-score&#xff0c;就可以非常便捷地在标准正态分布表中查到该标准分数对应的概率值。任何数值&#xff0c;只要符合正态分布的规律&#x…

android 钢琴识别音阶对错_Sans钢琴音阶手机版|Sans钢琴音阶安卓版下载 v1.4 - 跑跑车安卓网...

Sans钢琴音阶游戏是一款有趣的音乐节奏类手机游戏&#xff0c;sans经典角色还原&#xff0c;融入闯关游戏元素&#xff0c;丰富的玩法&#xff0c;赶快来下载体验吧。游戏介绍Sans钢琴音阶游戏是一款拥有着大量不同类型游戏歌曲各种不一样游戏玩法的闯关类型音乐游戏&#xff0…

.NET 6 中的 ConfigurationManager

.NET 6 中的 ConfigurationManagerIntro.NET 6 为了 Minimal API 引入了一些新东西&#xff0c;其中就包含了一个全新的配置对象 ConfigurationManager这并不是 .NET Framework 里的静态类 ConfigurationManager&#xff0c;而是 .NET Core 里的配置 Microsoft.Extensions.Conf…

60个高质量的CSS、XHTML网页布局模板下载

无论您下载和解剖预建模板是为了学习最新的CSS布局技术&#xff0c;或者下载的目的是为了易于编辑制作现成的独立网站&#xff0c;您都不应该仅限于免费且可用的一个拥有众多克隆版本、陈旧的且往往是枯燥的模板。网页设计的流行趋势和技术总是在千变万化&#xff0c;因此&…

总有人会偷看你的朋友圈

全世界只有3.14 % 的人关注了爆炸吧知识生活中&#xff0c;总是会有人在默默关注着你。你的朋友圈&#xff0c;常常有人来“偷偷”光顾&#xff0c;而这些细枝末节常常被我们忽视。 你不想让关心你的人失望&#xff0c;于是在朋友圈分享优质文章&#xff0c;希望你的快乐…

关于tomcat的使用方法(配置及使用)

前一段时间要做一个音乐播放器&#xff0c;要实现在线下载歌曲功能&#xff0c;这里要用到服务器&#xff0c;我决定使用Tomcat。 1.下载tomcat http://tomcat.apache.org/ 推荐下载7.0 版本&#xff08;8.0刚出来&#xff0c;据说还有些问题&#xff1b;6.0反正我没搭建好&a…

HTML5中常见的列表标签包括,介绍几个常用的HTML5标签

一、Html的基本结构&#xff1a;网页的文本、图片等信息&#xff1b;二、Head部分&#xff1a;用于表示网页的元数据即描述网页的基本信息其常用标签及属性有&#xff1a;1、title标签&#xff1a;浏览器标签页显示的标题2、meta标签&#xff1a;其常用属性①charset:设置文档的…

正弦波 程序 角度传感器_激光位移传感器的原理及应用领域

激光位移传感器是利用激光技术进行测量的传感器&#xff0c;由激光器、激光检测器和测量电路组成。作为新型测量设备&#xff0c;激光位移传感器能够精确非接触测量被测物体的位置、位移等变化&#xff0c;还可测量位移、厚度、振动、距离、直径等精密的几何测量。目前&#xf…

Dapr牵手.NET学习笔记:状态管理之docker-compose发布

Dapr牵手.NET学习笔记&#xff1a;想入非非的服务调用Dapr牵手.NET学习笔记&#xff1a;跨物理机负载均衡服务调用Dapr牵手.NET学习笔记&#xff1a;用docker-compose部署服务说明&#xff1a;为了给出demo的全貌&#xff0c;这篇有点长&#xff0c;如果有上一篇的基础&#xf…

linux tomcat 启动权限不足解决办法

2019独角兽企业重金招聘Python工程师标准>>> 用命令 chmod 755 文件名 即可 转载于:https://my.oschina.net/pioneeer/blog/10374

c++求区间第k大数_寻找第K大的数的方法总结

今天看算法分析是&#xff0c;看到一个这样的问题&#xff0c;就是在一堆数据中查找到第k个大的值。名称是&#xff1a;设计一组N个数&#xff0c;确定其中第k个最大值&#xff0c;这是一个选择问题&#xff0c;当然&#xff0c;解决这个问题的方法很多&#xff0c;本人在网上搜…

她在哭,但我没资格安慰她......​

1 我没资格安慰她......▼2 妈妈的关心总是突如其来▼3 突然就热得离谱了▼4 当贾玲和沈腾开始演起韩剧▼5 有些菜一旦错过就不在▼6 这要不是德高望重的长老还真带不了这样的帽子▼7 连狗都比你会放风筝▼你点的每个赞&#xff0c;我都认真当成了喜欢

指定的文件不是虚拟磁盘 没有快照_vmware workstaiton 15 虚拟机克隆(4)

安装客户机操作系统和应用程序可能要耗费很多时间。通过使用克隆&#xff0c;您可以通过一次安装及配置过程制作很多虚拟机副本。克隆虚拟机比复制虚拟机更简单、更快速。当您需要将多个相同的虚拟机部署到一个组时&#xff0c;克隆功能会非常有用。例如&#xff0c;MIS 部门可…