log4net将在哪里创建此日志文件?

Bla*_*man 68 c# asp.net-mvc logging log4net

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

我的web.config看起来像这样:

<log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
      <file value="logs\log-file.txt" />
      <appendToFile value="true" />
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
      </layout>
    </appender>
</log4net>
Run Code Online (Sandbox Code Playgroud)

这是正确的记录方式:

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

Avi*_*jee 63

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

<file type="log4net.Util.PatternString" value="%property{LogFileName}.txt" />
Run Code Online (Sandbox Code Playgroud)

然后在调用之前的代码中log4net configure,设置如下所示的新路径

 log4net.GlobalContext.Properties["LogFileName"] = @"E:\\file1"; //log file path
 log4net.Config.XmlConfigurator.Configure();
Run Code Online (Sandbox Code Playgroud)

它有多简单?:)

  • 很棒的技巧,它有助于将所有配置放在一个地方:) (2认同)

Ola*_*emo 46

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

您可以在应用程序的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>
Run Code Online (Sandbox Code Playgroud)

文件标签指定位置.

  • +1唯一直接回答问题的答案"log4net将在何处创建此日志文件?" (15认同)
  • 嗨Oladipo,对我来说没有路径定义日志是在bin文件夹中创建的. (4认同)

Ben*_*ard 21

文件值可以是绝对路径,如"c:\ logs\log.txt",也可以是相对于bin目录的相对路径.

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

private static readonly ILog Log = LogManager.GetLogger( 
MethodBase.GetCurrentMethod().DeclaringType);
Run Code Online (Sandbox Code Playgroud)

最后,您可以像这样使用它:

Log.Debug("This is a DEBUG level message.");
Run Code Online (Sandbox Code Playgroud)

  • 嗯..似乎没有在任何地方创建日志文件,我没有收到任何错误? (4认同)
  • 听起来像权限问题.我会将配置映射到web目录之外的绝对路径.在此之后,请确保日志文件和文件夹具有允许asp.net工作进程正确访问的权限. (2认同)

Alf*_*nti 10

Log4net正在保存到项目文件夹中.像:\SolutionFolder\ProjectFolder\bin\SolutionConfiguration\logs\log-file.txt.

哪里:

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

希望这可以帮助!


Mic*_*ein 6

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");
Run Code Online (Sandbox Code Playgroud)

  • ILoggerRepository存储库= log4net.LogManager.GetAllRepositories()。FirstOrDefault(); (2认同)
  • 存储库已经在这里:`yourlogger.Logger.Repository`。因此,您可以这样做:`yourlogger.Info($“打开的日志文件:{m_Logger.Logger.Repository.GetAppenders()。OfType &lt;FileAppender&gt;()。FirstOrDefault()?. File}”);`。请注意,如果为空,它不会中断。 (2认同)