是否可以使用Log4Net写入CLR存储过程中的日志文件?

是否可以使用Log4Net写入CLR存储过程中的日志文件?,log4net,clrstoredprocedure,Log4net,Clrstoredprocedure,问题:无法在CLR存储过程中使用Log4net调试(写入)日志文件。我构建CLR项目的方式可能有问题?我只是将DLL导入sql server(创建程序集…)。我也需要导入App.Config吗 DLL名称: CLRTest.dll 源代码: using System; using System.Collections.Generic; using System.Text; using System.Data; using System.Data.SqlTypes; using System.Da

问题:无法在CLR存储过程中使用Log4net调试(写入)日志文件。我构建CLR项目的方式可能有问题?我只是将DLL导入sql server(创建程序集…)。我也需要导入App.Config吗

DLL名称: CLRTest.dll

源代码:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlTypes;
using System.Data.SqlClient;
using Microsoft.SqlServer.Server; 
using log4net;
using log4net.Config;

public class MyClass
{
    private readonly static ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    private static readonly string sContextConn = "Context Connection=true";

    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void Select1()
    {
        XmlConfigurator.Configure();
        log.Debug("Begin Select1()...");
        using (SqlConnection connection = new SqlConnection(sContextConn))
        {
            connection.Open();
            SqlCommand command = new SqlCommand("select 1", connection);
            SqlDataReader r = command.ExecuteReader();
            SqlContext.Pipe.Send(r);
        }

        log.Debug("End Select1()...");
    }
}//end MyClass
Log4Net XML配置(App.Config):

SQL输出:

(没有列名称)


1

您正在进行的log4net配置程序调用实际上是在尝试查找。我不知道存储过程的
AppDomain
是什么

您可能希望尝试配置文件并使用该配置程序的重载

log4net.Config.XmlConfigurator.Configure(new FileInfo("config.log4net"));

我希望你正在做更多的日志记录。根据上面的代码片段,只需将一条消息记录到一个文件中,就不必担心所有的log4net内容。执行
文件.writealText
或其他操作。
drop procedure clr_Select1
go
drop assembly CLRTest
go
create ASSEMBLY CLRTest FROM 'C:\Share\ClrSql\TEST\CLRTest.dll' WITH PERMISSION_SET = unsafe
go
CREATE PROCEDURE clr_Select1 
    AS EXTERNAL NAME CLRTest.MyClass.Select1
go
exec clr_Select1 
log4net.Config.XmlConfigurator.Configure(new FileInfo("config.log4net"));