Printing

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 ,监听全局异常类,很方便找出运行异常。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值