C# log4net将在何处创建此日志文件?

C# log4net将在何处创建此日志文件?,c#,asp.net-mvc,logging,log4net,C#,Asp.net Mvc,Logging,Log4net,当我将文件值设置为logs\log file.txt时,它将在何处创建此文件夹?在/bin目录中 我的web.config如下所示: Initialize(logFileLocation); 这是正确的日志记录方式吗: ILog logger = LogManager.GetLogger(typeof(CCController)); logger.Error("Some Page", ex); // where ex is the exception instance 文件值可以是像“

当我将文件值设置为
logs\log file.txt
时,它将在何处创建此文件夹?在
/bin
目录中

我的web.config如下所示:

Initialize(logFileLocation);

这是正确的日志记录方式吗:

ILog logger = LogManager.GetLogger(typeof(CCController));
logger.Error("Some Page", ex);  // where ex is the exception instance

文件值可以是像“c:\logs\log.txt”这样的绝对路径,也可以是相对路径,我相信它是相对于bin目录的

就实现而言,我通常将以下内容放在我计划登录的任何类的顶部:

private static readonly ILog Log = LogManager.GetLogger( 
MethodBase.GetCurrentMethod().DeclaringType);
最后,您可以这样使用它:

Log.Debug("This is a DEBUG level message.");

我认为您的示例正在保存到项目文件夹中,除非默认的iis或.NET用户具有创建权限,否则它将无法创建日志文件夹


我将首先创建日志文件夹,并允许iis用户拥有完全权限,然后查看是否正在创建日志文件。

对于日志文件夹和文件内容,请使用

不过,我将对创建日志部分进行评论。在我看来,没有正确的方法。手动编写记录器代码时,我会按照您的方式进行:

ILog logger = LogManager.GetLogger(typeof(CCController));
因为它简短


这就是说,我现在不在类中创建记录器实例。

Log4net正在保存到您的项目文件夹中。类似于:
\SolutionFolder\ProjectFolder\bin\SolutionConfiguration\logs\log file.txt

其中:

  • SolutionFolder是保存解决方案的地方
  • ProjectFolder是将项目放入解决方案和
  • SolutionConfiguration是包含项目所有二进制文件的文件夹(默认为Debug或Release)

希望这有帮助

如果您希望将日志文件放置在运行时确定的指定位置,该位置可能是您的项目输出目录,那么您可以用这种方式配置
.config
文件条目

<file type="log4net.Util.PatternString" value="%property{LogFileName}.txt" />

有多简单?:)

它将在项目/解决方案的根目录中创建文件

您可以在应用程序的web.config中指定所选位置,如下所示:

   <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="c:/ServiceLogs/Olympus.Core.log" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <datePattern value=".yyyyMMdd.log" />
      <maximumFileSize value="5MB" />
      <staticLogFileName value="true" />
      <lockingModel type="log4net.Appender.RollingFileAppender+MinimalLock" />
      <maxSizeRollBackups value="-1" />
      <countDirection value="1" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-5level [%thread] %logger - %message%newline%exception" />
      </layout>
    </appender>

file标记指定位置。

FileAppender appender=repository.GetAppenders().OfType().FirstOrDefault();
FileAppender appender = repository.GetAppenders().OfType<FileAppender>().FirstOrDefault();
if (appender != null)
    logger.DebugFormat("log file located at : {0}", appender.File);
else
    logger.Error("Could not locate fileAppender");
if(appender!=null) DebugFormat(“位于:{0}的日志文件”,appender.file); 其他的 logger.Error(“找不到fileAppender”);
如果要动态选择日志文件的路径,请使用此链接中编写的方法:

如果需要,您可以设置应用程序EXE文件所在的路径,如下所示-

var logFileLocation = System.IO.Path.GetDirectoryName
(System.Reflection.Assembly.GetEntryAssembly().Location);
然后将此“logFileLocation”发送到上面链接中写入的方法,如下所示:

Initialize(logFileLocation);

你准备好出发了!:)

我正在使用log4net 2.0.8为.NET core 2.1开发,发现NealWalters代码抱怨XmlConfigurator.Configure()的0个参数。我找到了马特·沃森的解决方案


在您的情况下,日志文件将位于
bin\Debug\netcoreapp3.1\
文件夹中 这也可能取决于您的框架


我使用了Asp.Net core 3.1,所以文件夹路径是
bin\Debug\netcoreapp3.1\

hmm.。它似乎没有在任何地方创建日志文件,我没有收到任何错误?听起来像是权限问题。我会将配置映射到web目录之外的绝对路径。接下来,请确保日志文件和文件夹具有允许asp.net工作进程正确访问的权限。对于相对路径,我希望日志文件位于项目级别:@Blankman,我遇到了类似的问题。问题不是路径或权限,而是我忘记调用configure来启动日志记录。请参阅另一个堆栈溢出问题的答案+1直接回答“log4net将在何处创建此日志文件?”问题的唯一答案是:嗨,Oladipo,对于我来说,没有路径定义的日志是在bin文件夹中创建的。很好的技巧,它有助于将所有配置放在一个位置:)如果您希望在一个程序中包含多个日志文件,每个日志文件在运行时确定的不同路径中,该怎么办?是否有方法将属性LogFileName设置为不在某些全局共享上下文中?应用log4net.Util.PatternString类型后,可以使用其他模式,例如%date{},类型为:ILoggerRepository repository=log4net.LogManager.GetAllRepositories().FirstOrDefault();存储库已在此处:
yourlogger.Logger.repository
。所以您可以这样做:
yourlogger.Info($”打开的日志文件:{m_Logger.Logger.Repository.GetAppenders().OfType().FirstOrDefault()?.File}”)。请注意,如果某个内容为
null
,则它不会中断。
        log4net.GlobalContext.Properties["LogFileName"] = @"E:\\file1"; //log file path
        var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
        XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));