gpt4 book ai didi

c# - Log4Net 不在 SQL Server 数据库中写入任何内容

转载 作者:太空宇宙 更新时间:2023-11-03 18:33:04 25 4
gpt4 key购买 nike

我发现了类似的问题,但没有一个答案有效。

Log4Net 没有在日志数据库中写入任何内容,我真的不知道如何找到错误。

这是我的配置文件:

<log4net>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="100" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=sqlServer;initial catalog=Logging;integrated security=false;persist security info=True;User ID=logUser;Password=logPassword" />
<commandText value="INSERT INTO dbo.myLogTable ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
</log4net>

它实际上是 SQL Server example on the apache page 的完整副本.我只更改了连接字符串。连接本身应该可以正常工作,我已经使用 SqlConnection 测试了连接字符串。

这就是我创建日志记录对象和加载配置的方式:

public static class LogFactory
{
public const string Log4NetConfig = "log4net.config";

public static ILog GetLogger()
{
var uri = new Uri(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase), Log4NetConfig));
var configFile = new FileInfo(Path.GetFullPath(uri.LocalPath));
XmlConfigurator.ConfigureAndWatch(configFile);
ILog log = LogManager.GetLogger(typeof(LogFactory));
return log;
}
}

记录自身:

private static readonly ILog Log = LogFactory.GetLogger();
[...]
Log.Info("Test 123");

如果我用我通常的“记录到文件”配置替换配置,日志记录工作正常,所以我猜错误必须在配置中的某个地方,但配置是主页的默认示例。

你能在某处看到错误吗?

最佳答案

你没有定义什么时候应该使用 appender 并且你推迟了写入 db 的 bufferSize

<log4net>
<root>
<level value="ALL" /> <!--send all logs to appenders-->
<appender-ref ref="AdoNetAppender" />
</root>
<appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="100" /> <!--THIS WILL POSTPONE DB WRITING UNTIL A BUFFER OF 100 LOG IS REACHED-->
<threshold value="INFO"/> <!--log when >= INFO -->
.....
</appender>
</log4net>

最后的想法:

每次需要记录器时,您都在调用 log4net 配置器,这不是您应该做的。它应该只在您第一次启动应用程序(静态 Main 方法)或网站(global.asax applicationStart)时调用。

那么你的类应该有只读的 ILog 属性:

private static ILog logger = LogManager.GetLogger(typeof(MyClass));

关于c# - Log4Net 不在 SQL Server 数据库中写入任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19635374/

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