从窗口服务登录时无法在 log4net 中指定文件夹

问题描述 投票:0回答:1

我正在将 .NET Core 3.1 应用程序作为 Windows 服务运行,并在其中添加了 log4net 日志记录。我遇到的问题是它记录到“C:/Windows/System32/Logs”文件夹,而不是 .exe 文件所在的目录。据我所知,Windows 服务的执行路径不同,导致日志保存在不同的位置。但是,是否有一种方法可以修改该文件夹,使其记录到与 .exe 文件相同的目录?对于解决方案中的所有其他 Web 应用程序,它会记录到同一已发布文件夹。

这是 log4net 配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="Logs/Logs.txt" />
    <encoding value="utf-8" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="50MB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %date [%-5.5thread] %-40.40logger - %message%newline" />
    </layout>
  </appender>
  <root>
    <appender-ref ref="RollingFileAppender" />
    <level value="INFO" />
  </root>
</log4net>

这是startup.cs文件中的配置:

 var configFilepath = Path.Combine(_env.ContentRootPath, "log4net.config");
 return services.AddAbp<EMMSubscriberModule>(
     options => options.IocManager.IocContainer.AddFacility<LoggingFacility>(
         f => f.UseAbpLog4Net().WithConfig(configFilepath)
     )
 );
.net asp.net-core windows-services log4net aspnetboilerplate
1个回答
0
投票

我知道你用的是ABP,但是方法应该是一样的,我们需要使用AppDomain.CurrentDomain.BaseDirectory来设置运行的工作路径,这样log4net日志位置才有效。

public class Program
{
    public static void Main(string[] args)
    {

        string baseDir = AppDomain.CurrentDomain.BaseDirectory;
        string logDir = Path.Combine(baseDir, "Logs");
        string logPath = Path.Combine(logDir, "Logs.txt");

        if (!Directory.Exists(logDir))
        {
            Directory.CreateDirectory(logDir);
        }

        Environment.SetEnvironmentVariable("logPath", logPath);

        WebApplicationOptions options = new()
        {
            ContentRootPath = baseDir,
            Args = args,
            WebRootPath = Path.Combine(baseDir, "wwwroot")
        };

        var builder = WebApplication.CreateBuilder(options);
        ...
        app.Run();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.