PrimaLogger 2.1.0
dotnet add package PrimaLogger --version 2.1.0
NuGet\Install-Package PrimaLogger -Version 2.1.0
<PackageReference Include="PrimaLogger" Version="2.1.0" />
<PackageVersion Include="PrimaLogger" Version="2.1.0" />
<PackageReference Include="PrimaLogger" />
paket add PrimaLogger --version 2.1.0
#r "nuget: PrimaLogger, 2.1.0"
#:package PrimaLogger@2.1.0
#addin nuget:?package=PrimaLogger&version=2.1.0
#tool nuget:?package=PrimaLogger&version=2.1.0
PrimaLogger v2.1
Упрощенная обёртка над Serilog с конфигурацией через appsettings.json
или Web.config
. Поддержка Console, File и Logstash с автоматическим fallback.
Быстрый старт по версиям .NET
.NET 8/7/6 (Minimal API / Новый стиль)
Program.cs:
using PrimaLogger.Configuration;
var builder = WebApplication.CreateBuilder(args);
// или для консольных приложений:
// var builder = Host.CreateApplicationBuilder(args);
// Добавляем PrimaLogger
builder.Services.AddPrimaLogger(builder.Configuration);
// Остальные сервисы
builder.Services.AddControllers();
var app = builder.Build();
// Конфигурация pipeline
app.MapControllers();
app.Run();
appsettings.json:
{
"Logging": {
"PrimaLogger": {
"ApplicationName": "MyModernApp",
"Console": {
"Enabled": true,
"MinimumLevel": "Information"
}
}
}
}
.NET 5 (Generic Host)
Program.cs:
using Microsoft.Extensions.Hosting;
using PrimaLogger.Configuration;
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
// Добавляем PrimaLogger
services.AddPrimaLogger(hostContext.Configuration);
// Остальные сервисы
services.AddControllers();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
.NET Core 3.1/3.0 (Generic Host)
Program.cs:
using Microsoft.Extensions.Hosting;
using PrimaLogger.Configuration;
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
// Добавляем PrimaLogger
services.AddPrimaLogger(hostContext.Configuration);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
.NET Core 2.2/2.1 (WebHost)
Program.cs:
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using PrimaLogger.Configuration;
public class Program
{
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
// Добавляем PrimaLogger
services.AddPrimaLogger(hostContext.Configuration);
})
.UseStartup<Startup>();
}
.NET Framework 4.6.1+ (классический ASP.NET)
Program.cs:
using PrimaLogger.Configuration;
using Microsoft.Extensions.Logging;
public class Program
{
public static void Main(string[] args)
{
ServiceCollection serviceCollection = new ServiceCollection();
Config = new ConfigurationBuilder()
.SetBasePath(Directory.GetParent(AppContext.BaseDirectory).FullName)
.AddJsonFile("appsettings.json", false)
.Build();
serviceCollection.AddSingleton<IConfigurationRoot>(Config);
serviceCollection.AddPrimaLogger(Config);
IServiceProvider serviceProvider = serviceCollection.BuildServiceProvider();
var logger = serviceProvider.GetRequiredService<ILogger<Program>>(); //вызываем где надо, используем как логгер
}
}
Установка пакетов:
<package id="PrimaLogger" version="2.1.0" />
<package id="Unity.AspNet.Mvc" version="5.11.1" />
<package id="Microsoft.Extensions.Configuration" version="2.1.0" />
<package id="Microsoft.Extensions.Configuration.Json" version="2.1.0" />
appsettings.json:
{
"Logging": {
"PrimaLogger": {
"ApplicationName": "TestApp462",
"Console": {
"Enabled": true,
"MinimumLevel": "Debug"
},
"File": {
"Path": "logs/test-.log",
"MinimumLevel": "Information"
}
}
}
}
Global.asax.cs (с Unity контейнером):
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Unity;
using Unity.AspNet.Mvc;
using Unity.Lifetime;
using PrimaLogger.Configuration;
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
// Стандартная инициализация MVC
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
// Настройка DI
RegisterDependencies();
}
private void RegisterDependencies()
{
var container = new UnityContainer();
// Создаем конфигурацию из Web.config
var configBuilder = new ConfigurationBuilder()
.AddConfiguration(System.Configuration.ConfigurationManager.AppSettings);
var configuration = configBuilder.Build();
// Создаем ServiceCollection и добавляем PrimaLogger
var services = new ServiceCollection();
services.AddPrimaLogger(configuration);
// Регистрируем PrimaLogger сервисы в Unity
var serviceProvider = services.BuildServiceProvider();
container.RegisterInstance<Microsoft.Extensions.Logging.ILoggerFactory>(
serviceProvider.GetService<Microsoft.Extensions.Logging.ILoggerFactory>(),
new ContainerControlledLifetimeManager());
container.RegisterType(typeof(Microsoft.Extensions.Logging.ILogger<>),
typeof(Microsoft.Extensions.Logging.Logger<>),
new ContainerControlledLifetimeManager());
// Регистрируем ваши сервисы
container.RegisterType<IUserService, UserService>();
// Устанавливаем resolver
DependencyResolver.SetResolver(new UnityDependencyResolver(container));
}
}
Альтернативный вариант с Autofac:
// В Global.asax.cs
private void RegisterDependencies()
{
var builder = new ContainerBuilder();
// Создаем конфигурацию
var configBuilder = new ConfigurationBuilder()
.AddConfiguration(System.Configuration.ConfigurationManager.AppSettings);
var configuration = configBuilder.Build();
// Создаем ServiceCollection и добавляем PrimaLogger
var services = new ServiceCollection();
services.AddPrimaLogger(configuration);
// Регистрируем в Autofac
builder.Populate(services);
// Регистрируем контроллеры
builder.RegisterControllers(typeof(MvcApplication).Assembly);
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
}
Конфигурация (универсальная для всех версий .NET Core/.NET 5+)
Минимальная конфигурация в appsettings.json:
{
"Logging": {
"PrimaLogger": {
"ApplicationName": "MyApp",
"Console": {
"Enabled": true,
"MinimumLevel": "Information"
}
}
}
}
Полная конфигурация в appsettings.json:
{
"Logging": {
"PrimaLogger": {
"ApplicationName": "UpdatersWebApp.Debug",
"CustomProperties": {
"Environment": "Development",
"Version": "1.0.0",
"ServiceName": "updaters-service"
},
"Console": {
"Enabled": true,
"MinimumLevel": "Information",
"OutputTemplate": "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}"
},
"File": {
"Path": "logs/app-.log",
"MinimumLevel": "Debug",
"OutputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff} [{Level:u3}] {SourceContext}: {Message:lj}{NewLine}{Exception}",
"RollingInterval": "Day",
"FileSizeLimitBytes": 104857600,
"RetainedFileCountLimit": 30,
"RollOnFileSizeLimit": true,
"Shared": false,
"Encoding": "UTF-8"
},
"ErrorFile": {
"Path": "logs/errors-.log",
"MinimumLevel": "Error",
"OutputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {SourceContext}: {Message:lj}{NewLine}{Exception}",
"RollingInterval": "Day",
"FileSizeLimitBytes": 104857600,
"RetainedFileCountLimit": 90,
"Encoding": "UTF-8"
},
"Logstash": {
"MinimumLevel": "Information",
"Options": {
"Host": "elk-stack-server",
"Port": 5000,
"Protocol": "Tcp"
}
}
}
}
}
Использование в коде (одинаково для всех версий)
В контроллерах:
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.Mvc; // или System.Web.Mvc для .NET Framework
public class UserController : Controller
{
private readonly ILogger<UserController> _logger;
public UserController(ILogger<UserController> logger)
{
_logger = logger;
}
public IActionResult Login(string userId)
{
_logger.LogInformation("User {UserId} attempting login", userId);
try
{
// Логика авторизации
_logger.LogDebug("Validating credentials for {UserId}", userId);
// Успешная авторизация
_logger.LogInformation("User {UserId} logged in successfully", userId);
return Ok();
}
catch (Exception ex)
{
_logger.LogError(ex, "Login failed for user {UserId}", userId);
return BadRequest("Login failed");
}
}
}
В сервисах:
public class UserService
{
private readonly ILogger<UserService> _logger;
public UserService(ILogger<UserService> logger)
{
_logger = logger;
}
public async Task ProcessUserAsync(string userId)
{
_logger.LogDebug("Starting user processing for {UserId}", userId);
using (_logger.BeginScope("UserId: {UserId}", userId))
{
try
{
await DoSomeWorkAsync(userId);
_logger.LogInformation("User processing completed successfully");
}
catch (Exception ex)
{
_logger.LogError(ex, "Failed to process user");
throw;
}
}
}
}
В консольных приложениях:
public class Program
{
private static ILogger<Program> _logger;
public static async Task Main(string[] args)
{
// Настройка для консольного приложения
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddPrimaLogger(builder.Configuration);
var host = builder.Build();
_logger = host.Services.GetRequiredService<ILogger<Program>>();
_logger.LogInformation("Application starting");
try
{
await RunApplicationLogicAsync();
_logger.LogInformation("Application completed successfully");
}
catch (Exception ex)
{
_logger.LogFatal(ex, "Application terminated unexpectedly");
}
}
}
Logstash интеграция
PrimaLogger поддерживает отправку логов в Logstash через различные протоколы:
Logstash TCP (рекомендуется)
{
"Logstash": {
"MinimumLevel": "Information",
"Options": {
"Host": "elk-stack-server",
"Port": 5000,
"Protocol": "Tcp"
}
}
}
Logstash UDP (быстрее, но менее надежен)
{
"Logstash": {
"MinimumLevel": "Information",
"Options": {
"Host": "elk-stack-server",
"Port": 5000,
"Protocol": "Udp"
}
}
}
Автоматический fallback при недоступности Logstash
Если Logstash недоступен, логи продолжат записываться в Console и File:
[WAR] Logstash недоступен: Connection refused
[WAR] • Host: elk-stack-server:5000 (TCP)
[WAR] • Logstash sink отключен, продолжаем работу с локальными sinks
Различия в конфигурации между версиями .NET
Аспект | .NET Core/.NET 5+ | .NET Framework |
---|---|---|
Файл конфигурации | appsettings.json |
Web.config (appSettings) |
Инициализация | services.AddPrimaLogger(configuration) |
Manual DI container setup |
Dependency Injection | Встроенный | Unity/Autofac/другой |
Hosting Model | Generic Host / Minimal API | Classical ASP.NET |
Пути к файлам | logs/app-.log |
App_Data/logs/app-.log |
Справочник параметров конфигурации
PrimaLoggerConfig - основные настройки
Параметр | Тип | По умолчанию | Описание |
---|---|---|---|
ApplicationName |
string |
"webapp" |
Имя приложения, добавляется во все логи как свойство |
CustomProperties |
Dictionary<string, object> |
{} |
Дополнительные свойства, добавляемые во все логи |
Console |
ConsoleLoggerOptions |
null |
Настройки консольного вывода (отключен если null) |
File |
FileLoggerOptions |
null |
Настройки основного файла логов (отключен если null) |
ErrorFile |
FileLoggerOptions |
null |
Настройки файла только для ошибок (отключен если null) |
Logstash |
LogstashSinkOptions |
null |
Настройки Logstash (отключен если null) |
ConsoleLoggerOptions - консольный вывод
Параметр | Тип | По умолчанию | Описание |
---|---|---|---|
Enabled |
bool |
true |
Включить/отключить консольный вывод |
MinimumLevel |
LogEventLevel |
Information |
Минимальный уровень для вывода в консоль |
OutputTemplate |
string |
"[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}" |
Шаблон форматирования сообщений |
FileLoggerOptions - файловое логирование
Параметр | Тип | По умолчанию | Описание |
---|---|---|---|
Path |
string |
"logs/app-.log" |
Путь к файлу логов (поддерживает паттерны даты) |
MinimumLevel |
LogEventLevel |
Information |
Минимальный уровень для записи в файл |
OutputTemplate |
string |
"{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}{Exception}" |
Шаблон форматирования |
RollingInterval |
RollingInterval |
Day |
Интервал ротации: Infinite , Year , Month , Day , Hour , Minute |
FileSizeLimitBytes |
long? |
104857600 (100MB) |
Максимальный размер файла до ротации |
RollOnFileSizeLimit |
bool |
true |
Создавать новый файл при достижении лимита размера |
RetainedFileCountLimit |
int? |
31 |
Количество файлов для хранения (старые удаляются) |
Shared |
bool |
false |
Разрешить доступ к файлу из нескольких процессов |
Encoding |
Encoding |
UTF8 |
Кодировка файла |
LogstashSinkOptions - настройки Logstash
Параметр | Тип | По умолчанию | Описание |
---|---|---|---|
MinimumLevel |
LogEventLevel |
Information |
Минимальный уровень для отправки в Logstash |
Options |
LogstashLoggerOptions |
new() |
Детальные настройки подключения |
LogstashLoggerOptions - подключение к Logstash
Параметр | Тип | По умолчанию | Описание |
---|---|---|---|
Host |
string |
"localhost" |
Хост Logstash сервера |
Port |
int |
5000 |
Порт Logstash сервера |
Protocol |
LogstashProtocol |
Tcp |
Протокол подключения: Tcp , Udp |
LogLevelOverrides - переопределение уровней для категорий
По умолчанию PrimaLogger снижает уровень логирования для шумных компонентов:
Категория | Уровень по умолчанию | Назначение |
---|---|---|
System.Net.Http.HttpClient |
Warning |
HTTP клиент запросы |
Microsoft.Extensions.Http |
Warning |
HTTP extensions |
Microsoft.AspNetCore.Hosting.Diagnostics |
Warning |
ASP.NET Core диагностика |
Microsoft.AspNetCore.Mvc.Infrastructure |
Warning |
MVC инфраструктура |
Microsoft.EntityFrameworkCore.Database.Command |
Warning |
EF Core SQL команды |
Microsoft.EntityFrameworkCore.Infrastructure |
Warning |
EF Core инфраструктура |
Можно переопределить эти настройки:
{
"LogLevelOverrides": {
"Categories": {
"Microsoft.EntityFrameworkCore.Database.Command": "Debug",
"MyApp.Namespace": "Verbose"
}
}
}
Уровни логирования
Уровень | Назначение | Использование | Пример |
---|---|---|---|
Verbose |
Максимальная детализация | Глубокая отладка | _logger.LogTrace("Entering method with param {Param}", param) |
Debug |
Отладочная информация | Разработка | _logger.LogDebug("Processing user {UserId}", userId) |
Information |
Общая информация | Нормальная работа | _logger.LogInformation("User logged in successfully") |
Warning |
Предупреждения | Потенциальные проблемы | _logger.LogWarning("Invalid input received: {Input}", input) |
Error |
Ошибки | Проблемы в работе | _logger.LogError(ex, "Failed to process request") |
Fatal |
Критические ошибки | Аварийное завершение | _logger.LogCritical(ex, "Application crash") |
Мониторинг и диагностика
Логирование запуска
При инициализации PrimaLogger автоматически логирует информацию о конфигурации:
[INF] PrimaLogger инициализирован для MyApp
[INF] Активные sinks: Console(Information), File(Debug), Logstash(Information) | Минимальный уровень: Debug
Обработка ошибок Logstash
При проблемах с Logstash:
[WAR] Logstash недоступен: Connection refused
[WAR] • Host: logs.example.com:5000 (TCP)
[WAR] • Logstash sink отключен, продолжаем работу с локальными sinks
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- Microsoft.Extensions.Configuration (>= 8.0.0)
- Microsoft.Extensions.Configuration.Abstractions (>= 8.0.0)
- Microsoft.Extensions.Configuration.Binder (>= 8.0.0)
- Microsoft.Extensions.Configuration.Json (>= 8.0.0)
- Microsoft.Extensions.DependencyInjection (>= 8.0.0)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 8.0.0)
- Microsoft.Extensions.Logging (>= 8.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 8.0.0)
- Microsoft.Extensions.Options (>= 8.0.0)
- Microsoft.Extensions.Options.ConfigurationExtensions (>= 8.0.0)
- Microsoft.Extensions.Primitives (>= 8.0.0)
- Serilog (>= 4.2.0)
- Serilog.Enrichers.Environment (>= 3.0.1)
- Serilog.Enrichers.Process (>= 3.0.0)
- Serilog.Enrichers.Thread (>= 4.0.0)
- Serilog.Extensions.Logging (>= 8.0.0)
- Serilog.Settings.Configuration (>= 8.0.4)
- Serilog.Sinks.Console (>= 6.0.0)
- Serilog.Sinks.File (>= 6.0.0)
- Serilog.Sinks.Http (>= 8.0.0)
- Serilog.Sinks.Network (>= 2.0.2)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last Updated |
---|---|---|
2.1.0 | 236 | 7/26/2025 |
2.0.6 | 369 | 7/25/2025 |
2.0.5 | 379 | 7/25/2025 |
2.0.4 | 376 | 7/25/2025 |
2.0.3 | 431 | 7/24/2025 |
2.0.2 | 112 | 7/17/2025 |
2.0.1 | 106 | 7/17/2025 |
2.0.0 | 113 | 7/17/2025 |
1.1.0 | 109 | 7/16/2025 |
1.0.9 | 110 | 7/16/2025 |
1.0.8 | 112 | 7/16/2025 |
1.0.7 | 115 | 7/16/2025 |
1.0.6 | 108 | 7/16/2025 |
1.0.5 | 110 | 7/16/2025 |
1.0.4 | 113 | 7/16/2025 |
1.0.3 | 113 | 7/16/2025 |
1.0.2 | 114 | 7/15/2025 |
1.0.1 | 113 | 7/15/2025 |
1.0.0 | 112 | 7/15/2025 |
v2.1.0: Упрощенная версия с Logstash
- Убрана прямая поддержка Elasticsearch
- Добавлена поддержка Logstash (TCP/UDP)
- Конфигурация только через appsettings.json
- Упрощенная архитектура