在ASP .NET MVC下如何做日志

项目有在ASP .NET MVC下作日志并写到数据库里面的的需求,于是在网上搜寻资料,发现解决方法五花八门,把别人的东西放到自己的机器上,发现问题不能解决,搞了将近两天,终于解决了这个问题,在此记录下来 。

 

一,首先先解决写到一般文件里的问题:

解决步骤:

1.首先下载个log4net.dll.并放到你的reference中

2.在AssemblyInfo.cs最下面加入一行

   [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)],这里log4net.config是你将要

   放置一些配置的地方。这个文件放在项目的根目录下。内容为:

<textarea cols="50" rows="15" name="code" class="xhtml">&lt;?xml version=&quot;1.0&quot;?&gt; &lt;configuration&gt; &lt;configSections&gt; &lt;section name=&quot;log4net&quot; type=&quot;System.Configuration.IgnoreHandlerSection&quot;/&gt; &lt;/configSections&gt; &lt;log4net&gt; &lt;appender name=&quot;console&quot; type=&quot;log4net.Appender.ConsoleAppender&quot;&gt;&lt;/appender&gt; &lt;root&gt; &lt;level value=&quot;WARN&quot; /&gt; &lt;appender-ref ref=&quot;LogFileAppender&quot; /&gt; &lt;/root&gt; &lt;logger name=&quot;Test&quot;&gt; &lt;level value=&quot;DEBUG&quot;/&gt; &lt;/logger&gt; &lt;appender name=&quot;LogFileAppender&quot; type=&quot;log4net.Appender.FileAppender&quot; &gt; &lt;param name=&quot;File&quot; value=&quot;D:/Documents and Settings/E518731/log.txt&quot; /&gt; &lt;param name=&quot;AppendToFile&quot; value=&quot;true&quot; /&gt; &lt;layout type=&quot;log4net.Layout.PatternLayout&quot;&gt; &lt;param name=&quot;Header&quot; value=&quot;[Header]/r/n&quot;/&gt; &lt;param name=&quot;Footer&quot; value=&quot;[Footer]/r/n&quot;/&gt; &lt;param name=&quot;ConversionPattern&quot; value=&quot;%d [%t] %-5p %c [%x] - %m%n&quot;/&gt; &lt;/layout&gt; &lt;/appender&gt; &lt;/log4net&gt; &lt;/configuration&gt;</textarea>

3.Controller中的代码如此写:

<textarea cols="50" rows="15" name="code" class="c-sharp">public class HomeController : Controller { log4net.ILog log = log4net.LogManager.GetLogger(&quot;Test&quot;); public ActionResult Index() { log.Error(&quot;haha&quot;); return View(); } }</textarea>

这样你就可以写log到某个file里面了.

 

 

二,解决写自定义log到数据库里面的问题

1.首先下载个log4net.dll.并放到你的reference中

2.在Global.asax的Application_Start方法中加入如下一行

<textarea cols="50" rows="15" name="code" class="c-sharp">log4net.Config.XmlConfigurator.Configure();</textarea>

3.建立一个自定义的log对象

<textarea cols="50" rows="15" name="code" class="c-sharp">public class LogContent { public string contents; public int userId; }</textarea>

4.在Web.config的configSections中加入如下一节

<textarea cols="50" rows="15" name="code" class="xhtml">&lt;section name=&quot;log4net&quot; type=&quot;log4net.Config.Log4NetConfigurationSectionHandler, log4net&quot; /&gt;</textarea>

5.在configSections节外面加入如下

<textarea cols="50" rows="15" name="code" class="xhtml">&lt;log4net&gt; &lt;appender name=&quot;ADONetAppender&quot; type=&quot;log4net.Appender.ADONetAppender&quot;&gt; &lt;bufferSize value=&quot;0&quot; /&gt; &lt;connectionType value=&quot;System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089&quot; /&gt; &lt;connectionString value=&quot;server=ch71dtbfxt12x/SQLEXPRESS; uid=sa; pwd=password; database=ATMS&quot; /&gt; &lt;commandText value=&quot;INSERT INTO Logs ([createdAt],[contents],[userId],[severity]) VALUES (@log_date, @contents,@userId,@level)&quot; /&gt; &lt;parameter&gt; &lt;parameterName value=&quot;@log_date&quot; /&gt; &lt;dbType value=&quot;DateTime&quot; /&gt; &lt;layout type=&quot;log4net.Layout.RawTimeStampLayout&quot; /&gt; &lt;/parameter&gt; &lt;parameter&gt; &lt;parameterName value=&quot;@contents&quot; /&gt; &lt;dbType value=&quot;String&quot; /&gt; &lt;size value=&quot;256&quot; /&gt; &lt;layout type=&quot;ATMS.ATMSWeb.Log4Net.MyLayout&quot;&gt; &lt;conversionPattern value=&quot;%Contents&quot; /&gt; &lt;/layout&gt; &lt;/parameter&gt; &lt;parameter&gt; &lt;parameterName value=&quot;@userId&quot;/&gt; &lt;dbType value=&quot;Int32&quot;/&gt; &lt;layout type=&quot;ATMS.ATMSWeb.Log4Net.MyLayout&quot;&gt; &lt;conversionPattern value=&quot;%UserId&quot; /&gt; &lt;/layout&gt; &lt;/parameter&gt; &lt;parameter&gt; &lt;parameterName value=&quot;@level&quot; /&gt; &lt;dbType value=&quot;String&quot; /&gt; &lt;size value=&quot;256&quot; /&gt; &lt;layout type=&quot;log4net.Layout.PatternLayout&quot; value=&quot;%level&quot; /&gt; &lt;/parameter&gt; &lt;/appender&gt; &lt;root&gt; &lt;level value=&quot;DEBUG&quot; /&gt; &lt;appender-ref ref=&quot;ADONetAppender&quot; /&gt; &lt;/root&gt; &lt;/log4net&gt;</textarea>

6.新建一个文件,包含如下:

<textarea cols="50" rows="15" name="code" class="c-sharp">namespace ATMS.ATMSWeb.Log4Net { public class MyLayout : PatternLayout { public MyLayout() { this.AddConverter(&quot;Contents&quot;, typeof(ContentsPatternConverter)); this.AddConverter(&quot;UserId&quot;, typeof(UserIdPatternConverter)); } } public class ContentsPatternConverter : PatternLayoutConverter { override protected void Convert(TextWriter writer, LoggingEvent loggingEvent) { LogContent logMessage = loggingEvent.MessageObject as LogContent; if (logMessage != null) writer.Write(logMessage.contents); } } public class UserIdPatternConverter : PatternLayoutConverter { override protected void Convert(TextWriter writer, LoggingEvent loggingEvent) { LogContent logMessage = loggingEvent.MessageObject as LogContent; if (logMessage != null) writer.Write(logMessage.userId); } } } </textarea>

7.记日志的时候,如下写法:

<textarea cols="50" rows="15" name="code" class="c-sharp">private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); log.Error(new LogContent {contents=&quot;ss&quot;,userId=4 });</textarea>

这下子你就可以把日至写到数据库表中了.

具体的有些配置可能因人而异,比如数据库连接串的配置。有什么不明白的,欢迎留言

你可能感兴趣的:(mvc,.net,layout,asp,reference,log4net)