• winform 应用log4net做日志记录到mysql


    1.nuget装log4net

    2.nuget控件台装 mysql.data

      Install-Package mysql.data -version 6.8.3 (太高的版本用不了,切记)

    3.修改app.config文件,在configuration节点下添加

    <system.data>
        <DbProviderFactories>
          <remove invariant="MySql.Data.MySqlClient" />
          <add name="MySQL Data Provider" invariant="MySql.Data.MySqlClient" description=".Net Framework Data Provider for MySQL" type="MySql.Data.MySqlClient.MySqlConnection, MySql.Data, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
        </DbProviderFactories>
      </system.data>
    using MySql.Data.MySqlClient;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    
    namespace Common
    {
        public class LogHelper
        {
            public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo");
    
            public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror");
    
            public static void WriteLog(string info)
            {
                if (loginfo.IsInfoEnabled)
                {
                    loginfo.Info(info);
                }
            }
            /// <summary>
            /// 错误记录
            /// </summary>
            /// <param name="info">附加信息</param>
            /// <param name="ex">错误</param>
            public static void ErrorLog(string info, Exception ex)
            {
                if (!string.IsNullOrEmpty(info) && ex == null)
                {
                    logerror.ErrorFormat("【附加信息】 : {0}<br>", new object[] { info });
                }
                else if (!string.IsNullOrEmpty(info) && ex != null)
                {
                    string errorMsg = BeautyErrorMsg(ex);
                    logerror.ErrorFormat("【附加信息】 : {0}<br>{1}", new object[] { info, errorMsg });
                }
                else if (string.IsNullOrEmpty(info) && ex != null)
                {
                    string errorMsg = BeautyErrorMsg(ex);
                    logerror.Error(errorMsg);
                }
            }
            /// <summary>
            /// 美化错误信息
            /// </summary>
            /// <param name="ex">异常</param>
            /// <returns>错误信息</returns>
            private static string BeautyErrorMsg(Exception ex)
            {
                string errorMsg = string.Format("【异常类型】:{0} <br>【异常信息】:{1} <br>【堆栈调用】:{2}", new object[] { ex.GetType().Name, ex.Message, ex.StackTrace });
                errorMsg = errorMsg.Replace("
    ", "<br>");
                errorMsg = errorMsg.Replace("位置", "<strong style="color:red">位置</strong>");
                return errorMsg;
            }
    
    
    
        }
    }
    using Common;
    using log4net.Appender;
    using log4net.Config;
    using log4net.Layout;
    using System;
    using System.Collections.Generic;
    using System.Data;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Windows.Forms;
    namespace testLog4N
    {
        public class LogExceptionHandle
        {
            private static string _ConnectionString = "server=xxx;port=3306;database=xxx;uid=xxx;pwd=xxx;";
            /// <summary>
            /// 绑定程序中的异常处理
            /// </summary>
            public static void BindExceptionHandler()
            {
                //设置应用程序处理异常方式:ThreadException处理
                Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
                //处理UI线程异常
                Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);
                //处理未捕获的异常
                AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);
                //加载log4net组件
                LoadADONetAppender();
            }
            /// <summary>
            /// 处理UI线程异常
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
            {
                LogHelper.ErrorLog(null, e.Exception as Exception);
            }
            /// <summary>
            /// 处理未捕获的异常
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            static void CurrentDomain_UnhandledException(object sender, UnhandledExceptionEventArgs e)
            {
                LogHelper.ErrorLog(null, e.ExceptionObject as Exception);
            }
            /// <summary>
            /// 使用SQLSERVER记录异常日志
            /// </summary>
            /// <Author>Ryanding</Author>
            /// <date>2011-05-01</date>
            public static void LoadADONetAppender()
            {
    
    
                log4net.Repository.Hierarchy.Hierarchy hier =
                  log4net.LogManager.GetRepository() as log4net.Repository.Hierarchy.Hierarchy;
    
                if (hier != null)
                {
                    log4net.Appender.AdoNetAppender adoAppender = new log4net.Appender.AdoNetAppender();
                    adoAppender.Name = "AdoNetAppender";
                    adoAppender.CommandType = CommandType.Text;
                    adoAppender.BufferSize = 1;
                    adoAppender.ConnectionType = "MySql.Data.MySqlClient.MySqlConnection, MySql.Data, Version=6.8.3.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d";
                    adoAppender.ConnectionString = _ConnectionString;
                    adoAppender.CommandText = @"INSERT INTO `ddylog` (`Date`, `Thread`, `Level`, `Logger`, `Method`, `Location`,`Message`,`Exception`) VALUES (@Date, @Thread, @Level, @Logger, @Method,@Location,@Message,@Exception)";
                    adoAppender.AddParameter(new AdoNetAppenderParameter
                    {
                        ParameterName = "@Date",
                        DbType = System.Data.DbType.DateTime,
                        Layout = new log4net.Layout.RawTimeStampLayout()
                    });
                    adoAppender.AddParameter(new AdoNetAppenderParameter
                    {
                        ParameterName = "@Thread",
                        DbType = System.Data.DbType.String,
                        Size = 255,
                        Layout = new Layout2RawLayoutAdapter(
                            new PatternLayout("%thread")
                            )
                    });
                    adoAppender.AddParameter(new AdoNetAppenderParameter
                    {
                        ParameterName = "@Level",
                        DbType = System.Data.DbType.String,
                        Size = 50,
                        Layout = new Layout2RawLayoutAdapter(
                            new PatternLayout("%level")
                            )
                    });
                    adoAppender.AddParameter(
                        new AdoNetAppenderParameter
                        {
                            ParameterName = "@Logger",
                            DbType = System.Data.DbType.String,
                            Size = 255,
                            Layout = new Layout2RawLayoutAdapter(
                                new PatternLayout("%logger")
                                )
                        });
                    adoAppender.AddParameter(new AdoNetAppenderParameter
                    {
                        ParameterName = "@Method",
                        DbType = System.Data.DbType.String,
                        Size = 255,
                        Layout = new Layout2RawLayoutAdapter(new PatternLayout("%method")
                        )
                    });
                    adoAppender.AddParameter(new AdoNetAppenderParameter
                    {
                        ParameterName = "@Location",
                        DbType = System.Data.DbType.String,
                        Size = 255,
                        Layout = new Layout2RawLayoutAdapter(
                            new PatternLayout("%location")
                            )
                    });
                    adoAppender.AddParameter(
                        new AdoNetAppenderParameter
                        {
                            ParameterName = "@Message",
                            DbType = System.Data.DbType.String,
                            Size = 4000,
                            Layout = new Layout2RawLayoutAdapter(
                                new PatternLayout("%message")
                                )
                        });
                    adoAppender.AddParameter(
                        new AdoNetAppenderParameter
                        {
                            ParameterName = "@Exception",
                            DbType = System.Data.DbType.String,
                            Size = 4000,
                            Layout = new Layout2RawLayoutAdapter(new ExceptionLayout()
                            )
                        });
                    adoAppender.ActivateOptions();
                    BasicConfigurator.Configure(adoAppender);
                }
            }
            /// <summary>
            /// 使用文本记录异常日志
            /// </summary>
            /// <Author>Ryanding</Author>
            /// <date>2011-05-01</date>
            public static void LoadFileAppender()
            {
                string currentPath = AppDomain.CurrentDomain.BaseDirectory;
                string txtLogPath = string.Empty;
                string iisBinPath = AppDomain.CurrentDomain.RelativeSearchPath;
    
                if (!string.IsNullOrEmpty(iisBinPath))
                    txtLogPath = Path.Combine(iisBinPath, "ErrorLog.html");
                else
                    txtLogPath = Path.Combine(currentPath, "ErrorLog.html");
    
                log4net.Repository.Hierarchy.Hierarchy hier =
                 log4net.LogManager.GetRepository() as log4net.Repository.Hierarchy.Hierarchy;
    
                FileAppender fileAppender = new FileAppender();
                fileAppender.Name = "LogFileAppender";
                fileAppender.File = txtLogPath;
                fileAppender.AppendToFile = true;
    
                PatternLayout patternLayout = new PatternLayout();
                patternLayout.ConversionPattern = "&lt;HR COLOR=red&gt;%n【异常时间】:%d [%t] &lt;BR&gt;%n【异常级别】:%-5p &lt;BR&gt;%n【异 常 类】:%c [%x] &lt;BR&gt;%n%m &lt;BR&gt;%n &lt;HR Size=1&gt;";
                patternLayout.ActivateOptions();
                fileAppender.Layout = patternLayout;
    
                //选择UTF8编码,确保中文不乱码。
                fileAppender.Encoding = Encoding.UTF8;
    
                fileAppender.ActivateOptions();
                BasicConfigurator.Configure(fileAppender);
    
            }
        }
    }

    使用:

     LogExceptionHandle.BindExceptionHandler();//绑定程序中的异常处理

  • 相关阅读:
    Docker学习(一)
    mysql定时任务
    如何查看电脑是几核的?
    卸载Mysql connect 6.9.9
    找不到该项目怎么删除
    jmeter录制app脚本
    postman使用
    排查linux系统是否被入侵
    部署apache-tomcat环境
    sudo初级授权设置
  • 原文地址:https://www.cnblogs.com/gaocong/p/8945687.html
Copyright © 2020-2023  润新知