MVC 控制台 +log4net 存入数据库

首先在你的项目 安装好 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="0" />

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

    <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="100" />

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

        <conversionPattern value="%t" />

      </layout>

    </parameter>

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

    <parameter>

      <parameterName value="@log_level" />

      <dbType value="String" />

      <size value="200" />

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

        <conversionPattern value="%p" />

      </layout>

    </parameter>

    <!--日志名称-->

    <parameter>

      <parameterName value="@logger" />

      <dbType value="String" />

      <size value="500" />

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

        <conversionPattern value="%logger" />

      </layout>

    </parameter>

    <parameter>

      <parameterName value="@message" />

      <dbType value="String" />

      <size value="3000" />

      <layout type="Log4net.MyLayout">

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

      </layout>

    </parameter>

    <parameter>

      <parameterName value="@ActionsClick" />

      <dbType value="String" />

      <size value="4000" />

      <layout type="Log4net.MyLayout" >

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

      </layout>

    </parameter>

    <!--自定义UserName -->

    <parameter>

      <parameterName value="@UserName" />

      <dbType value="String" />

      <size value="30" />

      <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="20" />

      <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="10" />-->



    <!--是否只写到一个文件中-->

    <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();

  控制台

运行测试

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

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

原文地址:https://www.cnblogs.com/OnlyTianXiang/p/11942505.html