在windows服务类中,是用log4net sql server,引用正常,但编译不通过,是为什么啊

log4net创建系统日志的详细步骤
字体:[ ] 类型:转载 时间:
log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。它可以将日志分不同的等级,以不同的格式,输出到不同的媒介。本文主要是简单的介绍如何在Visual Studio2010(Asp.Net Mvc3.0)中使用log4net快速创建系统日志,如何扩展以输出自定义字段
前言用户可以从http://logging.apache.org/log4net/下载log4net的源代码。解压软件包后,在解压的src目录下将log4net.sln载入Visual Studio .NET,编译后可以得到log4net.dll。用户要在自己的程序里加入日志功能,只需将log4net.dll引入工程即可。在项目中配置第一步:首先在项目中引用log4net.dll文件。第二步:在Web.config文件中进行添加configSections的节点
代码如下:& &configSections&&&& &section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/&&&& &!--配置一个结点 名称为log4net--&& &/configSections&
第三步:添加log4net配置节点
代码如下:&log4net debug="true"&&/log4net&
然后在log4net节点下添加写入本地文本文件中的配置
代码如下:&&&&&&&& &appender name="LogFileAppender" type="log4net.Appender.FileAppender" &&&&&&&&&&&&& &!--定义的是日志记录到文件的附着器 name表示该附着器的名称--&&&&&&&&& &&&&&&&&&&&& &!--在log4net中还有一个附着器RollingFileAppender 它表示会循环生成很多文件,举例来说,就是设置一共可以生成20个文件,每个文件的大小为2K,那么如果第一个、--&&&&&&&&&& &&&&&&&&&&&& &!--文件的大小超过2K,就会自动创建一个按顺序命名的文件--&&&&&&&&&&&&& &param name="File" value="c:\Log\DBLog.txt" /& &!--日志记录的存在路径--&&&&&&&&&&&&& &param name="AppendToFile" value="true" /&&!--为true就表示日志会附加到文件,为false,则会重新创建一个新文件--&&&&&&&&&&&&& &layout type="log4net.Layout.PatternLayout"&&&&&&&&&&&&&&& &!--输出内容控制--&&&&&&&&&&&&&&& &param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /&&&&&&&&&&&&& &/layout&&&&& &&&&&&&& &/appender&
注释很清楚,就不解释了。写入指定邮箱的配置
代码如下:&&&&&&& &appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"&&&&&&&& &!--设置发送电子邮件的附着器--&&&&&&&&&&&& &authentication value="Basic" /&&&&&&&&&&&& &to value="" /&&&&&&&&&&&& &from value="" /&&&&&&&&&&&& &username value="帐号" /&&&&&&&&&&&& &password value="密码" /&&&&&&&&&&&& &subject value="程序异常日志记录邮件发送" /&&&&&&&&&&&& &smtpHost value="" /&&&&&&&&&&&& &bufferSize value="512" /&&&&&&&&&&&& &lossy value="true" /&&&&&&&&&&&& &evaluator type="log4net.Core.LevelEvaluator"&&&&&&&&&&&&&&& &threshold value="debug"/&& &&&&&&&&&&& &/evaluator&&&&&&&&&&&& &layout type="log4net.Layout.PatternLayout"&&&&&&&&&&&&&&&&& &conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" /&&&& &&&&&&&&&&& &/layout&&&&&&&& &/appender&
通过的是163邮箱服务器发送将日志写入数据库的相关配置,还要建立一张对应的数据库表
代码如下:&&&&&&&& &appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"&&&&&&&&&&&&& &!--存储到数据库的操作--&&&&&&&&&&&&& &bufferSize value="10"/&&&&&&&&&&&&& &connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c"/&&&&&&&&&&&&& &connectionString value="server=.;database=Log4Nuser id=password=saa"/&&&&&&&&&&&&& &commandText value="INSERT INTO _Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date,&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& @log_thread, @log_level, @log_logger, @log_message, @log_exception)"/&&&&&&&&&&&&& &parameter&&&&&&&&&&&&&&&&& &parameterName value="@log_date"/&&&&&&&&&&&&&&&&& &dbType value="DateTime"/&&&&&&&&&&&&&&&&& &layout type="log4net.Layout.RawTimeStampLayout"/&&!--可以认为是记录日志的时间--&&&&&&&&&&&&& &/parameter&&&&&&&&&&&&& &parameter&&&&&&&&&&&&&&&&& &parameterName value="@log_thread"/&&&&&&&&&&&&&&&&& &dbType value="String"/&&&&&&&&&&&&&&&&& &size value="255"/&&&&&&&&&&&&&&&&& &layout type="log4net.Layout.PatternLayout"&&&&&&&&&&&&&&&&&&&& &conversionPattern value="%thread"/&&!--记录日志时的线程号--& &&&&&&&&&&&&&&& &/layout&& &&&&&&&&&&&& &/parameter&&&&&&&&&&&&& &parameter&&&&&&&&&&&&&&&&& &parameterName value="@log_level"/&&&&&&&&&&&&&&&&& &dbType value="String"/&&&&&&&&&&&&&&&&& &size value="50"/&&&&&&&&&&&&&&&&& &layout type="log4net.Layout.PatternLayout"&&&&&&&&&&&&&&&&&&&& &conversionPattern value="%level"/&&!--日志级别--&&&&&&&&&&&&&&&&& &/layout&&&&&&&&&&&&& &/parameter&&&&&&&&&&&&& &parameter&&&&&&&&&&&&&&&&& &parameterName value="@log_logger"/&&&&&&&&&&&&&&&&& &dbType value="String"/&&&&&&&&&&&&&&&&& &size value="255"/&&&&&&&&&&&&&&&&& &layout type="log4net.Layout.PatternLayout"&&&&&&&&&&&&&&&&&&&&& &conversionPattern value="%logger"/&&!--哪个记录器存储的该日志--&&&&&&&&&&&&&&&&& &/layout&&&&&&&&&&&&& &/parameter&&&&&&&&&&&&& &parameter&&&&&&&&&&&&&&&&& &parameterName value="@log_message"/&&&&&&&&&&&&&&&&& &dbType value="String"/&&&&&&&&&&&&&&&&& &size value="4000"/&&&&&&&&&&&&&&&&& &layout type="log4net.Layout.PatternLayout"&&&&&&&&&&&&&&&&&&&&& &conversionPattern value="%message"/&&!--日志信息--&&&&&&&&&&&&&&&&& &/layout&&&&&&&&&&&&& &/parameter&&&&&&&&&&&&& &parameter&&&&&&&&&&&&&&&&& &parameterName value="@log_exception"/&&&&&&&&&&&&&&&&& &dbType value="String"/&&&&&&&&&&&&&&&&& &size value="255"/&&&&&&&&&&&&&&&&& &layout type="log4net.Layout.ExceptionLayout"/&&!--异常信息--&&&&&&&&&&&&& &/parameter&& &&&&&&&& &/appender&
另外一种写入文件的方式配置
代码如下:&&&&&&&& &appender name="RollingFile" type="log4net.Appender.RollingFileAppender"&&&&&&&&&&&&& &!--这个就是我在上面提到的RollingFileAppender--&&&&&&&&&&&&& &file value="example.log" /&&!--文件名称--&&&&&&&&&&&&& &appendToFile value="false" /&&!--会创建新文件,一般设置为true,这里设置为false,是为了看到创建的文件--&&&&&&&&&&&&& &maximumFileSize value="1KB" /&&!--文件大小--&&&&&&&&&&&&& &maxSizeRollBackups value="20" /&&!--创建最大文件数--&&&&&&&&&&&&& &layout type="log4net.Layout.PatternLayout"&&&&&&&&&&&&&&&& &conversionPattern value="%level %thread %logger - %message%newline" /&&&&&&&&&&&&& &/layout&&&&&&&&& &/appender&
在log4net节点中还有两个节点
代码如下:&&&&& &logger name="Loggering"&&&&&&&& &level value="Warn"/&&&&&&&& &appender-ref ref="ADONetAppender"/&&&&&& &/logger&&&&&& &root&&&&&&&& &level value="info" /&&&&&&&&&& &!--&appender-ref ref="ADONetAppender" /&--&&&&&&&&&& &appender-ref ref="SmtpAppender"/&&&&&&&&&& &!--&appender-ref ref="LogFileAppender"/&&&&&&&&&& &appender-ref ref="ColoredConsoleAppender"/&&&&&&&&&& &appender-ref ref="EventLogAppender"/&&&&&&&&&& &append-ref ref="NetSendAppender"/&&&&&&&&&& &appender-ref ref="RollingFile"/&--&&&&&& &/root&
在框架的体系里,所有的日志对象都是根日志(root logger)的后代。 因此如果一个日志对象没有在配置文件里显式定义,则框架使用根日志中定义的属性。在&root&标签里,可以定义level级别值和Appender的列表。如果没有定义LEVEL的值,则缺省为DEBUG。可以通过&appender-ref&标签定义日志对象使用的Appender对象。&appender-ref&声明了在其他地方定义的Appender对象的一个引用。在一个logger对象中的设置会覆盖根日志的设置。而对Appender属性来说,子日志对象则会继承父日志对象的Appender列表。这种缺省的行为方式也可以通过显式地设定&logger&标签的additivity属性为false而改变。那么上面就会有数据库日志的写入和邮箱的写入在Global.asax文件初始化配置
代码如下:&&&&&&& protected void Application_Start()&&&&&&& {&&&&&&&&&&& //读取日志& 如果使用log4net,应用程序一开始的时候,都要进行初始化配置&&&&&&&&&&& log4net.Config.XmlConfigurator.Configure();&&&&&&&&&&& AreaRegistration.RegisterAllAreas();
&&&&&&&&&&& RegisterGlobalFilters(GlobalFilters.Filters);&&&&&&&&&&& RegisterRoutes(RouteTable.Routes);&&&&&&& }
代码如下:&&&&&&& private static readonly log4net.ILog log = log4net.LogManager.GetLogger("Loggering");&&&&&&& public ActionResult About()&&&&&&& { &&&&&&&&&&&& ("log日志信息");&&&&&&&&&&&& log.Debug("debug信息");&&&&&&&&&&&& log.Error("error信息");&&&&&&&&&&&& log.Warn("warn信息");&&&&&&&&&&&& Exception ex = new Exception("测试的异常信息");&&&&&&&&&&&& log.Fatal("fatal信息", ex);&&&&&&&&&&& return View();&&&&&&& }
Log4net中 DEBUG、INFO、WARN、ERROR 区分得很好。正常的 DEBUG、INFO 的日志, 就让它记录在 日志文件里面吧。对于 WARN、ERROR 级别的日志, 记录到日志文件的同时, 顺便发送电子邮件到我的信箱里面。 这样一来, 我也不必每天去看日志文件, 二来,出了什么问题, 能及时通过电子邮件得到通知。数据库结构
代码如下:create database Log4Netgouse Log4Netcreate table _log(&&& id int identity(1,1) primary key not null,&&& date datetime null,&&& thread int null,&&& level varchar(10) null,&&& logger varchar(20) null,&&& Message varchar(100) null,&&& Exception varchar(100) null)
还待优化,有空了再来琢磨琢磨。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具We have an asp.net 4.0 project which uses a couple of frameworks which is dependent on log4net version 1.2.10.0. Today I tried to include a new framework which is dependent on log4net version 1.2.11.0, I've been stuck ever since:
log4net 1.2.10.0 has publickeytoken = 1b44e1d
log4net 1.2.11.0 has publickeytoken = 669e0ddf0bb1aa2a
Since these are different i cannot use either assembly redirects (to make all frameworks use the same version of log4net) or codebase (to have just the new framework use version 1.2.11.0) through the runtime element in web.config.
What are my options here ?
(and why the bleep does log4net keep changing publickeytokens between versions, as I understand it a lost key was the reason for the switch between version 1.2.9.0 and 1.2.10.0, did they lose the key yet again? I'll volunteer my dropbox to keep it safe if they need it...)
Edit: Ok, so the log4net guys apparently had the idea that releasing with two keys was a good idea, but that means that every framework you make use of needs to agree on which of the two flavors they prefer, or those frameworks cannot work side by side in the same appdomain. Am I the only one finding this a horrible idea? if everyone did this then everything would break down, right?
Edit2: As I stated, I'm not using log4net in my business code, but I use several frameworks which depend on 1.2.10.0, and the problem arose when I tried to use a new framework which depended on 1.2.11.0 (new key), so Stefans answer doesn't apply, because the new framework will expect the new key, not the old one
解决方案 This is how I got things working with version 1.2.11.0.
Curse apache for changing the key in the first place :)
the version of 1.2.11.0 signed with the old key.
Sort out your own code out by removing any direct references to log4net (new key) and replace with a reference to the assembly signed with the old key.
Sort out any dependant assemblies you may have by including this segment in your web/app.config
&assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"&
&dependentAssembly&
&assemblyIdentity name="log4net" publicKeyToken="1b44e1d" culture="neutral" /&
&bindingRedirect oldVersion="0.0.0.0-1.2.10.0"
newVersion="1.2.11.0"/&
&/dependentAssembly&
&/assemblyBinding&
&/runtime&
本文地址: &
我们有一个asp.net 4.0的项目,它使用了几个框架,这是依赖于log4net的版本1.2.10.0。今天,我想有一个新的框架,这是依赖于log4net的版本1.2.11.0,我一直以来坚持不断:
log4net的1.2.10.0有公钥= 1b44e1d
log4net的1.2.11.0有公钥= 669e0ddf0bb1aa2a
由于这些是不同的,我不能用汇编语言重定向(使所有的框架使用相同版本的log4net的)或codeBase类(以刚才的新框架使用的版本1.2.11.0)通过网络运行的元素。配置。
什么是我选择这里?
(为什么喊来确实log4net的保持版本之间的变化publickeytokens,按照我的理解一个丢失的钥匙是为1.2.9.0版本1.2.10.0之间的切换的原因,他们才失去了关键的又一次?我会志愿者我的Dropbox,以保证它的安全,如果他们需要它...)
编辑:好了,所以log4net的家伙显然也有此想法,用两个键释放是个好主意,但是这意味着的每次的框架,您使用的需要达成一致的这两种风格的的他们preFER,或者这些框架不能并排在同一个AppDomain中携手并肩。我是唯一一个这一发现一个可怕的想法?如果每个人都这样做那么一切都将打破,对吧?
EDIT2:正如我所说,我不使用log4net的在我的生意code,我却用它依赖于1.2.10.0几个框架,问题出现了,当我试图用它依赖于一个新框架1.2.11.0(新密钥),所以Stefans回答不适用,因为新的框架将预计新的密钥,而不是旧的
解决方案 这是我得到的东西与1.2.11.0版本的工作。
诅咒阿帕奇改变的关键摆在首位:)
Download与旧密钥的1.2.11.0版本签名。
排序出你自己的code OUT通过删除log4net的(新密钥)的任何直接引用,并与参考使用旧密钥签名的组件进行更换。
搜索结果排序,你可能必须通过包括该段在你的网页所有相关组件/的app.config
<运行>
< assemblyBinding的xmlns =“瓮:架构 - 微软COM:asm.v1”>
< dependentAssembly>
< assemblyIdentity名=“log4net的”公钥=“1b44e1d”文化=“中性”/>
< bindingRedirect oldVersion =“0.0.0.0-1.2.10.0”
动态网页=“1.2.11.0”/>
< / dependentAssembly>
< / assemblyBinding>
< /运行>
本文地址: &
扫一扫关注官方微信Windows服务中调用log4net时,log4net无法读取配置文件
[问题点数:40分]
Windows服务中调用log4net时,log4net无法读取配置文件
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2011年4月 .NET技术大版内专家分月排行榜第二
2011年3月 .NET技术大版内专家分月排行榜第三
2011年4月 .NET技术大版内专家分月排行榜第二
2011年3月 .NET技术大版内专家分月排行榜第三
2010年 总版技术专家分年内排行榜第一2009年 总版技术专家分年内排行榜第一
2011年 总版技术专家分年内排行榜第二
本帖子已过去太久远了,不再提供回复功能。log4net引用出错
[问题点数:40分,结帖人zaocha321]
log4net引用出错
[问题点数:40分,结帖人zaocha321]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2012年3月 总版技术专家分月排行榜第一
2013年7月 荣获微软MVP称号
2012年2月 挨踢职涯大版内专家分月排行榜第三2011年11月 挨踢职涯大版内专家分月排行榜第三2011年10月 挨踢职涯大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。

我要回帖

更多关于 log4net sql server 的文章

 

随机推荐