[英]Adding Serilog to Azure Function App and logging to a file?
我正在尝试将 Serilog 添加到 Azure Function 应用程序(.Net 6.0)中,当然它不会写入文件。 当我运行程序时,我可以在控制台中看到“[15:58:00 INF] Hello World.”? 那么为什么不查看文件:我的另一个问题是为什么我看到“[16:03?24 INF] null”。 我的长期目标是登录到 Azure 上的 blob。 谢谢您的帮助。
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using Serilog;
using Serilog.Events;
using Serilog.Extensions.Logging;
using SerilogFunctionApp;
using ILogger = Microsoft.Extensions.Logging.ILogger;
[assembly: WebJobsStartup(typeof(Startup))]
namespace SerilogFunctionApp
{
public class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
string basedir = AppDomain.CurrentDomain.BaseDirectory;
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Console()
.WriteTo.Debug()
.WriteTo.File(basedir + "/logs/log-.txt", rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true)
.CreateLogger();
builder.Services.AddLogging(lb => { lb.AddSerilog(Log.Logger, true); });
}
}
public class Function1
{
//other code
private ILogger _log;
public Function1(ILoggerFactory loggerFactory)
{
_log = loggerFactory.CreateLogger<Function1>();
}
[FunctionName("Function1")]
public void Run([TimerTrigger("0 */1 * * * *")] TimerInfo myTimer, ILogger log)
{
_log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
Log.Information("Hello World!");
}
}
}
我发现了一个关于将启动添加到 function 的 StackOverflow,它看起来与我在上面发布的内容不同,所以我尝试修改我的应用程序,但仍然没有记录到文件中。
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System;
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Azure.WebJobs;
using Serilog;
using ILogger = Microsoft.Extensions.Logging.ILogger;
[assembly: FunctionsStartup(typeof(SerilogFunctionApp.Startup))]
namespace SerilogFunctionApp
{
public class Startup : FunctionsStartup
{
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
var context = builder.GetContext();
//builder.ConfigurationBuilder
// .AddJsonFile(Path.Combine(context.ApplicationRootPath, "appsettings.json"), optional: true, reloadOnChange: false)
// .AddJsonFile(Path.Combine(context.ApplicationRootPath, $"appsettings.{context.EnvironmentName}.json"), optional: true, reloadOnChange: false);
}
public override void Configure(IFunctionsHostBuilder builder)
{
// get the configuration from the builder
var configuration = builder.GetContext().Configuration;
string basedir = AppDomain.CurrentDomain.BaseDirectory;
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Information()
.WriteTo.Console()
.WriteTo.Debug()
.WriteTo.File(basedir + "/logs/log-.txt", rollingInterval: RollingInterval.Day, rollOnFileSizeLimit: true)
.CreateLogger();
builder.Services.AddLogging(lb => { lb.AddSerilog(Log.Logger, true); });
}
}
public class Function1
{
//other code
private ILogger _log;
public Function1(ILoggerFactory loggerFactory)
{
_log = loggerFactory.CreateLogger<Function1>();
}
[FunctionName("Function1")]
public void Run([TimerTrigger("0 */1 * * * *")] TimerInfo myTimer, ILogger log)
{
_log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
Log.Information("Hello World!");
}
}
I have reproduced in my local environment a example, You can use normal Timer Trigger function write logs into a file by following below workaround: Firstly create a Azure Function App with timer trigger then in host.json file add fileLoggingMode as below:
{
"version": "2.0",
"logging": {
"fileLoggingMode": "always",
"applicationInsights": {
"samplingSettings": {
"isEnabled": true,
"excludedTypes": "Request"
}
}
}
}
然后在 Function.cs 类中:
using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
namespace FunctionApp18
{
public class Function1
{
[FunctionName("Function1")]
public void Run([TimerTrigger("0 */1 * * * *")]TimerInfo myTimer, ILogger log)
{
log.LogInformation("Rithwik Here");
log.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
}
}
}
我在控制台中获取日志:
然后在我的本地路径中:
%temp%\LogFiles\Application\Functions.
我可以发现我的日志被写入如下文件:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.