Log4Net 属性始终为 false(可能未初始化)
Log4Net Properties are always false (probably not initialized)
我一直在使用 Log4Net 登录数据库,这看起来很简单,但是当我调试它时,我发现所有的日志模式仍然是错误的。
我已经尝试实施 here, here, and here 中的解决方案,但其中 none 对我有用。
他们说的基本上都一样..要么我需要
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "filepath", Watch = true)]
在我的 AsseblyInfo.cs
或者我可以使用
log4net.Config.XmlConfigurator.Configure(new FileInfo("filepath"));
在我打电话之前 log4net.LogManager.GetLoggers()
这两个我都试过了,把它们移到不同的地方,把它们放在启动项目中,把它们放在 Application_Start()
但其中 none 有任何影响。
这是我的 log4net.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\Projects\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="ADOAppender" />
<appender-ref ref="FileAppender" />
</root>
<appender name="FileAppender" type="log4net.Appender.ConsoleAppender">
<file value="C:\Projects\Log.txt"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{ABSOLUTE} [%thread] %level - %message%newline%exception"/>
</layout>
</appender>
<appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data"/>
<connectionString value="XXXXXXX"/>
<commandText value="dbo.sp_CreateErrorLog" />
<commandType value="StoredProcedure" />
<parameter>
<parameterName value="@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="@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="@User" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{log4net:HostName}" />
</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>
</configuration>
还有我的Class代码:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "../log4net.config", Watch = true)]
namespace ...
{
public class LogService : ILogService
{
private readonly log4net.ILog _log;
public LogService()
{
log4net.Config.XmlConfigurator.Configure(new FileInfo("../log4net.config"));
_log = log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}
//more stuff
}
}
有人能看到我遗漏的东西吗?我被难住了。
我的特定程序表现如此奇怪的原因是因为我正在使用 API 调用使用 log4net 的日志记录服务。
我只需要将 log4net.config
文件移动到 API 的根目录并使用
调用它
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
这是因为 Log4Net 在 初始调用 的根目录中查找,这在我的例子中与我 实现 [=20= 的目录不同] Log4Net.
我一直在使用 Log4Net 登录数据库,这看起来很简单,但是当我调试它时,我发现所有的日志模式仍然是错误的。
我已经尝试实施 here, here, and here 中的解决方案,但其中 none 对我有用。
他们说的基本上都一样..要么我需要
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "filepath", Watch = true)]
在我的 AsseblyInfo.cs
或者我可以使用
log4net.Config.XmlConfigurator.Configure(new FileInfo("filepath"));
在我打电话之前 log4net.LogManager.GetLoggers()
这两个我都试过了,把它们移到不同的地方,把它们放在启动项目中,把它们放在 Application_Start()
但其中 none 有任何影响。
这是我的 log4net.config 文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="log4net.Internal.Debug" value="true"/>
</appSettings>
<system.diagnostics>
<trace autoflush="true">
<listeners>
<add
name="textWriterTraceListener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="C:\Projects\log4net.txt" />
</listeners>
</trace>
</system.diagnostics>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="ADOAppender" />
<appender-ref ref="FileAppender" />
</root>
<appender name="FileAppender" type="log4net.Appender.ConsoleAppender">
<file value="C:\Projects\Log.txt"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{ABSOLUTE} [%thread] %level - %message%newline%exception"/>
</layout>
</appender>
<appender name="ADONetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data"/>
<connectionString value="XXXXXXX"/>
<commandText value="dbo.sp_CreateErrorLog" />
<commandType value="StoredProcedure" />
<parameter>
<parameterName value="@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="@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="@User" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{log4net:HostName}" />
</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>
</configuration>
还有我的Class代码:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "../log4net.config", Watch = true)]
namespace ...
{
public class LogService : ILogService
{
private readonly log4net.ILog _log;
public LogService()
{
log4net.Config.XmlConfigurator.Configure(new FileInfo("../log4net.config"));
_log = log4net.LogManager.GetLogger
(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
}
//more stuff
}
}
有人能看到我遗漏的东西吗?我被难住了。
我的特定程序表现如此奇怪的原因是因为我正在使用 API 调用使用 log4net 的日志记录服务。
我只需要将 log4net.config
文件移动到 API 的根目录并使用
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
这是因为 Log4Net 在 初始调用 的根目录中查找,这在我的例子中与我 实现 [=20= 的目录不同] Log4Net.