在ASP.NET的MVC下如何做日志

转载:http://blog.csdn.net/xutao_ustc/article/details/6055899


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

解决步骤:

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

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

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

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

[xhtml]  view plain copy
  1. <?xml version="1.0"?>  
  2. <configuration>  
  3.   <configSections>  
  4.     <section name="log4net" type="System.Configuration.IgnoreHandlerSection"/>  
  5.   </configSections>  
  6.   <log4net>  
  7.     <appender name="console" type="log4net.Appender.ConsoleAppender"></appender>  
  8.     <root>  
  9.       <level value="WARN" />  
  10.       <appender-ref ref="LogFileAppender" />  
  11.     </root>  
  12.     <logger name="Test">  
  13.       <level value="DEBUG"/>  
  14.     </logger>  
  15.     <appender name="LogFileAppender" type="log4net.Appender.FileAppender" >  
  16.       <param name="File" value="D:/Documents and Settings/E518731/log.txt" />  
  17.       <param name="AppendToFile" value="true" />  
  18.       <layout type="log4net.Layout.PatternLayout">  
  19.         <param name="Header" value="[Header]/r/n"/>  
  20.         <param name="Footer" value="[Footer]/r/n"/>  
  21.         <param name="ConversionPattern" value="%d [%t] %-5p %c [%x]  - %m%n"/>  
  22.       </layout>  
  23.     </appender>  
  24.   </log4net>  
  25.    
  26. </configuration>  

3.Controller中的代码如此写:

[c-sharp]  view plain copy
  1. public class HomeController : Controller  
  2.     {  
  3.         log4net.ILog log = log4net.LogManager.GetLogger("Test");  
  4.           
  5.         public ActionResult Index()  
  6.         {  
  7.             log.Error("haha");  
  8.             return View();  
  9.         }  
  10.     }  

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

 

 

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

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

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

[c-sharp]  view plain copy
  1. log4net.Config.XmlConfigurator.Configure();  

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

[c-sharp]  view plain copy
  1. public class LogContent  
  2. {  
  3.     public string contents;  
  4.     public int userId;  
  5. }  

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

[xhtml]  view plain copy
  1. <section name="log4net"       type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />  

5.在configSections节外面加入如下

[xhtml]  view plain copy
  1. <log4net>  
  2.     <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">  
  3.           <bufferSize value="0" />  
  4.           <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />  
  5.           <connectionString value="server=ch71dtbfxt12x/SQLEXPRESS; uid=sa; pwd=password; database=ATMS" />  
  6.           <commandText value="INSERT INTO Logs ([createdAt],[contents],[userId],[severity]) VALUES   
  7.            (@log_date,  @contents,@userId,@level)" />  
  8.             
  9.           <parameter>  
  10.             <parameterName value="@log_date" />  
  11.             <dbType value="DateTime" />  
  12.             <layout type="log4net.Layout.RawTimeStampLayout" />  
  13.           </parameter>              
  14.             
  15.           <parameter>  
  16.             <parameterName value="@contents" />  
  17.             <dbType value="String" />  
  18.             <size value="256" />  
  19.             <layout type="ATMS.ATMSWeb.Log4Net.MyLayout">  
  20.               <conversionPattern value="%Contents" />  
  21.             </layout>  
  22.           </parameter>  
  23.             
  24.           <parameter>  
  25.             <parameterName value="@userId"/>  
  26.             <dbType value="Int32"/>  
  27.             <layout type="ATMS.ATMSWeb.Log4Net.MyLayout">  
  28.               <conversionPattern value="%UserId" />  
  29.             </layout>  
  30.           </parameter>  
  31.           <parameter>  
  32.             <parameterName value="@level" />  
  33.             <dbType value="String" />  
  34.             <size value="256" />  
  35.             <layout type="log4net.Layout.PatternLayout" value="%level" />  
  36.           </parameter>  
  37.       </appender>  
  38.     <root>  
  39.       <level value="DEBUG" />  
  40.       <appender-ref ref="ADONetAppender" />  
  41.     </root>  
  42.   </log4net>  

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

[c-sharp]  view plain copy
  1. namespace ATMS.ATMSWeb.Log4Net  
  2. {  
  3.     public class MyLayout : PatternLayout     
  4.     {     
  5.         public MyLayout()     
  6.         {  
  7.             this.AddConverter("Contents"typeof(ContentsPatternConverter));  
  8.             this.AddConverter("UserId"typeof(UserIdPatternConverter));    
  9.         }     
  10.     }  
  11.     public class ContentsPatternConverter : PatternLayoutConverter     
  12.     {  
  13.         override protected void Convert(TextWriter writer, LoggingEvent loggingEvent)  
  14.         {  
  15.             LogContent logMessage = loggingEvent.MessageObject as LogContent;  
  16.             if (logMessage != null)  
  17.                 writer.Write(logMessage.contents);  
  18.         }  
  19.     }  
  20.     public class UserIdPatternConverter : PatternLayoutConverter  
  21.     {  
  22.         override protected void Convert(TextWriter writer, LoggingEvent loggingEvent)  
  23.         {  
  24.             LogContent logMessage = loggingEvent.MessageObject as LogContent;  
  25.             if (logMessage != null)  
  26.                 writer.Write(logMessage.userId);  
  27.         }  
  28.     }  
  29. }  

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

[c-sharp]  view plain copy
  1. private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);  
  2. log.Error(new LogContent {contents="ss",userId=4 });  

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

具体的有些配置可能因人而异,比如数据库连接串的配置。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值