转载: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是你将要
放置一些配置的地方。这个文件放在项目的根目录下。内容为:
- <?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 });
这下子你就可以把日至写到数据库表中了.
具体的有些配置可能因人而异,比如数据库连接串的配置。