C# 实现调用函数,打印日志(通过反射代理、非IOC)

在这里插入图片描述

🎈个人主页:靓仔很忙i
💻B 站主页:👉B站👈
🎉欢迎 👍点赞✍评论⭐收藏
🤗收录专栏:C#
🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步!


需求:对于不方便debug的程序,查看日志是一个特别好的调试方式,但是在.net framework中,想实现面向切面打印日志特别困难。有人可能会想到使用Castle,使用Castle确实ok。但它需要依赖注入,需要框架去托管所有需要AOP的对象,系统中还有很多静态类,想实现这些都类的日志打印,我还需要去包装类库中的所有的静态类。这显然不现实,本文就是为了解决这个问题而写。

解决方案:为此,笔者写了一个Logger类,提供了CallStatic,CallMethod方式分别去调用方法,调用方法的时候,打印日志。调用思路也很简单,直接调用就行,需要调用的方法,通过参数传递即可。废话不多说,直接上干货。

  • 程序需要三个文件
    在这里插入图片描述
    • Logger:日志类
    • MyService: 测试使用的方法
    • Program: 入口
  • Logger文件
    using System;
    using System.Linq;
    using System.Linq.Expressions;
    using System.Reflection;

    namespace AutoTemplate.log
    {
   
        public static class Logger
        {
   
            public static void CallStatic(Expression<Action> expression)
            {
   
                var methodInfo = (MethodCallExpression)expression.Body;
                var method = GetMethodInfo(methodInfo);
                var parameters = GetParameters(methodInfo);
                PrintStartLog(method, parameters);
                method.Invoke(null, parameters);
                PrintEndLog(method);
            }
            public static T CallStatic<T>(Expression<Func<T>> expression)
            {
   
                var methodInfo = (MethodCallExpression)expression.Body;
                var method = GetMethodInfo(methodInfo);
                var parameters = GetParameters(methodInfo);

                PrintStartLog(method, parameters);
                var result = (T)method.Invoke(null, parameters);
                PrintEndLog(method);
                return result;
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

靓仔很忙i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值