欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

记录日志(日志处理)

程序员文章站 2022-03-29 11:07:48
日志分类、日志格式化、时间差、耗时、timespan、文件流、日志读写操作 ......

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 }