Я пытаюсь записать сообщения в экземпляр Graylog. Я настроил код для этого в основном приложении Asp.net, и все работает нормально. Однако у меня возникают проблемы при попытке сделать это из консольного приложения. Graylog работает в Docker Desktop на моем компьютере с Windows. в моем экземпляре Graylog у меня активны как вход UDP, так и вход Http.
Для приложения ASP.Net Core это настройка в program.cs
builder.Host.UseSerilog((context, configuration) =>
{
configuration
.ReadFrom.Configuration(context.Configuration)
.WriteTo.Graylog(new GraylogSinkOptions()
{
HostnameOrAddress = "localhost",
Port = 12201,
TransportType = TransportType.Http
});
});
И затем чуть дальше в моем файле program.cs.
app.UseSerilogRequestLogging();
Когда я запускаю приложение ASP.Net, я получаю сообщения журнала в Graylog. Это соответствующие пакеты.
Перейдя к консольному приложению, вот настройка.
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.WriteTo.Console()
.WriteTo.File("log.txt",
rollingInterval: RollingInterval.Day,
rollOnFileSizeLimit: true)
.WriteTo.Graylog(new GraylogSinkOptions()
{
HostnameOrAddress = "localhost",
Port = 12201,
TransportType = TransportType.Http,
Facility = "Test App"
})
.CreateLogger();
При регистрации чего-либо отсюда оно регистрируется в окне консоли и отлично регистрируется в файле. Однако в Graylog ничего не происходит. Я использовал классический Fiddler и смог увидеть весь трафик, исходящий из веб-приложения, И я смог увидеть другие вызовы из моего консольного приложения, которые обращались к API-интерфейсам Graylog с помощью HttpClient, но не было трафика для самой регистрации.
Это пакеты, которые я установил для консоли.
Я также добавил эту строку в настройку, чтобы помочь с отладкой.
Serilog.Debugging.SelfLog.Enable(msg => Console.WriteLine(msg));
Это никогда не активируется, поэтому, насколько я могу судить, либо ничего не происходит, либо Serilog не обращает внимания на то, что приемник не работает. Я искал SO, ChatGPT и общие поисковые системы. Это должно работать, но это не так.
Изменить: я попробовал версию 3.0.2 библиотеки Serilog.Graylog.Sink в своем консольном приложении, и она работает. Любая версия выше этой не работает в консольном приложении, но работает в приложении ASP.Net Core. Кажется, что-то несовместимо.
Редактирование 2: один комментатор попросил минимально воспроизводимый пример. Хотя весь приведенный здесь код в значительной степени соответствует этому, я объединил программу до содержимого одной основной функции, которая работает неправильно в моей настройке. Код выполняется без каких-либо исключений или свидетельств того, что что-то пошло не так, он просто не отображается в журналах, как сообщения из моего приложения ASP.Net Core, настройка которого очень похожа.
static async Task Main(string[] args)
{
Serilog.Debugging.SelfLog.Enable(msg => Console.WriteLine(msg));
Log.Logger = new LoggerConfiguration()
.MinimumLevel.Debug()
.Enrich.FromLogContext()
.WriteTo.Graylog(new GraylogSinkOptions()
{
HostnameOrAddress = "localhost",
Port = 12201,
TransportType = TransportType.Http,
Facility = "Test App",
})
.CreateLogger();
Log.Information("This is a test message");
Log.CloseAndFlush();
}
Подробнее здесь: https://stackoverflow.com/questions/786 ... -work-from
Serilog.Sinks.Graylog работает из приложения веб-API, но не работает из консольного приложения. ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Serilog с Elastic.Serilog.Sinks — минимальный уровень журнала не отражается
Anonymous » » в форуме C# - 0 Ответы
- 89 Просмотры
-
Последнее сообщение Anonymous
-