using Newtonsoft.Json;
using System;
using System.IO;
using System.Text;
using System.Threading;
namespace Driving.BLL
{
///
/// 打印类
///
public static class Printing
{
#region 异常日志打印
/// <summary>
/// 异常日志打印
/// </summary>
/// <param name="ex">发生异常对象</param>
/// <param name="additional">附加信息</param>
public static void Log(Exception ex,string additional="")
{
try
{
string date = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss_fffff");//当前时间转成字符
string title = date + " " + ex.GetType() + ".log";
//拼接异常信息
additional = "\r\n 异常信息:" + ex.Message
+ "\r\n 信息来源:" + ex.Source
+ "\r\n 附加信息:" + additional
//+ "\r\n 堆栈跟踪:\r\n" + ex.StackTrace
+ "\r\n 引发当前异常的方法:" + ex.TargetSite.ToString();
Printing.PrintingContent(title, additional);
}
catch(Exception e)
{
//防止打印异常时发生异常
}
}
/// <summary>
/// 异常日志打印
/// </summary>
/// <param name="title">标题</param>
/// <param name="cont">内容信息</param>
public static void Log(string title, string cont = "详情见上一条log日志")
{
try
{
string date = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss_fffff");//当前时间转成字符
title = date + " " + title + ".log";
//cont = " " + date + "\r\n异常信息:" + cont;
cont = " " + date + "\r\n" + cont;
Printing.PrintingContent(title, cont);
}
catch(Exception e)
{
//防止打印异常时发生异常
}
}
/// <summary>
/// 异常日志打印
/// </summary>
/// <param name="title"></param>
/// <param name="obj"></param>
public static void Log(string title, object obj)
{
try
{
string date = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss_fffff");//当前时间转成字符
title = date + " " + title + ".log";
string cont = BLL_Rewrite.Rewrite.ToJson(obj);
Printing.PrintingContent(title, cont, true, true);
}
catch (Exception e)
{
//防止打印异常时发生异常
}
}
#endregion
#region 自定义异常打印
/// <summary>
/// 自定义异常打印
/// </summary>
/// <param name="ex"></param>
/// <param name="title"></param>
public static void Log2(Exception ex,string title)
{
Printing.Log(ex, title);
Printing.Log(title);
}
/// <summary>
/// 自定义异常打印
/// </summary>
/// <param name="ex"></param>
/// <param name="title"></param>
public static void Log2( string title, Exception ex, string additional = "")
{
try
{
string date = DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss_fffff");//当前时间转成字符
title = date + " " + title + ".log";
//拼接异常信息
additional = "\r\n 异常类型:" + ex.GetType()
+ "\r\n 异常信息:" + ex.Message
+ "\r\n 信息来源:" + ex.Source
+ "\r\n 附加信息:" + additional
//+ "\r\n 堆栈跟踪:\r\n" + ex.StackTrace
+ "\r\n 引发当前异常的方法:" + ex.TargetSite.ToString();
Printing.PrintingContent(title, additional);
}
catch (Exception e)
{
//防止打印异常时发生异常
}
}
#endregion
#region 打印内容
/// <summary>
/// 打印内容
/// </summary>
/// <param name="title"></param>
/// <param name="content"></param>
/// <param name="restructure">是否重构json数据</param>
/// <returns></returns>
public static void PrintingContent(string title, string content, bool isLogFile = true, bool restructure = false)
{
//开启线程方式
new Thread(delegate ()
{
try
{
if (!title.Contains("."))
title = title + ".txt";
if (restructure)
content = Newtonsoft.Json.Linq.JObject.Parse(content).ToString();
//创建 fs 文件流,创建日志文件
FileStream fs = new FileStream
(Program.PhysicsPath + (isLogFile ? "Log\\" : "") + title, //写入的目录加名称
FileMode.Create);
//创建文件写入器,并写入信息
StreamWriter sw = new StreamWriter(fs);
sw.WriteLineAsync(content);
//关闭
sw.Close();
fs.Close();
}
catch (Exception ex)
{
//Printing.Log2("打印内容发生异常", ex);
}
}).Start();
}
/// <summary>
/// 打印内容
/// </summary>
/// <param name="title"></param>
/// <param name="obj"></param>
/// <param name="isLogFile"></param>
/// <param name="restructure"></param>
/// <returns></returns>
public static void PrintingContent(string title, object obj, bool isLogFile = true, bool restructure = true)
{
PrintingContent(title, JsonConvert.SerializeObject(obj), isLogFile, restructure);
}
#endregion
#region 追加打印内容
/// <summary>
/// 追加打印内容
/// </summary>
/// <param name="title"></param>
/// <param name="content"></param>
/// <param name="restructure">是否重构json数据</param>
public static void AddPrintingContent(string title, string content, bool restructure = false)
{
//开启线程,异步方式
Thread thread = new Thread(delegate () {
try
{
if (!title.Contains("."))
title += ".txt";
if (restructure)
content = Newtonsoft.Json.Linq.JObject.Parse(content).ToString();
//创建 fs 文件流,打开文件
FileStream fs = new FileStream(Program.PhysicsPath + title, FileMode.OpenOrCreate);
fs.Close();
//创建文件写入器,并写入信息
StreamWriter sw = new StreamWriter(Program.PhysicsPath + title, true, Encoding.UTF8);
sw.WriteLine(content);
sw.Close();
}
catch (Exception ex)
{
Printing.Log(ex, "追加打印内容发生异常");
}
});
thread.Start();
}
#endregion
}
}
Program.PhysicsPath为程序运行路径下Data/文件夹
定义 Program类
public static readonly string PhysicsPath
= HttpRuntime.AppDomainAppPath.ToString() + “Data\”; //项目磁盘目录 const
配合 MyErrorAttribute ,监听全局异常类,很方便找出运行异常。