自己做项目学习大虾们写的一些工具类1

本文介绍了一个用于Winform应用的日志记录类,该类利用XML文件记录软件运行信息、系统异常及数据库异常。通过该方法,开发者能从客户端收集错误日志以定位问题。

 写在这分享一个xml的日志类,它是用来记录winform软件工作时日常信息,软件的系统异常和数据库异常的,

> 这个例子很好用,也让我们掌握了io类的file类使用和xml类的基本方法,我在项目中使用是为了当我的软件出现问题时可要求客户发送email当日的这个日志记录,这样你可能会知道自己的软件错在那行代码上

 

using System;

using System.Collections.Generic;

using System.Text;



using System.Xml;

using System.Data.SqlClient;

using System.Collections;

using System.Data;

using System.Web;

using System.IO;



namespace LANServer.Component

{



	public static class LogWriter

	{



		#region Private Fields

		private static XmlDocument xmlDocument = new XmlDocument();

		private static string xmlFileName = "";

		#endregion







		#region Private Methods



		private static bool HasChild(string name, XmlNode node)

		{

			XmlNodeList xmlnodelist = node.ChildNodes;

			foreach (XmlNode enode in xmlnodelist)

			{

				if (enode.Name.ToLower() == name.ToLower())

				{

					return true;

				}

			}

			return false;

		}

		private static string FormatInt(int num)

		{

			string formattedString = "";

			if (num <= 9)

			{

				formattedString = "0" + num.ToString();

			}

			else

			{

				formattedString = num.ToString();

			}



			return formattedString;

		}

		private static string GetFileName()

		{

			string year = DateTime.Now.Year.ToString();

			string month = FormatInt(DateTime.Now.Month);

			string day = FormatInt(DateTime.Now.Day);

            string path = "./Logs/";

			string file = path + "Log_" + year + month + day + ".xml";



			return file;

		}



		/**/

		/// <summary>

		/// create log file path

		/// </summary>

		private static void CreateLogFile()

		{

			string xmlRootElementStr = "<?xml version=/"1.0/" encoding=/"utf-8/"?>/r/n/r/n";

			xmlRootElementStr += "<Log>/r/n/r/n";

			xmlRootElementStr += "	<Server>/r/n/r/n";

			xmlRootElementStr += "		<Infomations>/r/n/r/n";

			xmlRootElementStr += "		</Infomations>/r/n/r/n";

			xmlRootElementStr += "	</Server>/r/n/r/n";

			xmlRootElementStr += "	<System>/r/n";

			xmlRootElementStr += "		<Exceptions>/r/n";

			xmlRootElementStr += "		</Exceptions>/r/n";

			xmlRootElementStr += "	</System>/r/n/r/n";

			xmlRootElementStr += "  <Sql>/r/n";

			xmlRootElementStr += "		<Exceptions>/r/n";

			xmlRootElementStr += "		</Exceptions>/r/n";

			xmlRootElementStr += "  </Sql>/r/n/r/n";

			xmlRootElementStr += "</Log>/r/n";

			xmlFileName = GetFileName();

			try

			{

				//if file inexistence,create a new log file and load this file

                if (!System.IO.Directory.Exists("Logs"))

				{

                    Directory.CreateDirectory("Logs");



					// File.Create(xmlFileName);



					byte[] xmlRootElementByte = System.Text.Encoding.Default.GetBytes(xmlRootElementStr);

					System.IO.FileStream fileStream = new FileStream(xmlFileName, FileMode.Create, FileAccess.ReadWrite);

					fileStream.Write(xmlRootElementByte, 0, xmlRootElementByte.Length);

					fileStream.Close();

					xmlDocument.Load(xmlFileName);

				}

				else

				{

					if (!System.IO.File.Exists(xmlFileName))

					{

						// File.Create(xmlFileName);

						byte[] xmlRootElementByte = System.Text.Encoding.Default.GetBytes(xmlRootElementStr);

						System.IO.FileStream fileStream = new System.IO.FileStream(xmlFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite);

						fileStream.Write(xmlRootElementByte, 0, xmlRootElementByte.Length);

						fileStream.Close();

						xmlDocument.Load(xmlFileName);

					}

					else

					{

						xmlDocument.Load(xmlFileName);

					}

				}

			}

			catch (Exception ex)

			{

				throw ex;

			}

		}

		#endregion





		#region Public Methods

		/**/

		/// <summary>

		/// record a system exception to log

		/// </summary>

		/// <param name="ex"></param>

		public static void AddSystemException(Exception ex)

		{

            try

            {

                //Get 

                CreateLogFile();



                XmlNode xmlNode = xmlDocument.SelectSingleNode("//System//Exceptions");

                if (!HasChild("exception", xmlNode))

                {

                    XmlElement exceptionNode = xmlDocument.CreateElement("exception");

                    XmlElement timeNode = xmlDocument.CreateElement("Time");

                    XmlElement messageNode = xmlDocument.CreateElement("Message");

                    XmlElement sourceNode = xmlDocument.CreateElement("Source");

                    XmlElement stacktraceNode = xmlDocument.CreateElement("StackTrace");





                    DateTime dateTime = DateTime.Now;

                    string messageString = ex.Message;

                    string sourceString = ex.Source;

                    string stacktrace = ex.StackTrace;



                    timeNode.InnerText = dateTime.ToString();

                    messageNode.InnerText = messageString;

                    sourceNode.InnerText = sourceString;

                    stacktraceNode.InnerText = stacktrace;



                    exceptionNode.AppendChild(timeNode);



                    exceptionNode.AppendChild(messageNode);

                    exceptionNode.AppendChild(sourceNode);

                    exceptionNode.AppendChild(stacktraceNode);

                    xmlNode.AppendChild(exceptionNode);

                }

                else

                {

                    XmlElement exceptionNode = xmlDocument.CreateElement("exception");

                    XmlElement timeNode = xmlDocument.CreateElement("Time");



                    XmlElement messageNode = xmlDocument.CreateElement("Message");

                    XmlElement sourceNode = xmlDocument.CreateElement("Source");

                    XmlElement stacktraceNode = xmlDocument.CreateElement("StackTrace");



                    DateTime dateTime = DateTime.Now;

                    string messageString = ex.Message;

                    string sourceString = ex.Source;

                    string stacktrace = ex.StackTrace;



                    timeNode.InnerText = dateTime.ToString();



                    messageNode.InnerText = messageString;

                    sourceNode.InnerText = sourceString;

                    stacktraceNode.InnerText = stacktrace;



                    exceptionNode.AppendChild(timeNode);



                    exceptionNode.AppendChild(messageNode);

                    exceptionNode.AppendChild(sourceNode);

                    exceptionNode.AppendChild(stacktraceNode);



                    xmlNode.AppendChild(exceptionNode);

                }





                xmlDocument.Save(xmlFileName);

            }

            catch (Exception e)

            {

                throw e;

            }

		}



        // record a sql exception to log

        public static void AddSqlException(Exception ex)

        {

            //Get

            try

            {

            CreateLogFile();



            XmlNode xmlNode = xmlDocument.SelectSingleNode("//Sql//Exceptions");

            if (!HasChild("exception", xmlNode))

            {

                XmlElement exceptionNode = xmlDocument.CreateElement("exception");

                XmlElement timeNode = xmlDocument.CreateElement("Time");



                XmlElement messageNode = xmlDocument.CreateElement("Message");

                XmlElement sourceNode = xmlDocument.CreateElement("Source");

                XmlElement stacktraceNode = xmlDocument.CreateElement("StackTrace");





                DateTime dateTime = DateTime.Now;

                string messageString = ex.Message;

                string sourceString = ex.Source;

                string stacktrace = ex.StackTrace;

                timeNode.InnerText = dateTime.ToString();

                messageNode.InnerText = messageString;

                sourceNode.InnerText = sourceString;

                stacktraceNode.InnerText = stacktrace;



                exceptionNode.AppendChild(timeNode);



                exceptionNode.AppendChild(messageNode);

                exceptionNode.AppendChild(sourceNode);

                exceptionNode.AppendChild(stacktraceNode);

                xmlNode.AppendChild(exceptionNode);

            }

            else

            {

                XmlElement exceptionNode = xmlDocument.CreateElement("exception");



                XmlElement timeNode = xmlDocument.CreateElement("Time");



                XmlElement messageNode = xmlDocument.CreateElement("Message");

                XmlElement sourceNode = xmlDocument.CreateElement("Source");

                XmlElement stacktraceNode = xmlDocument.CreateElement("StackTrace");





                DateTime dateTime = DateTime.Now;

                string messageString = ex.Message;

                string sourceString = ex.Source;

                string stacktrace = ex.StackTrace;



                timeNode.InnerText = dateTime.ToString();



                messageNode.InnerText = messageString;

                sourceNode.InnerText = sourceString;

                stacktraceNode.InnerText = stacktrace;



                exceptionNode.AppendChild(timeNode);



                exceptionNode.AppendChild(messageNode);

                exceptionNode.AppendChild(sourceNode);

                exceptionNode.AppendChild(stacktraceNode);



                xmlNode.AppendChild(exceptionNode);

            }





            xmlDocument.Save(xmlFileName);

         }

         catch (Exception e)

         {

             throw e;

         }

        }

        // record a sql exception to log

        public static void AddSqlException(Exception ex,string sqltxt)

        {

           try

           {

            //Get 

            CreateLogFile();



            XmlNode xmlNode = xmlDocument.SelectSingleNode("//Sql//Exceptions");

            if (!HasChild("exception", xmlNode))

            {

                XmlElement exceptionNode = xmlDocument.CreateElement("exception");

                XmlElement timeNode = xmlDocument.CreateElement("Time");



                XmlElement messageNode = xmlDocument.CreateElement("Message");

                XmlElement sourceNode = xmlDocument.CreateElement("Source");

                XmlElement stacktraceNode = xmlDocument.CreateElement("StackTrace");

                XmlElement sqltxtNode = xmlDocument.CreateElement("SQL_Text");





                DateTime dateTime = DateTime.Now;

                string messageString = ex.Message;

                string sourceString = ex.Source;

                string stacktrace = ex.StackTrace;

                timeNode.InnerText = dateTime.ToString();

                messageNode.InnerText = messageString;

                sourceNode.InnerText = sourceString;

                stacktraceNode.InnerText = stacktrace;

                sqltxtNode.InnerText = sqltxt;



                exceptionNode.AppendChild(timeNode); 

                exceptionNode.AppendChild(messageNode);

                exceptionNode.AppendChild(sourceNode);

                exceptionNode.AppendChild(stacktraceNode);

                exceptionNode.AppendChild(sqltxtNode);



                xmlNode.AppendChild(exceptionNode);

            }

            else

            {

                XmlElement exceptionNode = xmlDocument.CreateElement("exception");



                XmlElement timeNode = xmlDocument.CreateElement("Time");



                XmlElement messageNode = xmlDocument.CreateElement("Message");

                XmlElement sourceNode = xmlDocument.CreateElement("Source");

                XmlElement stacktraceNode = xmlDocument.CreateElement("StackTrace");

                XmlElement sqltxtNode = xmlDocument.CreateElement("SQL_Text");



                DateTime dateTime = DateTime.Now;

                string messageString = ex.Message;

                string sourceString = ex.Source;

                string stacktrace = ex.StackTrace;



                timeNode.InnerText = dateTime.ToString();



                messageNode.InnerText = messageString;

                sourceNode.InnerText = sourceString;

                stacktraceNode.InnerText = stacktrace;

                sqltxtNode.InnerText = sqltxt;



                exceptionNode.AppendChild(timeNode); 

                exceptionNode.AppendChild(messageNode);

                exceptionNode.AppendChild(sourceNode);

                exceptionNode.AppendChild(stacktraceNode);

                exceptionNode.AppendChild(sqltxtNode);



                xmlNode.AppendChild(exceptionNode);

            }





            xmlDocument.Save(xmlFileName);

             }

             catch (Exception e)

             {

                 throw e;

             }

        }







		public static void AddServerInfo(String msg, String src)

		{

            try

                {

			    //Get 

			    CreateLogFile();



			    XmlNode xmlNode = xmlDocument.SelectSingleNode("//Server//Infomations");

			    if (!HasChild("Info", xmlNode))

			    {

				    XmlElement infoNode = xmlDocument.CreateElement("Info");

				    XmlElement timeNode = xmlDocument.CreateElement("Time");

				    XmlElement messageNode = xmlDocument.CreateElement("Message");

				    XmlElement sourceNode = xmlDocument.CreateElement("Source");



				    DateTime dateTime = DateTime.Now;

				    string messageString = msg;

				    string sourceString = src;





				    timeNode.InnerText = dateTime.ToString();

				    messageNode.InnerText = messageString;

				    sourceNode.InnerText = sourceString;





				    infoNode.AppendChild(timeNode);

				    infoNode.AppendChild(messageNode);

				    infoNode.AppendChild(sourceNode);



				    xmlNode.AppendChild(infoNode);

			    }

			    else

			    {

				    XmlElement infoNode = xmlDocument.CreateElement("Info");

				    XmlElement timeNode = xmlDocument.CreateElement("Time");

				    XmlElement messageNode = xmlDocument.CreateElement("Message");

				    XmlElement sourceNode = xmlDocument.CreateElement("Source");



				    DateTime dateTime = DateTime.Now;

				    string messageString = msg;

				    string sourceString = src;



				    timeNode.InnerText = dateTime.ToString();

				    messageNode.InnerText = messageString;

				    sourceNode.InnerText = sourceString;





				    infoNode.AppendChild(timeNode);

				    infoNode.AppendChild(messageNode);

				    infoNode.AppendChild(sourceNode);

				    xmlNode.AppendChild(infoNode);

			    }





			    xmlDocument.Save(xmlFileName);

 

            }

            catch (Exception e)

            {

                throw e;

            }

		}







		#endregion

	}



}

下载前可以先看下教程 https://pan.quark.cn/s/16a53f4bd595 小天才电话手表刷机教程 — 基础篇 我们将为您简单的介绍小天才电话手表新机型的简单刷机以及玩法,如adb工具的使用,magisk的刷入等等。 我们会确保您看完此教程后能够对Android系统有一个最基本的认识,以及能够成功通过magisk root您的手表,并安装您需要的第三方软件。 ADB Android Debug Bridge,简称,在android developer的adb文档中是这么描述它的: 是一种多功能命令行工具,可让您与设备进行通信。 该命令有助于各种设备操作,例如安装和调试应用程序。 提供对 Unix shell 的访问,您可以使用它在设备上运行各种命令。 它是一个客户端-服务器程序。 这听起来有些难以理解,因为您也没有必要去理解它,如果您对本文中的任何关键名词产生疑惑或兴趣,您都可以在搜索引擎中去搜索它,当然,我们会对其进行简单的解释:是一款在命令行中运行的,用于对Android设备进行调试的工具,并拥有比一般用户以及程序更高的权限,所以,我们可以使用它对Android设备进行最基本的调试操作。 而在小天才电话手表上启用它,您只需要这么: - 打开拨号盘; - 输入; - 点按打开adb调试选项。 其次是电脑上的Android SDK Platform-Tools的安装,此工具是 Android SDK 的组件。 它包括与 Android 平台交互的工具,主要由和构成,如果您接触过Android开发,必然会使用到它,因为它包含在Android Studio等IDE中,当然,您可以独立下载,在下方选择对应的版本即可: - Download SDK Platform...
已经博主授权,源码转载自 https://pan.quark.cn/s/b24469074755 SmartDNS English SmartDNS SmartDNS 是一个运行在本地的 DNS 服务器,它接受来自本地客户端的 DNS 查询请求,然后从多个上游 DNS 服务器获取 DNS 查询结果,并将访问速度最快的结果返回给客户端,以此提高网络访问速度。 SmartDNS 同时支持指定特定域名 IP 地址,并高性匹配,可达到过滤广告的效果; 支持DOT,DOH,DOQ,DOH3,更好的保护隐私。 与 DNSmasq 的 all-servers 不同,SmartDNS 返回的是访问速度最快的解析结果。 支持树莓派、OpenWrt、华硕路由器原生固件和 Windows 系统等。 使用指导 SmartDNS官网:https://pymumu..io/smartdns 软件效果展示 仪表盘 SmartDNS-WebUI 速度对比 阿里 DNS 使用阿里 DNS 查询百度IP,并检测结果。 SmartDNS 使用 SmartDNS 查询百度 IP,并检测结果。 从对比看出,SmartDNS 找到了访问 最快的 IP 地址,比阿里 DNS 速度快了 5 倍。 特性 多虚拟DNS服务器 支持多个虚拟DNS服务器,不同虚拟DNS服务器不同的端口,规则,客户端。 多 DNS 上游服务器 支持配置多个上游 DNS 服务器,并同时进行查询,即使其中有 DNS 服务器异常,也不会影响查询。 支持每个客户端独立控制 支持基于MAC,IP地址控制客户端使用不同查询规则,可实现家长控制等功能。 返回最快 IP 地址 支持从域名所属 IP 地址列表中查找到访问速度最快的 IP 地址,并返回给客户端,提高...
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值