VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • C#教程之记录日志(日志处理)

1.对方法的调用:

对日志加以分类处理,是的在项目中排查问题时,能够快速准确地定位错误,并迅速解决,从而极大程度上提高效率,利于整体的工作的开展。

  • TimeSpan理解:

private string DateDiff(DateTime DateTime1, DateTime DateTime2)
{string dateDiff = null; 
  TimeSpan ts = DateTime1.Subtract(DateTime2).Duration(); dateDiff = ts.Days.ToString()+"天"+ ts.Hours.ToString()+"小时"+ ts.Minutes.ToString()+"分钟"+ ts.Seconds.ToString()+"秒";
return dateDiff;
}

(1)DateTime值类型代表了一个从公元0001年1月1日0点0分0秒到公元9999年12月31日23点59分59秒之间的具体日期时刻。因此,你可以用DateTime值类型来描述任何在想象范围之内的时间。

一个DateTime值代表了一个具体的时刻 ;

(2)TimeSpan值包含了许多属性与方法,用于访问或处理一个TimeSpan值

下面的列表涵盖了其中的一部分:

Add:与另一个TimeSpan值相加; Days:返回用天数计算的TimeSpan值。 Duration:获取TimeSpan的绝对值; 

Hours:返回用小时计算的TimeSpan值 ;Milliseconds:返回用毫秒计算的TimeSpan值; Minutes:返回用分钟计算的TimeSpan值;

Negate:返回当前实例的相反数; Seconds:返回用秒计算的TimeSpan值;Subtract:从中减去另一个TimeSpan值;

Ticks:返回TimeSpan值的tick数; TotalDays:返回TimeSpan值表示的天数;TotalHours:返回TimeSpan值表示的小时数; 

TotalMilliseconds:返回TimeSpan值表示的毫秒数; TotalMinutes:返回TimeSpan值表示的分钟数;TotalSeconds:返回TimeSpan值表示的秒数;

复制代码
 1 #region 日志处理
 2 
 3             Console.WriteLine(AppDomain.CurrentDomain.BaseDirectory + "InsureLog\\" + "日志测试系统");          
 4             string strLog="4D5FE190-1CC6-4E88-97FE-E66A6868E3FB^57.7|BE7CCB47-2A09-4BCD-BBB4-8F3604B4226F^229|E2E352FA-A4A5-4DD5-B545-D5FD5274F220^4.90|";
 5             string strSysName="日志测试系统";
 6             string strEndTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
 7             //保险系统名称、日志类型、日志内容、交易参数、交易结束时间
 8             LogProcess.RecordLog(strSysName, "1", strLog, "222", strEndTime);//2018-03-06 10:12:13.001         
 9             Console.WriteLine(strEndTime);
10             #endregion 日志处理
11             string str = strEndTime.Substring(strEndTime.Length - 3);//截取字符串最后的三位
12             string str1 = strEndTime.Substring(0,strEndTime.Length - 4);//从右向左数,删去四位字符串
13             Console.WriteLine(str+"|"+str1);
14 
15 
16             DateTime str2 = Convert.ToDateTime(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
17             DateTime str3 = Convert.ToDateTime("2018-03-07 15:06:07.001");
18             TimeSpan ts = str2 - str3;
19             string str4 = ts.Milliseconds.ToString();
20             Console.WriteLine("测试时间:"+str4+"毫秒");
21 
22 
23             Console.ReadKey();
复制代码

2.方法主体:

复制代码
  1 using System;
  2 using System.Collections.Generic;
  3 using System.IO;
  4 using System.Linq;
  5 using System.Text;
  6 using System.Windows.Forms;
  7 
  8 namespace TestPublicLog
  9 {
 10     public class LogProcess
 11     {
 12         private static string strStartTime="2018-03-07 15:13:01.001";//全局变量,记录日志开始时间    
 13             
 14         /// <summary>
 15         /// 记录日志处理
 16         /// </summary>
 17         /// <param name="strSysName">保险系统名称【不可空】</param>
 18         /// <param name="logType">日志类型:1表示正常日志,0表示异常日志【不可空】</param>
 19         /// <param name="logContent">日志内容【不可空】</param>
 20         /// <param name="tradeParameter">交易参数【可空】(存放重要入参)</param>
 21         /// <param name="logTime">记录时间(精确到ms毫秒),格式:yyyy-MM-dd HH:mm:ss.fff【可空】</param>
 22         public static void RecordLog(string strSysName, string logType, string logContent, string tradeParameter, string logTime)
 23         {           
 24             try
 25             {       
 26                 string strComPath = AppDomain.CurrentDomain.BaseDirectory + "InsureLog\\" + strSysName;//路径公共部分
 27                 string normal_Path = strComPath + "\\正常日志";              //正常日志保存路径
 28                 string abnormal_Path = strComPath + "\\异常日志";            //异常日志保存路径
 29 
 30                 if (string.IsNullOrEmpty(logType))
 31                 {
 32                     MessageBox.Show("日志的【状态参数】或【类型参数】输入为空!", "调用医保日志写入方法失败:", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
 33                     return;
 34                 }
 35                 else
 36                 {
 37                     if (logType == "0")
 38                     {
 39                         //调用创建日志文件方法,传入不同日志路径
 40                         GetLog(logType, strSysName, normal_Path, logTime, tradeParameter, logContent);  //在正常日志中写入日志
 41                         GetLog(logType, strSysName, abnormal_Path, logTime, tradeParameter, logContent);//在异常日志中写入日志
 42                     }
 43                     else if (logType == "1")
 44                     {
 45                         GetLog(logType, strSysName, normal_Path, logTime, tradeParameter, logContent);  //在正常日志中写入日志
 46                     }
 47                     else
 48                     {
 49                         MessageBox.Show("日志【类型参数】输入错误!", "调用医保日志写入方法失败:", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
 50                         return;
 51                     }
 52                 }               
 53             }
 54             catch (Exception ex)
 55             {
 56                 MessageBox.Show("医保日志写入失败:" + ex.ToString(), "运行时错误", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
 57             }
 58         }      
 59 
 60         #region 创建日志文件      
 61         /// <summary>
 62         /// 创建日志文件
 63         /// </summary>
 64         /// <param name="logType">日志类型</param>
 65         /// <param name="strSysName">保险系统名称</param>
 66         /// <param name="m_path">日志路径</param>
 67         /// <param name="logTime">记录日志的时间</param>
 68         /// <param name="tradeParameter">交易参数</param>
 69         /// <param name="logContent">日志内容</param>
 70         public static void GetLog(string logType, string strSysName, string m_path, string logTime, string tradeParameter, string logContent)
 71         {
 72             try
 73             {
 74                 string fileName = "LogRecord_" + DateTime.Now.ToString("yyyy-MM-dd") + ".txt";
 75                 DirectoryInfo m_DirInfo = new DirectoryInfo(m_path);
 76                 if (!m_DirInfo.Exists)
 77                 {
 78                     Directory.CreateDirectory(m_path);//创建文件夹
 79                 }
 80                 FileStream fs = new FileStream(m_path + "\\" + fileName, FileMode.Append, FileAccess.Write);
 81                 StreamWriter sw = new StreamWriter(fs);   //文件流
 82                 if (string.IsNullOrEmpty(logTime))
 83                 {
 84                     //获取开始时间(精确到ms毫秒)
 85                     strStartTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
 86                     if (string.IsNullOrEmpty(tradeParameter))
 87                     {
 88                         sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n" + "日志内容:" + logContent + "\r\n");//正式使用时,须获取服务器时间
 89                     }
 90                     else
 91                     {
 92                         sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "\r\n" + "日志内容:" + logContent + "\r\n" + "交易参数:" + tradeParameter + "\r\n");//正式使用时,须获取服务器时间
 93                     }
 94                 }
 95                 else
 96                 {
 97                     string getTimeDiffer = GetTimeDiffer(strStartTime, logTime);
 98                     if (getTimeDiffer == "0")
 99                     {
100                         MessageBox.Show("获取交易耗时失败!");
101                     }
102                     else
103                     {
104                         if (string.IsNullOrEmpty(tradeParameter))
105                         {
106                             sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + "本次交易耗时:" + getTimeDiffer + "\r\n" + "日志内容:" + logContent + "\r\n");
107                         }
108                         else
109                         {
110                             sw.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + " " + "本次交易耗时:" + getTimeDiffer + "\r\n" + "日志内容:" + logContent + "\r\n" + "交易参数:" + tradeParameter + "\r\n");
111                         }
112                     }
113                 }
114                 sw.Close();
115                 fs.Close();
116             }
117             catch (Exception ex)
118             {
119                 MessageBox.Show("创建日志错误:"+ex.ToString(), "调用【创建日志文件】方法失败:", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
120             }
121         }
122         #endregion 创建日志文件 结束
123 
124         #region 解析时间差(计算耗时)
125         /// <summary>
126         /// 解析时间差(计算耗时)
127         /// </summary>
128         /// <param name="strStartTime">开始时间</param>
129         /// <param name="strEndTime">结束时间,即传入的时间</param>
130         /// <returns></returns>
131         public static string GetTimeDiffer(string strStartTime, string strEndTime)
132         {
133             try
134             {
135                 // string类型转DateTime类型
136                 DateTime strTimeStart = Convert.ToDateTime(strStartTime);
137                 DateTime strTimeEnd = Convert.ToDateTime(strEndTime);
138                 string dateDiff = null;//定义时间差值
139                 //定义时间间隔
140                 TimeSpan startTime = new TimeSpan(strTimeStart.Ticks);
141                 TimeSpan endTime = new TimeSpan(strTimeEnd.Ticks);
142                 TimeSpan ts = endTime.Subtract(startTime).Duration();
143                 //显示时间
144                 //ts.Days.ToString() + "天" + ts.Hours.ToString() + "小时" + ts.Minutes.ToString() + "分钟"
145                 dateDiff = ts.Seconds.ToString() + "" + ts.Milliseconds.ToString() + "毫秒";
146                 return dateDiff;
147             }
148             catch (Exception ex)
149             {
150                 MessageBox.Show("获取时间差值失败:" + ex.ToString(), "运行时错误", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
151                 return "0";
152             }
153 
154         }
155         #endregion 解析时间差(计算耗时)结束
156     }
157 }
复制代码

 

存在的就是合理的,总有问题要解决!

相关教程