log4net - 我应该直接在域模型对象中使用 log4net 吗?

标签 log4net dns modeling

我想知道直接在域对象上使用 log4net 是否是不好的做法...我将使用 ELMAH 来处理 ASP.NET MVC 应用程序端的异常,但出于某些信息目的,我想记录有关域模型本身的一些数据。

给定以下域对象:

   public class Buyer
{
    private int _ID;
    public int ID
    {
        get { return _ID; }
        set
        {
            _ID = value;
        }
    }

    private IList<SupportTicket> _SupportTickets=new List<SupportTicket>();
    public IList<SupportTicket> SupportTickets
    {
        get
        {
            return _SupportTickets.ToList<SupportTicket>().AsReadOnly();
        }
    }

    public void AddSupportTicket(SupportTicket ticket)
    {
        if (!SupportTickets.Contains(ticket))
        {
            _SupportTickets.Add(ticket);
        }
    }
}

在 AddSupportTicketMethod 中添加日志记录行为是一个坏主意吗...所以本质上它看起来像这样:

       public class Buyer
{
    protected static readonly ILog log = LogManager.GetLogger(typeof(SupportTicket));

    public Buyer()
    {
       log4net.Config.XmlConfigurator.Configure();
    }


    private int _ID;
    public int ID
    {
        get { return _ID; }
        set
        {
            _ID = value;
        }
    }

    private IList<SupportTicket> _SupportTickets=new List<SupportTicket>();
    public IList<SupportTicket> SupportTickets
    {
        get
        {
            return _SupportTickets.ToList<SupportTicket>().AsReadOnly();
        }
    }

    public void AddSupportTicket(SupportTicket ticket)
    {
        if (!SupportTickets.Contains(ticket))
        {
            _SupportTickets.Add(ticket);
        } else {
           log.Warn("Duplicate Ticket Not Added.");
        }
    }
}

最佳答案

我直接在域对象中使用了 log4net 和 log4J。这有好的副作用,也有坏的副作用。

  • +:登录域对象的代码简单明了,您知道可以利用 log4net 功能。
  • --:表示使用域对象的程序需要注意log4net配置,这可能是也可能不是问题
  • --:您不能将域对象链接到与调用程序正在使用的不同的 log4net 版本。我见过很多冲突,其中一项与 log4net 1.2.0.10 链接,另一项与早期版本链接。

不记录您的域对象是一个坏主意。另一种方法是像其他人建议的那样,依赖注入(inject)或外部框架(例如 log4J 的 commons-logging),允许插入不同的日志框架或创建一个接口(interface)来执行日志记录并针对该接口(interface)进行日志记录。 (使用域对象的代码需要提供该接口(interface)的适当实例以用于日志记录目的。)

关于log4net - 我应该直接在域模型对象中使用 log4net 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/783786/

相关文章:

android - 配置模拟器 DNS 设置

r - numInClass[i]%/%k : non-numeric argument to binary operator 中出现错误

python - 您如何为具有三个值的状态建模?

c# - 使用 log4net Asp.net Core 2.2 将日志文件写入 AppData 不起作用

LogManager.GetLogger 的 log4net 参数

c# - 使用 Autofac 将 log4net 注入(inject) Controller

docker - 如何配置 Docker 在 Docker Desktop for Mac 中使用哪个 DNS 服务器?

resources - Dns 服务器 (edns)opt 资源记录类型

performance - Hadoop的白盒性能模型

c# - 从C#中的异常传递错误代码