C# Log4net创建(空)文件
我在app.config文件中配置了Log4net,文件名设置为属性,如下所示。但在加载应用程序时,将创建名为“(null)”的文件 我还从AssemblyInfo.cs文件中删除了[assembly:log4net.Config.XmlConfigurator(Watch=true)]。我仍然面临着这个问题C# Log4net创建(空)文件,c#,.net,log4net,C#,.net,Log4net,我在app.config文件中配置了Log4net,文件名设置为属性,如下所示。但在加载应用程序时,将创建名为“(null)”的文件 我还从AssemblyInfo.cs文件中删除了[assembly:log4net.Config.XmlConfigurator(Watch=true)]。我仍然面临着这个问题 <logger name="ReportLogger"> <appender-ref ref="RollingFileAppender2" /> <l
<logger name="ReportLogger">
<appender-ref ref="RollingFileAppender2" />
<level value="ALL" />
</logger>
<appender name="RollingFileAppender2"
type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString"
value="C:\MyApplicationLogs\%property{ReportName}.log" />
<appendToFile value="true" />
<rollingStyle value="Composite" />
<!--<datePattern value="yyyyMMdd-HHmm" />-->
<maxSizeRollBackups value="10000" />
<maximumFileSize value="1MB" />
<countDirection value="1"/>
<immediateFlush value="true" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message%n" />
</layout>
</appender>
谁能告诉我这里出了什么问题。您的log4net配置似乎配置不好。这是我的配置(web.config): 现在,您必须在如下方法中调用
Log
:
Log.Info(MethodBase.GetCurrentMethod().Name);
尝试此操作并告诉我它是否有效在进行任何与
Log4net
相关的调用之前,请确保为ThreadContext.Properties[“ReportName”]
指定一个值
您问题中的代码调用了ReportMsglogger=LogManager.GetLogger(“ReportLogger”)代码>在初始化ThreadContext.Properties[“ReportName”]
之前
因此,文件名将为(null)
还要确保仅初始化一次Log4net
。
log4net.Config.XmlConfigurator.Configure(loggerRepository2)不能多次调用代码>
下面的代码显示了有关如何设置文件名、初始化Log4net
和记录消息的正确顺序
// Set log file name.
string AppLogFileName = "MyLogFile"; // Retrieve from GetTextReportFileName(...)
ThreadContext.Properties["ReportName"] = AppLogFileName;
// Set up Log4net.
ILoggerRepository repository = log4net.LogManager.GetRepository(Assembly.GetCallingAssembly());
XmlConfigurator.Configure(repository);
// Log a message.
var logger = LogManager.GetLogger("ReportLogger");
logger.Info("Hello world");
你加上这个了吗private static readonly ILog Log=LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType)代码>尝试了这个。它不起作用。当应用程序加载时,仍然会创建空文件。另外,我的问题是当我使用“属性”动态创建文件时,就像这里一样-这个问题会发生。加载应用程序时,my reportname字符串未被赋值。您也可以参考以下内容:
private static readonly ILog Log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
Log.Info(MethodBase.GetCurrentMethod().Name);
// Set log file name.
string AppLogFileName = "MyLogFile"; // Retrieve from GetTextReportFileName(...)
ThreadContext.Properties["ReportName"] = AppLogFileName;
// Set up Log4net.
ILoggerRepository repository = log4net.LogManager.GetRepository(Assembly.GetCallingAssembly());
XmlConfigurator.Configure(repository);
// Log a message.
var logger = LogManager.GetLogger("ReportLogger");
logger.Info("Hello world");