我正在尝试使用 log4net 彻底检查一个应用程序(用 VB.NET 编写的控制台应用程序)日志记录系统。
我根据这个CodeProject 教程配置了 log4net 。配置后,我发现以下日志初始化会创建空日志(生成的文件夹结构是正确的,它会创建正确的、有日期的文本文件,但文件是空的):
Private ReadOnly log As log4net.ILog = log4net.LogManager.GetLogger(Reflection.MethodBase.GetCurrentMethod().DeclaringType)
但是,如果我使用以下行,它会正确记录。
Private ReadOnly log As log4net.ILog = log4net.LogManager.GetLogger("VSED")
在我的主模块中,我正在记录如下错误:
log.Error("Test error!")
我正在像这样加载程序集:
<Assembly: log4net.Config.XmlConfigurator(Watch:=True)>
下面是我的app.config
文件:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<file value="logs\" />
<datePattern value="dd.MM.yyyy'.log'" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="100KB" />
<staticLogFileName value="false" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" />
</layout>
</appender>
<logger name="VSED">
<level value="DEBUG"/>
<appender-ref ref="RollingFileAppender"/>
</logger>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO"/>
<levelMax value="FATAL"/>
</filter>
</log4net>
<system.diagnostics>
<sources>
<!-- This section defines the logging configuration for My.Application.Log -->
<source name="DefaultSource" switchName="DefaultSwitch">
<listeners>
<add name="FileLog"/>
<!-- Uncomment the below section to write to the Application Event Log -->
<!--<add name="EventLog"/>-->
</listeners>
</source>
</sources>
<switches>
<add name="DefaultSwitch" value="Information" />
</switches>
<sharedListeners>
<add name="FileLog"
type="Microsoft.VisualBasic.Logging.FileLogTraceListener, Microsoft.VisualBasic, Version=8.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"
initializeData="FileLogWriter"/>
<!-- Uncomment the below section and replace APPLICATION_NAME with the name of your application to write to the Application Event Log -->
<!--<add name="EventLog" type="System.Diagnostics.EventLogTraceListener" initializeData="APPLICATION_NAME"/> -->
</sharedListeners>
</system.diagnostics>
</configuration>
这甚至是一个问题吗?如果我在多个类中使用此记录器(明确说明其名称)而不是反射,它会出现问题吗?
本质上,我只想知道为什么它不能通过首选方法工作。我的 app.config 不正确吗?我做错了什么吗?
谢谢你们!