c# NLog 应用 异常试验

1.情景

很多时候,我们为了输出log往往会使函数看起来很麻烦,因为log把函数的本身处理逻辑给侵染了,这看起来很不舒服。当然可以用注入和过滤的方式解决这个问题,但是很多函数是没有经过过滤的。怎么办呢,能不能再函数外套一层专门处理异常记log的逻辑呢,于是有了这个试验。

2.代码

using NLog;
using System;

namespace Nlog实验
{
    class Program
    {
        //创建日志记录对象
        static Logger Logger = NLog.LogManager.GetCurrentClassLogger();
        static void Main(string[] args)
        {
            Console.WriteLine("Nlog实验");
            //Logger.Trace("Nlog实验");
            A1 a1 = new A1();
            a1.fun();
            A a2 = new A2();
            a2.fun();
            Console.ReadKey();
        }
        
    }
    abstract class A
    {
        public delegate void DeFun();
        protected Logger Logger;
        public void Log(DeFun deFun)
        {
            try
            {
                deFun();
            }
            catch(Exception e)
            {
                Logger.Error(e.ToString());
            }     
        }
        abstract public void fun();
        protected void creatLog()
        {
            Logger = NLog.LogManager.GetCurrentClassLogger();
        }
    }
    class A1:A
    {
        public A1()
        {
            Logger = NLog.LogManager.GetCurrentClassLogger();
        }
        public override void fun()
        {
            Log(() =>
            {
                int a = 5;
                int b = a / 0;
            });
        }

    }
    class A2 : A
    {
        public A2()
        {
            Logger = NLog.LogManager.GetCurrentClassLogger();
        }
        public override void fun()
        {
            Log(() => {
                A a = null;
                a.fun();
            });
            
        }
    }
}

3.运行效果

3.1 生成两个 error 文件

3.1 A1 的异常

 2022-12-22 19:11:40.9010 | System.DivideByZeroException: 尝试除以零。
   在 Nlog实验.A1.<>c.<fun>b__1_0() 位置 E:\test\2试验\Nlog实验\Nlog实验\Program.cs:行号 54
   在 Nlog实验.A.Log(DeFun deFun) 位置 E:\test\2试验\Nlog实验\Nlog实验\Program.cs:行号 30

 3.2 A2的异常

2022-12-22 19:11:43.0293 | System.NullReferenceException: 未将对象引用设置到对象的实例。
   在 Nlog实验.A2.<>c.<fun>b__1_0() 位置 E:\test\2试验\Nlog实验\Nlog实验\Program.cs:行号 69
   在 Nlog实验.A.Log(DeFun deFun) 位置 E:\test\2试验\Nlog实验\Nlog实验\Program.cs:行号 30 

 4.1 要点记录

NLog.LogManager.GetCurrentClassLogger(); 生成的文件名是所在位置的类名,如果写再基类的函数中,再子类的函数中调用是没有效果的,只会生成一个基类的文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值