c# - 使用 log4net Asp.net Core 2.2 将日志文件写入 AppData 不起作用

标签 c# asp.net log4net

我正在尝试将日志文件写入 AppData 位置,但它不起作用。我尝试过 env%{AppData}env%{APPDATA}%APPDATA%${AppData}, ${APPDATA} 但没有人工作。如果我使用 C:\Temp 它确实可以工作。

我使用Asp.Net Core 2.2。和 log4net 2.08。

有什么建议吗?

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <root>
    <level value="ALL" />
    <appender-ref ref="console" />
    <appender-ref ref="file" />
  </root>
  <appender name="console" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %date{dd-mm-yyyy HH:mm:ss} %logger [%thread] - %message %exception%newline" />
    </layout>
  </appender>
  <appender name="file" type="log4net.Appender.RollingFileAppender">
    <file value="${AppData}\MyApp\MyLogFile.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="5" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %date{dd-mm-yyyy HH:mm:ss} %logger [%thread] - %message %exception%newline" />
    </layout>
  </appender>
</log4net>

最佳答案

对于与我有同样问题的人:

Nuget(安装):

log4net
Microsoft.Extensions.Options.ConfigurationExtensions
Microsoft.Extensions.Logging.Console
Microsoft.Extensions.Logging.Debug
Microsoft.Extensions.Logging.Log4Net.AspNetCore

AssemblyInfo.cs:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

appsettings.json:

"Log4NetConfigFile": {
    "Name": "log4net.config"
  },

程序.cs


using Microsoft.Extensions.Logging; //Had to write manually

public static void Main(string[] args)
{
    var logRepo = LogManager.GetRepository(Assembly.GetEntryAssembly());
    log4net.GlobalContext.Properties["LogPath"] = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "MyApp");
    log4net.Config.XmlConfigurator.Configure(logRepo, new FileInfo("log4net.config"));
    
    CreateWebHostBuilder(args).Build().Run();
}

public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args)
    .ConfigureLogging((webHostBuilderContext, loggingBuilder) =>
    {
        loggingBuilder.AddLog4Net();
    })
    .UseStartup<Startup>();
}

将 log4net.config 设置为复制到输出目录:始终复制

log4net.config:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <root>
    <level value="ALL" />
    <appender-ref ref="console" />
    <appender-ref ref="file" />
  </root>
  <appender name="console" type="log4net.Appender.ConsoleAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %date{dd-mm-yyyy HH:mm:ss} %logger [%thread] - %message %exception%newline" />
    </layout>
  </appender>
  <appender name="file" type="log4net.Appender.RollingFileAppender">
    <file type="log4net.Util.PatternString" value="%property{LogPath}\MyLogFile.log" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="5" />
    <maximumFileSize value="10MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %date{dd-mm-yyyy HH:mm:ss} %logger [%thread] - %message %exception%newline" />
    </layout>
  </appender>
</log4net>

HomeController.cs

private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(HomeController));

public HomeController()
{
    log.Info("Starting GenerateDebugLog method...");
}

关于c# - 使用 log4net Asp.net Core 2.2 将日志文件写入 AppData 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56325688/

相关文章:

c# - 使用组合框中选定的文本更改 SQL 查询

c# - 如何使用Extend Custom Control和在Window中使用

asp.net - 我的 jQuery ajax 不起作用

没有 log4net 的 NHibernate?

c# - 无论如何使用 log4net 记录一些信息

c# - 从数据集和数据表生成 Crystal 报表

c# - 如何在我的 ASP.NET ListView 中创建 If 子句?

asp.net - 在 ASP.NET MVC 中将对象的 JSON 数组发布到 Controller

c# - log4net:无法加载类型 'log4net.Appender.AdoNetAppender'

c# - 确保此代码文件中定义的类与 'inherits' 属性匹配