Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Log4net创建(空)文件_C#_.net_Log4net - Fatal编程技术网

C# Log4net创建(空)文件

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

我在app.config文件中配置了Log4net,文件名设置为属性,如下所示。但在加载应用程序时,将创建名为“(null)”的文件

我还从AssemblyInfo.cs文件中删除了[assembly:log4net.Config.XmlConfigurator(Watch=true)]。我仍然面临着这个问题

<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");