zoukankan      html  css  js  c++  java
  • 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();

      控制台

    运行测试

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

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

  • 相关阅读:
    hibernate关联关系(多对多)
    hibernate关联关系(一对多)
    hibernate主键生成策略
    hibernate01
    利用Struts2拦截器完成文件上传功能
    layui的CRUD案列
    Struts2的CRUD
    Git中.gitignore文件不起作用
    在 Visual Studio 中使用 Q# 进行量子编程
    Elasticsearch 搜索
  • 原文地址:https://www.cnblogs.com/OnlyTianXiang/p/11942505.html
Copyright © 2011-2022 走看看