gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 12:07:21 24 4
gpt4 key购买 nike

问题:无法在 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):

    <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\sqlserveraccount 对“log”文件夹具有完全控制权。

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 输出:

(无列名称)

1

最佳答案

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

您可能想尝试 standalone配置文件并使用该配置器的重载。

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

关于log4net - 是否可以使用 Log4Net 在 CLR 存储过程中写入日志文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6360162/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com