2011-06-15 42 views
2

問題:無法使用CLR存儲過程中的Log4net調試(寫入)日誌文件。可能是我構建CLR項目的方式存在問題?我只是將DLL導入到sql server中(創建程序集....)。我是否也需要導入App.Config?是否可以使用Log4Net在CLR存儲過程中寫入日誌文件?

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)中:

<configSections> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    </configSections> 

    <log4net> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <param name="File" value="C:\log\clrsql.log" /> 
     <param name="AppendToFile" value="true" /> 
      <datePattern value="yyyyMMdd-HHmm" /> 
     <param name="rollingStyle" value="Size" /> 
     <param name="maxSizeRollBackups" value="50" /> 
     <param name="maximumFileSize" value="25MB" /> 
     <param name="staticLogFileName" value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%d %-5p [t-%t] [%c.%M(%L)] %m%n" /> 
     </layout> 
    </appender> 


    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%d %-5p [%c.%M(%L)] %m%n" /> 
     </layout> 
    </appender> 

    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingFileAppender" /> 
     <appender-ref ref="ConsoleAppender" /> 
    </root> 
    </log4net> 

SQL Server上的權限C:\ log \ - NETWORK SERVICE和MyDomain \ sqlserverac計數對「日誌」文件夾具有完全控制權。

SQL腳本:

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 

SQL輸出:

(沒有列名)

+0

我希望你能做更多的日誌。根據上面的代碼片段,您不必擔心所有log4net的東西只是將一條消息記錄到文件中。做一個'File.WriteAllText'什麼的。 – 2011-06-15 21:18:07

回答

相關問題