我想在IIS上启用文件记录以在IIS上本地解决问题。以下是我正在使用的代码。当我在visual studio上运行并记录到文件时,它可以工作,但是当我部署到IIS时,它不起作用。文件夹有足够的权限来创建文件,我也创建了文件夹和文件。我在这里缺少什么?
Program.cs的
var path = @"C:\workspace\Logs\Log-{Date}.txt";
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Verbose()
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
.Enrich.FromLogContext()
.WriteTo.Console(
outputTemplate:
"[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Exception}{NewLine}",
theme: AnsiConsoleTheme.Literate)
.WriteTo.File(path, fileSizeLimitBytes: 1_000_000,
rollOnFileSizeLimit: true,
shared: true,
flushToDiskInterval: TimeSpan.FromSeconds(1))
.CreateLogger();
启用useSerialLog()
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureServices(services => services.AddAutofac())
.UseStartup<Startup>()
.UseSerilog()
.Build();
答案 0 :(得分:3)
Serilog在本地完美运行。对于IIS,日志文件文件夹需要IIS用户权限。
public Startup(IHostingEnvironment env)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel
.Information()
.WriteTo.RollingFile(@"C:\inetpub\serilog\agilogoservicelogs\{Date}.txt", LogEventLevel.Information)
.WriteTo.Seq("http://localhost:5341")
.CreateLogger();
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
更新您的控制器:
public class ValuesController : Controller
{
private readonly ILogger<ScrumUserController> _logger;
public ValuesController(ILogger<ScrumUserController> logger)
{
_logger = logger;
}
[HttpGet]
public IEnumerable<string> Get()
{
_logger.LogInformation("Agilibo Service start running");
return new string[] { "Agilibo Core", "Service" };
}
}
现在授予部署的IIS上的文件夹权限。
答案 1 :(得分:0)
如果使用.net core,则因为默认的应用程序池标识: ApplicationPoolIdentity 没有写权限。
您应该:
将应用程序池用户更改为本地系统...
或-
授予 ApplicationPoolIdentity 写入权限:
ApplicationPoolIdentity是一个虚拟名称,可以使用“ IIS AppPool \ DefaultAppPool”设置权限。
您可以使用cli进行相同的工作
ICACLS C:\sites\MyWebApp /grant "IIS AppPool\DefaultAppPool":F
别忘了重新启动应用程序池和站点。