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

时间:2010-05-12 03:23:10

标签: 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>

这是正确的记录方式:

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

10 个答案:

答案 0 :(得分:58)

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

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

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

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

它有多简单? :)

答案 1 :(得分:42)

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

您可以在应用的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>

文件标签指定位置。

答案 2 :(得分:19)

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

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

private static readonly ILog Log = LogManager.GetLogger( 
MethodBase.GetCurrentMethod().DeclaringType);

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

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

答案 3 :(得分:10)

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

其中:

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

希望这有帮助!

答案 4 :(得分: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");

答案 5 :(得分:4)

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

我会评论创建日志部分。 Imo没有正确的方式。手动编写记录器时,我按照您的方式进行编写:

ILog logger = LogManager.GetLogger(typeof(CCController));

因为它简洁明了。

尽管如此,我现在并没有在类中创建记录器实例,I let my IoC container inject it for me

答案 6 :(得分:0)

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

我首先创建logs文件夹并允许iis用户获得完全权限,并查看是否正在创建日志文件。

答案 7 :(得分:0)

如果要动态选择日志文件的路径,请使用以下链接中编写的方法:method to dynamic choose the log file path

如果需要,可以这样设置应用EXE文件所在的路径-

var logFileLocation = System.IO.Path.GetDirectoryName
(System.Reflection.Assembly.GetEntryAssembly().Location);

,然后将此“ logFileLocation”发送到上面的链接中编写的方法中,如下所示:

Initialize(logFileLocation);

就可以开始了! :)

答案 8 :(得分:0)

我正在使用log4net 2.0.8开发.NET Core 2.1,发现NealWalters代码抱怨XmlConfigurator.Configure()的参数约为0。我找到了Matt Watson here

的解决方案
        log4net.GlobalContext.Properties["LogFileName"] = @"E:\\file1"; //log file path
        var logRepository = LogManager.GetRepository(Assembly.GetEntryAssembly());
        XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));

答案 9 :(得分:0)

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

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