在ASP .NET MVC下如何做日志
一,首先先解决写到一般文件里的问题:
解决步骤:
1.首先下载个log4net.dll.并放到你的reference中
2.在AssemblyInfo.cs最下面加入一行
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)],这里log4net.config是你将要
放置一些配置的地方。这个文件放在项目的根目录下。内容为:
<?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="System.Configuration.IgnoreHandlerSection"/> </configSections> <log4net> <appender name="console" type="log4net.Appender.ConsoleAppender"></appender> <root> <level value="WARN" /> <appender-ref ref="LogFileAppender" /> </root> <logger name="Test"> <level value="DEBUG"/> </logger> <appender name="LogFileAppender" type="log4net.Appender.FileAppender" > <param name="File" value="D:/Documents and Settings/E518731/log.txt" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="[Header]/r/n"/> <param name="Footer" value="[Footer]/r/n"/> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n"/> </layout> </appender> </log4net> </configuration>
3.Controller中的代码如此写:
public class HomeController : Controller { log4net.ILog log = log4net.LogManager.GetLogger("Test"); public ActionResult Index() { log.Error("haha"); return View(); } }
这样你就可以写log到某个file里面了.
二,解决写自定义log到数据库里面的问题
1.首先下载个log4net.dll.并放到你的reference中
2.在Global.asax的Application_Start方法中加入如下一行
log4net.Config.XmlConfigurator.Configure();
3.建立一个自定义的log对象
public class LogContent { public string contents; public int userId; }
4.在Web.config的configSections中加入如下一节
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
5.在configSections节外面加入如下
<log4net> <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender"> <bufferSize value="0" /> <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> <connectionString value="server=ch71dtbfxt12x/SQLEXPRESS; uid=sa; pwd=password; database=ATMS" /> <commandText value="INSERT INTO Logs ([createdAt],[contents],[userId],[severity]) VALUES (@log_date, @contents,@userId,@level)" /> <parameter> <parameterName value="@log_date" /> <dbType value="DateTime" /> <layout type="log4net.Layout.RawTimeStampLayout" /> </parameter> <parameter> <parameterName value="@contents" /> <dbType value="String" /> <size value="256" /> <layout type="ATMS.ATMSWeb.Log4Net.MyLayout"> <conversionPattern value="%Contents" /> </layout> </parameter> <parameter> <parameterName value="@userId"/> <dbType value="Int32"/> <layout type="ATMS.ATMSWeb.Log4Net.MyLayout"> <conversionPattern value="%UserId" /> </layout> </parameter> <parameter> <parameterName value="@level" /> <dbType value="String" /> <size value="256" /> <layout type="log4net.Layout.PatternLayout" value="%level" /> </parameter> </appender> <root> <level value="DEBUG" /> <appender-ref ref="ADONetAppender" /> </root> </log4net>
6.新建一个文件,包含如下:
namespace ATMS.ATMSWeb.Log4Net { public class MyLayout : PatternLayout { public MyLayout() { this.AddConverter("Contents", typeof(ContentsPatternConverter)); this.AddConverter("UserId", 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); } } }
7.记日志的时候,如下写法:
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); log.Error(new LogContent {contents="ss",userId=4 });
这下子你就可以把日至写到数据库表中了.