首先在你的项目 安装好 log4net包

如下图进入AssemblyInfo.cs类

代码里面 加上这一串

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]

创建一个log4net.config配置文件

写入代码  自行更换你的数据库名称 列表 对应名称 注意

<log4net>

  <!-- name属性指定其名称,type则是log4net.Appender命名空间的一个类的名称,意思是,指定使用哪种介质-->

  <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">

    <!--日志缓存写入条数 设置为0时只要有一条就立刻写到数据库-->

    <bufferSize value="" />

    <!--日志数据库连接串-->

    <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

    <connectionString value="DATABASE=log4net;SERVER=.;UID=sa;PWD=sa;Connect Timeout=30;" />

    <!--日志数据库脚本-->

    <commandText value="INSERT INTO LogDetails ([LogDate],[LogThread],[LogLevel],[LogLogger],[LogActionClick],[LogMessage],[UserName],[UserIP]) VALUES (@log_date, @thread, @log_level, @logger, @ActionsClick, @message,@UserName,@UserIP)" />

    <!--日志时间LogDate -->

    <parameter>

      <parameterName value="@log_date" />

      <dbType value="DateTime" />

      <layout type="log4net.Layout.RawTimeStampLayout" />

    </parameter>

    <!--线程号-->

    <parameter>

      <parameterName value="@thread" />

      <dbType value="String" />

      <size value="" />

      <layout type="log4net.Layout.PatternLayout">

        <conversionPattern value="%t" />

      </layout>

    </parameter>

    <!--日志类型LogLevel -->

    <parameter>

      <parameterName value="@log_level" />

      <dbType value="String" />

      <size value="" />

      <layout type="log4net.Layout.PatternLayout">

        <conversionPattern value="%p" />

      </layout>

    </parameter>

    <!--日志名称-->

    <parameter>

      <parameterName value="@logger" />

      <dbType value="String" />

      <size value="" />

      <layout type="log4net.Layout.PatternLayout">

        <conversionPattern value="%logger" />

      </layout>

    </parameter>

    <parameter>

      <parameterName value="@message" />

      <dbType value="String" />

      <size value="" />

      <layout type="Log4net.MyLayout">

        <conversionPattern value="%property{Message}" />

      </layout>

    </parameter>

    <parameter>

      <parameterName value="@ActionsClick" />

      <dbType value="String" />

      <size value="" />

      <layout type="Log4net.MyLayout" >

        <conversionPattern value = "%property{ActionsClick}"/>

      </layout>

    </parameter>

    <!--自定义UserName -->

    <parameter>

      <parameterName value="@UserName" />

      <dbType value="String" />

      <size value="" />

      <layout type="Log4net.MyLayout" >

        <!--log4net.MDC.Set("UserName", "asdfasdf");

<conversionPattern value = "%X{UserName}"/>-->

        <conversionPattern value = "%property{UserName}"/>

      </layout>

    </parameter>

    <parameter>

      <parameterName value="@UserIP" />

      <dbType value="String" />

      <size value="" />

      <layout type="Log4net.MyLayout" >

        <conversionPattern value = "%property{UserIP}"/>

      </layout>

    </parameter>

  </appender>

  <!-- setup the root category, add the appenders and set the default level -->

  <root>

    <level value="Warn"/>
<!-- 定义记录的日志级别--> <level value="Info"/> <level value="Debug"/> <level value="Fine"/> <appender-ref ref="ADONetAppender" />
<!-- 记录到什么介质中--> </root> <!-- specify the level for some specific categories --> <!--//关于上边root到logger这块,如果同时出现,有可能会出现重复插入记录的情况:--> <!--<logger name="iNotes"> <level value="WARN"/> <level value="INFO"/> <level value="DEBUG"/> <level value="FINE"/> <appender-ref ref="ADONetAppender"/> </logger> <logger name="StellaLogger"> <level value="ALL"/> <appender-ref ref="AdoNetAppender" /> </logger>--> <appender name="ReflectionLayout" type="log4net.Appender.RollingFileAppender,log4net"> <!--日志文件路径,按文件大小方式输出时在这里指定文件名,并且前面的日志按天在文件名后自动添加当天日期形成文件--> <param name="File" value="D:/Log/" /> <!--是否追加到文件--> <param name="AppendToFile" value="true" /> <!--记录日志写入文件时,不锁定文本文件--> <!--<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />--> <!--Unicode编码--> <!--<Encoding value="UTF-8" />--> <!--最多产生的日志文件数,value="-1"为不限文件数--> <!--<param name="MaxSizeRollBackups" value="" />--> <!--是否只写到一个文件中--> <param name="StaticLogFileName" value="false" /> <!--按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])--> <param name="RollingStyle" value="Composite" /> <!--按日期产生文件夹,文件名[在日期方式与混合方式下使用]--> <param name="DatePattern" value="yyyy-MM-dd/" ReflectionLayout.log="" /> <!--<param name="DatePattern" value="yyyyMMdd/yyyyMMdd"-TimerServer.log"" />--> <!--<param name="DatePattern" value="yyyyMMdd/"TimerServer/TimerServer.log"" />--> <!--每个文件的大小。只在混合方式与文件大小方式下使用,超出大小的在文件名后自动增加1重新命名--> <param name="maximumFileSize" value="500KB" /> <!--记录的格式。--> <layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog"> <param name="ConversionPattern" value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 记录类:%logger 操作者ID:%property{Operator} 操作类型:%property{Action}%n 当前机器名:%property%n当前机器名及登录用户:%username %n 记录位置:%location%n 消息描述:%property{Message}%n 异常:%exception%n 消息:%message%newline%n%n" /> </layout> </appender>
</log4net>

  在App.config文件

引入

  

//这段是必须的
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
//这是引入刚才写的配置文件
<log4net configSource="log4net.config"/>

然后创建一个LogHelper类

代码

public class LogHelper
{
public static readonly ILog loginfo = LogManager.GetLogger("INFO");
public static readonly ILog logerror = LogManager.GetLogger("ERROR");
public static readonly ILog logwarn = LogManager.GetLogger("WARN");
public static readonly ILog logfatal = LogManager.GetLogger("FATAL");
public static readonly ILog logdebug = LogManager.GetLogger("DEBUG"); public static void Info(LogContent content)
{
loginfo.Info(content);
}
public static void Error(LogContent content, Exception ex)
{
logerror.Error(content, ex);
}
public static void Warn(LogContent content)
{
logwarn.Warn(content);
}
public static void Fatal(LogContent content)
{
logfatal.Fatal(content);
}
public static void Debug(LogContent content)
{
logdebug.Debug(content);
}
}

  再创建一个LogPublicClass类

/// <summary>
/// 包含了所有的自定字段属性
/// </summary>
public class LogContent
{
public LogContent(string macAddress, string computerName, string actionsclick, string description)
{ UserIP = macAddress; UserName = computerName; ActionsClick = actionsclick; Message = description;
}
/// <summary> /// 访问IP /// </summary> public string UserIP { get; set; } /// <summary> /// 系统登陆用户 /// </summary> public string UserName { get; set; } /// <summary> /// 动作事件 /// </summary> public string ActionsClick { get; set; } /// <summary> /// 日志描述信息 /// </summary> public string Message { get; set; }
}
public class MyLayout : PatternLayout
{
public MyLayout()
{
this.AddConverter("property", typeof(LogInfoPatternConverter));
}
}
public class LogInfoPatternConverter : PatternLayoutConverter
{
protected override void Convert(System.IO.TextWriter writer, log4net.Core.LoggingEvent loggingEvent)
{
if (Option != null)
{
WriteObject(writer, loggingEvent.Repository, LookupProperty(Option, loggingEvent));
}
else
{
WriteDictionary(writer, loggingEvent.Repository, loggingEvent.GetProperties());
}
}
private object LookupProperty(string property, log4net.Core.LoggingEvent loggingEvent)
{
object propertyValue = string.Empty;
PropertyInfo propertyInfo = loggingEvent.MessageObject.GetType().GetProperty(property);
if (propertyInfo != null)
propertyValue = propertyInfo.GetValue(loggingEvent.MessageObject, null);
return propertyValue;
}
}

  如果是MVC WebAPI 就在 global.asax 文件 放入这行

//应用程序启动时,自动加载配置log4Net
XmlConfigurator.Configure();

  控制台

运行测试

这是几个月前的  当时看的那篇博客 忘记了

感觉行的话就 点一下推荐 谢谢

MVC 控制台 +log4net 存入数据库的更多相关文章

  1. WebAPI + log4net日志 存入数据库

    1.首先选择你的项目 打开net管理控制台 输入 install-package log4net 进行安装  也可以 在net包 搜索 log4net 2.安装完之后 在Models文件夹 创建一个L ...

  2. c#代码 天气接口 一分钟搞懂你的博客为什么没人看 看完python这段爬虫代码,java流泪了c#沉默了 图片二进制转换与存入数据库相关 C#7.0--引用返回值和引用局部变量 JS直接调用C#后台方法(ajax调用) Linq To Json SqlServer 递归查询

    天气预报的程序.程序并不难. 看到这个需求第一个想法就是只要找到合适天气预报接口一切都是小意思,说干就干,立马跟学生沟通价格. ​ ​不过谈报价的过程中,差点没让我一口老血喷键盘上,话说我们程序猿的人 ...

  3. MVC4.0 上传Excel并存入数据库

    这里的这个功能实现在WebForm很好实现,上传阶段简单的一个FileUoLoad控件就搞定了,什么取值,什么上传都是浮云,微软都帮我们封装好了,我们只需要一拖一拽就OK了,但这些在MVC中是不行的! ...

  4. 关于json格式字符串解析并用mybatis存入数据库

    园子里面找了很多关于json解析后存入数据库的方法,不是太乱,就是没有写完,我下面的主题代码多是受下面两位的启发,请按顺序查看 http://www.cnblogs.com/tian830937/p/ ...

  5. session 存入数据库 php

     session 机制 1.php中session的生成机制 session是保存在服务器的,当我们在代码中调用session_start();时,PHP会同时往SESSION的存放目录(默认为/tm ...

  6. asp.net将图片转成二进制存入数据库

    一.代码如下 int code = int.Parse(this.TextBox1.Text);//图片编码 string value = this.FileUpload1.PostedFile.Fi ...

  7. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  8. 解决:HTML中多文本域(textarea)回车后数据存入数据库,EL表达式取出异常。

    问题描述: 当多文本域(textarea)回车后数据存入数据库. EL表达式取出异常,值换行倒置页面报错. 问题解决: 存值脚本代码,提交前转换\n为<br/>. <script t ...

  9. 使用所见即所得文本编辑器编辑文本存入数据库后通过ajax获取服务器json_encode的数据到前台,文本内容上边的html标签不解析

    使用所见即所得文本编辑器编辑文本存入数据库后通过ajax获取服务器json_encode的数据到前台,文本内容上边的html标签不解析 因为我在前台使用了jquery的text()方法,而不是html ...

随机推荐

  1. luogu P4343 [SHOI2015]自动刷题机 |二分答案

    题目描述 曾经发明了信号增幅仪的发明家 SHTSC 又公开了他的新发明:自动刷题机--一种可以自动 AC 题目的神秘装置. 自动刷题机刷题的方式非常简单:首先会瞬间得出题目的正确做法,然后开始写程序. ...

  2. luogu P2507 [SCOI2008]配对

    题目描述 你有 n 个整数Ai和n 个整数Bi.你需要把它们配对,即每个Ai恰好对应一个Bp[i].要求所有配对的整数差的绝对值之和尽量小,但不允许两个相同的数配对.例如A={5,6,8},B={5, ...

  3. 学习go第一天-编写第一个go程序

    开发环境构建 GOPATH 在1.8版本前必须设置这个环境变量 1.8以及更高版本如果没有设置,则使用默认值在Mac上GOPATH可以通过修改 -/.bash_profile来设置 程序基本结构 pa ...

  4. HDU1079 Calender Game

    Adam and Eve enter this year’s ACM International Collegiate Programming Contest. Last night, they pl ...

  5. UVA-156

    Most crossword puzzle fans are used to anagrams - groups of words with the same letters in different ...

  6. Swift Playground词法分析器DEMO

    正在看极客时间宫文学老师的编译原理之美,用swift playground写了一个第二课"int age >= 45"的词法解析DEMO 为了保持原课程代码,DEMO用了顺序 ...

  7. Hadoop完全分布式集群搭建

    Hadoop的运行模式 Hadoop一般有三种运行模式,分别是: 单机模式(Standalone Mode),默认情况下,Hadoop即处于该模式,使用本地文件系统,而不是分布式文件系统.,用于开发和 ...

  8. CrazyBingo mini VIP 2.0 视频开发板 NIOS移植例程(原创)

    创建一个NIOS环境 注意事项 前言:(先了解下硬件) 本板卡目前主要适合以下几类人: (1)对FPGA 逻辑开发有强烈的兴趣,并且有一定的HDL基础 (2)计划采用FPGA图像架构,学习并研究图像算 ...

  9. art-template模板判断

    1.添加模板 <script id="userinfo" type="text/template">           {{ if id == n ...

  10. solr索引基本原理

    solr是一个全局检索引擎,能够快速地从大量的文本数据中选出你所需要的数据,而你只需要提供相应的关键词进行检索.solr的高效率查询靠的是底层强大的索引库,所以solr最关键的技术也是其底层的索引设计 ...