.net - 如何在 Worker Service .NET Core for Linux 中实现日志
问题描述
我正在Worker Service
为服务开发 .NET Core 3.1 新项目模板Linux
。我想为 Linux 实现日志记录。
我必须生成一个text
文件并登录该文件。我已经尝试了一些东西,但这并没有为Linux daemon
.
Program class
代码
public static void Main(string[] args)
{
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
.Enrich.FromLogContext()
.WriteTo.File(@"F:\Logs\Worker\logfile.txt").CreateLogger(); //On this location folder and file will be created
IHost host = CreateHostBuilder(args).Build();
host.Services.UseScheduler(scheduler =>
{
scheduler
.Schedule<ReprocessInvocable>()
.EveryThirtySeconds();
});
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args).UseSystemd()
.ConfigureServices(services =>
{
services.AddScheduler();
services.AddTransient<ReprocessInvocable>();
}).UseSerilog();
ReprocessInvocable.cs
调用的类代码Main
public async Task Invoke()
{
_logger.LogInformation("Information - Worker running at: {time}", DateTimeOffset.Now);
_logger.LogWarning("Warning - Worker running at: {time}", DateTimeOffset.Now);
_logger.LogError("Error - Worker running at: {time}", DateTimeOffset.Now);;
Log.Information("Invoke has called at: {time}", DateTimeOffset.Now);
//return Task.CompletedTask;
}
我怎样才能使它适用于Linux
可执行文件?还是现有代码应该可以正常工作?
编辑1:
1)你用什么来运行你的守护进程?监督?系统化?
我使用 Systemd 安装守护进程。
2)你对“登录Linux”有什么期望吗?
我想在守护进程启动时生成一个文本文件(这在 Windows 中很容易:))并记录/写入文本,例如在 {time} 调用的 Method1 和在 {time} 调用的 Method2 等。只是为了跟踪服务流程.
3)你想要一个磁盘上的日志文件吗?
对于Linux,我想登录Linux机器存储。
4)或者进入系统日志的日志?
如果这给了我一个带有例外日志的文件,那么它也可以。
解决方案
如果简单地写入 Linux 系统日志(位于 的那个/var/log/syslog
)是适合您的解决方案,那么您可以简单地执行以下操作:
[DllImport("libc")]
private static extern void syslog(int priority, string message);
并使用它来记录到syslog
存储。
我为 C# 编写了一个非常简单的"syslog.h"
包装器,并在此处作为要点发布:https ://github.com/jitbit/SyslogCore只需在您的项目中包含一个短.cs
文件,然后使用:
Syslog.Write(Syslog.Level.Warning, "My service name", "something went wrong");
推荐阅读
- css - 根据视口全局更改Vuetify中的字体大小?
- r - 有没有办法使用R从excel文件中提取图片?然后可以将其放入 tesseract ocr
- angular - 错误:试图覆盖
.__ivy_ngcc_bak 带有 ngcc 备份文件,这是不允许的 - html - 无法在 mozilla firefox 中使用 Calc() css 属性
- .htaccess - 什么是正确的 htaccess 重定向代码?
- swift - 参数标签 '(rawValue:)' 不匹配任何可用的重载(xcode 错误)
- json - Flutter:意外字符(在字符 1 处)
- google-chrome - 使用 Xbox One 控制器监听游戏手柄按钮事件
- r - 一次更改列表名称
- javascript - 如何将材质ui Popper的宽度设置为其容器的宽度,同时将禁用门户设置为false