C# log4net写入sqldb的实现

C# log4net写入sqldb的实现,c#,log4net,C#,Log4net,我有一个基本的实现,它调用一个存储过程,将一行添加到SQL数据库中的表中。但是,这个实现有很多开销,因为它尝试为我尝试实现的每个日志访问数据库(在一个函数调用中可能会发生许多日志调用)。我希望通过使其仅在调用函数结束时访问数据库一次来改进此实现。我还希望使用这个函数与使用log4net提供的记录器几乎相同 预期实施: class Object{ SQLLogger logger = SQLLogManager.GetLogger("My Object"); void foo(){

我有一个基本的实现,它调用一个存储过程,将一行添加到SQL数据库中的表中。但是,这个实现有很多开销,因为它尝试为我尝试实现的每个日志访问数据库(在一个函数调用中可能会发生许多日志调用)。我希望通过使其仅在调用函数结束时访问数据库一次来改进此实现。我还希望使用这个函数与使用log4net提供的记录器几乎相同

预期实施:

class Object{
    SQLLogger logger = SQLLogManager.GetLogger("My Object");
    void foo(){
        logger.Info("Info");
        logger.Error("Error");
        logger.Info("Info2");
        //now when the function ends, the logger will access the DB and create 3 rows, disconnects
    }
}
class Object{
    SQLLogger logger = SQLLogManager.GetLogger("My Object");
    void foo(){
        logger.Info("Info");
        //access DB and adds a row, disconnects
        logger.Error("Error");
        //access DB and adds a row, disconnects
        logger.Info("Info2");
        //access DB and adds a row, disconnects
    }
}    
旧的实施:

class Object{
    SQLLogger logger = SQLLogManager.GetLogger("My Object");
    void foo(){
        logger.Info("Info");
        logger.Error("Error");
        logger.Info("Info2");
        //now when the function ends, the logger will access the DB and create 3 rows, disconnects
    }
}
class Object{
    SQLLogger logger = SQLLogManager.GetLogger("My Object");
    void foo(){
        logger.Info("Info");
        //access DB and adds a row, disconnects
        logger.Error("Error");
        //access DB and adds a row, disconnects
        logger.Info("Info2");
        //access DB and adds a row, disconnects
    }
}    
问题: 如何检测函数何时结束(-ish)?
-也许相反,我有一个存储X行的容器,只有当容器已满或计时器关闭时才访问数据库?

我认为log4net无法轻松检测函数/方法的运行时间。但log4net确实有一个bufferSize设置,它将等待X个日志排队,然后写入它们。Log4Net中的
bufferSize
选项专门用于此目的。通常,您希望对文件或其他类型的流执行“立即”日志记录,但对于数据库日志记录,您需要一个合理的缓冲区,这取决于系统中每秒/分钟/等的日志条目数。SQLLogger是您自己的实现吗?如果是这样的话,你必须在你的课堂上把它作为一种策略来实施。