مقدمهای بر NLog با استفاده از ASP.NET Core ، در این مقاله، نحوهی پیاده سازی NLog با استفاده از ASP .NET Core را خواهیم آموخت. گزارش گیری بخشی بسیار مهم، بحرانی و ضروری از هر نرمافزار است. ما را در بررسی ماهیت مسائل و مشکلات یاری میکند. ASP.NET Core دارای پشتیبانی داخلی (تعبیه شده/built-in) برای گزارش گیری از APIها بوده و قادر به کار با ارائه دهندگان گزارش گیری گوناگون است.
با استفاده از این ارائه دهندگان داخلی، میتوانیم گزارشهای برنامه را به یک یا چند مقصد ارسال کنیم و نیز، میتوانیم فریمورکهای گزارش گیری شخص ثالث/واسطه، مانند Serilog، Nlog و …، را متصل کنیم.
NLog فریمورکی متنباز و منعطف است که با چندین پلتفرم از جمله .NET Standard، فریمورک Full (یعنی .NET framework 4.7)، Xamarin (Andriod و iOS)، Windows phone، و UWP کار میکند.
بکارگیری و گسترش NLog آسان است. همچنین، انعطاف پذیری بیشتری را از لحاظ پیکربندی فراهم میکند.
همچنین میتوانیم پیکربندی گزارش گیری را در زمان اجرا تغییر دهیم. target/هدف برای ذخیره سازی، نمایش، و ارسال پیامهای گزارش به مقصد معین شده بکار میرود.
NLog میتواند گزارشی را بصورت همزمان به یک یا چند target بنویسد. NLog بیش از ۳۰ target که شامل فایل، گزارش رویداد، پایگاهداده، ایمیل، کنسول و … میشود را فراهم میکند.
اگرقسمت اول آموزش های ما را نخوانده اید همواره می توانید در لینک زیر مشاهده کنید.
در ادامه مراحل پیکربندی NLog در ASP.NET Core Application آمده است.
میتوانیم یک وابستگی NLog را با استفاده از NuGet از طریق اجرای فرمانهای زیر اضافه کنیم.
PM> Install-Package NLog PM> Install-Package NLog.Web.AspNetCore
دو فرمان فوق جهت افزودن وابستگیها به فایل csproj بکار میروند.
<ItemGroup> <PackageReference Include="Microsoft.AspNetCore.App" /> <PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.1.2" PrivateAssets="All" /> <PackageReference Include="NLog.Web.AspNetCore" Version="4.5.4" /> <PackageReference Include="NLog" Version="4.5.4" /> </ItemGroup>
فایل پیکربندی NLog یک فایل XML است که حاوی امکانات مربوط به NLog است. این فایل باید با حروف کوچک نام گذاری شود و در root/فایل اصلی/ریشه ی پروژه مان قرار بگیرد.
دو عنصر اصلی وجود دارد که مورد نیاز همه ی پیکربندی ها است: targets (اهداف) و rules (قوانین).
می تواند عناصر دیگری، مانند extensions (افزایه ها)، include (شامل شدن)، و variables (متغیرها)، نیز داشته باشد.
با این حال، این ها اختیاری هستند و می تواننددر سناریوهای پیشرفته مفید واقع شوند.
عنصر targets یک گزارش، که توسط یک عنصر target تعریف شده است، را تعریف می کند.
دو صفت اصلی وجود دارد:
همچنین صفات اضافی دیگری همراه با عنصر target موجود است اما آن ها به نوع target وابسته هستند؛ برای مثال نوع target یک فایل است، نیاز است پارامتر filename، که برای تعریف نام فایل خروجی مورد استفاده قرار می گیرد، را تعریف کنیم.
جدای از این، عنصر target حاوی صفت layout (طرح) نیز، که فرمت داده های گزارش را تعریف می کند، است.
عنصر rules، target را با log level (سطح گزارش) نگاشت می کند. دارای عنصر logger (گزارشگیر) است که حاوی این نگاشت می باشد. عنصر logger دارای صفات زیر است.
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true" internalLogLevel="info" internalLogFile="internalLog.txt">
<extensions>
<add assembly="NLog.Web.AspNetCore" />
</extensions>
<!-- the targets to write to -->
<targets>
<!-- write to file -->
<target xsi:type="File" name="alldata" fileName="demo-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
<!-- another file log. Uses some ASP.NET core renderers -->
<target xsi:type="File" name="otherFile-web" fileName="demo-Other-${shortdate}.log" layout="${longdate}|${event-properties:item=EventId_Id}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}|url: ${aspnet-request-url}|action: ${aspnet-mvc-action}" />
</targets>
<!-- rules to map from logger name to target -->
<rules>
<logger name="*" minlevel="Trace" writeTo="alldata" />
<!--Skip non-critical Microsoft logs and so log only own logs-->
<logger name="Microsoft.*" maxLevel="Info" final="true" />
<loggername="*"minlevel="Trace"writeTo="otherFile-web" />
</rules>
</nlog>
این فایل باید در محلی که dll مربوط به پروژه قرار گرفته، موجود باشد. بنابراین، نیاز است “copy to bin folder” را فعال کنیم.

NLog با استفاده از ASP.NET Core
با استفاده از متد “UseNLog”، می توانیم NLog را در یک pipeline/خط لوله ی درخواست به عنوان یک وابستگی اضافه کنیم.
برای پی بردن به خطا در کلاس program (برنامه)، می توانیم یک کلاس logger راه اندازی کرده و پس از مقداردهی اولیه ی کلاس program، می توانیم با اطمینان مدیر گزارش (log manager) را خاموش کنیم.
public class Program
{
public static void Main(string[] args)
{
var logger = NLogBuilder.ConfigureNLog("nlog.config").GetCurrentClassLogger();
try
{
logger.Debug("init main function");
CreateWebHostBuilder(args).Build().Run();
}
catch (Exception ex)
{
logger.Error(ex, "Error in init");
throw;
}
finally
{
NLog.LogManager.Shutdown();
}
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(LogLevel.Information);
})
.UseNLog();
}
در کد فوق، logging/گزارش گیری (یعنی SetMinimumLevel) را نیز پیکربندی کرده ایم.
logging می تواند توسط فایل appsettings.json بازنویسی شود. بنابراین، باید آن را بطور صحیح طبق نیازهای خود تنظیم کنیم.
پیش نمایش
همانطور که می دانیم، Logger بصورت ( DI ( dependency injection ( تزریق وابستگی) برای همه ی کنترل کننده ها بصورت پیش فرض موجود است، یک شیء ILogger در سازنده ی کلاس کنترل کننده دریافت می کنیم.
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
public HomeController(ILogger<HomeController> logger)
{
_logger = logger;
}
public IActionResult Index()
{
_logger.LogInformation("HomeController.Index method called!!!");
return View();
}
}
خروجی

NLog با استفاده از ASP.NET Core
فرمت فایل میxadتواند با استفاده از صفت layout/طرح در یک عنصر target تعریف شود.
خلاصه NLog با استفاده از ASP.NET Core
NLog فریمورکی متنxad باز برای گزارش گیری است. پیکربندی آن با ASP.NET Core Application آسان است.
در این مقاله، در رابطه با NLog ، پیکربندی گزارشگیری از فایل با ASP.NET Core 2 توضیح دادهxad ایم.
میxadتوانید source code (کد منبع) را از لینک GitHub در اینجا مشاهده یا دانلود کنید.
برچسب:
نویسنده: دانلودی