目录

一、控制台程序(demo)

二、封装方法

三、实现效果


一、控制台程序(demo)

using System.Diagnostics;

namespace Progaram
{
    class Program
    {
        public class Student
        {
            public int Id { get; set; }
            public string Name { get; set; }
            public int Age { get; set; }
        }
        static void Main()
        {
            try
            {
                //任务一:打印一个实体的内容
                var entity = new Student
                {
                    Id = 1,
                    Name = "张三",
                    Age = 20
                };
                //entity = null;
                string data = GetEntityContent(entity);
                Console.WriteLine(data);

                //任务二:尽可能输出更多的错误信息(控制台程序打印、调试输出窗口打印、日志文件打印)
                // 模拟可能出错的代码
                int result = 10 / int.Parse("0");
            }
            catch (Exception ex)
            {
                LoggerMessAge(ex);
            }
        }

        private static void LoggerMessAge(Exception ex)
        {
            string message = $@"
            【报错时间】{DateTime.Now}
            【报错内容】{ex.Message}
            【报错位置】{ex.StackTrace?.Trim()}
            【报错类库】{ex.Source}
            【报错的类】{ex.TargetSite?.DeclaringType?.FullName}
            【报错方法】{ex.TargetSite}" + "\n";
            Console.WriteLine(message);
            Debug.WriteLine(message);
            File.AppendAllText("error.log", message);
        }

        private static string GetEntityContent<T>(T? entity) where T : class //反射实现输出所有字段名、字段的值
        {
            if (entity == null)
            {
                return $"类{typeof(T).Name}的对象{nameof(entity)}的值为null!";
            }
            string result = $"类{typeof(T).Name}的对象{nameof(entity)}的值为:  ";
            foreach (var filed in typeof(T).GetProperties())
            {
                result += $"{filed.Name}:{filed.GetValue(entity)}  ";
            }
            return result;
        }
    }
}


二、封装方法

【打印实体信息】

  private static void LoggerMessAge(Exception ex)
  {
      string message = $@"
      【报错时间】{DateTime.Now}
      【报错内容】{ex.Message}
      【报错位置】{ex.StackTrace?.Trim()}
      【报错类库】{ex.Source}
      【报错的类】{ex.TargetSite?.DeclaringType?.FullName}
      【报错方法】{ex.TargetSite}" + "\n";
      Console.WriteLine(message);
      Debug.WriteLine(message);
      File.AppendAllText("error.log", message);
  }

【打印错误信息】

private static string GetEntityContent<T>(T? entity) where T : class //反射实现输出所有字段名、字段的值
{
    if (entity == null)
    {
        return $"类{typeof(T).Name}的对象{nameof(entity)}的值为null!";
    }
    string result = $"类{typeof(T).Name}的对象{nameof(entity)}的值为:  ";
    foreach (var filed in typeof(T).GetProperties())
    {
        result += $"{filed.Name}:{filed.GetValue(entity)}  ";
    }
    return result;
}

三、实现效果

【日志输出位置】.\bin\Debug\net8.0\error.log.txt

【控制台输出】

【Debug窗口输出】 

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部