目录
一、控制台程序(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窗口输出】