Serilog.Sinks.Graylog работает из приложения веб-API, но не работает из консольного приложения.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Serilog.Sinks.Graylog работает из приложения веб-API, но не работает из консольного приложения.

Сообщение Anonymous »

Я пытаюсь записать сообщения в экземпляр 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»