{"id":9423,"date":"2024-07-11T11:22:22","date_gmt":"2024-07-11T02:22:22","guid":{"rendered":"https:\/\/www.auctionpro.co.kr\/?p=9423"},"modified":"2024-07-11T14:34:18","modified_gmt":"2024-07-11T05:34:18","slug":"nlog","status":"publish","type":"post","link":"https:\/\/www.auctionpro.co.kr\/?p=9423","title":{"rendered":"NLog"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>\uc81c3\uc790 \ub85c\uae45 \uc11c\ube44\uc2a4<\/strong>: Serilog, NLog, ELK Stack (Elasticsearch, Logstash, Kibana)\uc640 \uac19\uc740 \uc678\ubd80 \ub85c\uae45 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub85c\uadf8\ub97c \ud2b9\uc815 \uc2a4\ud1a0\ub9ac\uc9c0\ub098 \uc11c\ube44\uc2a4\ub85c \ubcf4\ub0bc \uc218 \uc788\uc2b5\ub2c8\ub2e4.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. NLog \ud328\ud0a4\uc9c0 \uc124\uce58<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-6.png\"><img loading=\"lazy\" decoding=\"async\" width=\"882\" height=\"220\" src=\"https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-6.png\" alt=\"\" class=\"wp-image-9424\" srcset=\"https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-6.png 882w, https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-6-300x75.png 300w, https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-6-768x192.png 768w\" sizes=\"auto, (max-width: 882px) 100vw, 882px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:vim decode:true \">dotnet add package NLog.Web.AspNetCore\ndotnet add package NLog.Extensions.Logging\ndotnet add package NLog.Database<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 MySQL \uc5d0 \uc800\uc7a5\uc2dc  : \ub85c\uadf8 \ub514\ube44\ucee8\ub125\uc158 \uc624\ub958 \ubc1c\uc0dd\uc2dc \ubb38\uc81c \ub9ce\uc74c (\ube44\ucd94)<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-7.png\"><img loading=\"lazy\" decoding=\"async\" width=\"871\" height=\"83\" src=\"https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-7.png\" alt=\"\" class=\"wp-image-9425\" srcset=\"https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-7.png 871w, https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-7-300x29.png 300w, https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-7-768x73.png 768w\" sizes=\"auto, (max-width: 871px) 100vw, 871px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:vim decode:true \">dotnet add package MySql.Data\n<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">2. Create the MySQL Database and Table<\/h3>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:mysql decode:true \">CREATE TABLE LogTable (\n    Id INT AUTO_INCREMENT PRIMARY KEY,\n    Date DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,\n    Level VARCHAR(50) NOT NULL,\n    Logger VARCHAR(255) NOT NULL,\n    Message TEXT NOT NULL,\n    Exception TEXT\n);\n<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">3. nlog.config \ub8e8\ud2b8\uc5d0 \ucd94\uac00 <\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">NLog.Config \uc788\uc744\uc2dc \uc0ad\uc81c<\/p>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true \" >&lt;?xml version=\"1.0\" encoding=\"utf-8\" ?&gt;\n&lt;nlog xmlns=\"http:\/\/www.nlog-project.org\/schemas\/NLog.xsd\"\n      xmlns:xsi=\"http:\/\/www.w3.org\/2001\/XMLSchema-instance\"\n     internalLogLevel=\"Debug\"\n     internalLogFile=\"internal-nlog.txt\"&gt;\n\n  &lt;!-- Include the NLog.Web.AspNetCore package --&gt;\n  &lt;extensions&gt;\n    &lt;add assembly=\"NLog.Web.AspNetCore\" \/&gt;\n  &lt;\/extensions&gt;\n\n  &lt;!-- Define the targets --&gt;\n  &lt;targets&gt;\n    &lt;!-- Log to a file --&gt;\n    &lt;target xsi:type=\"File\" name=\"logfile\" fileName=\"logs\/logfile.txt\"\n            layout=\"${longdate} ${uppercase:${level}} ${logger} ${message} ${exception}\" \/&gt;\n\n    &lt;!-- Log to the console --&gt;\n    &lt;target xsi:type=\"Console\" name=\"logconsole\"\n            layout=\"${longdate} ${uppercase:${level}} ${logger} ${message} ${exception}\" \/&gt;\n\n    &lt;!-- Log to a MySQL database --&gt;\n    &lt;target xsi:type=\"Database\" name=\"database\"\n            connectionString=\"Server=myServerAddress;Database=myDataBase;User=myUsername;Password=myPassword;\"\n            dbProvider=\"MySql.Data.MySqlClient.MySqlConnection, MySql.Data\"\n            commandText=\"INSERT INTO LogTable (Level, Logger, Message, Exception) VALUES (@level, @logger, @message, @exception)\"&gt;\n      &lt;parameter name=\"@date\" layout=\"${longdate}\" \/&gt;\n      &lt;parameter name=\"@level\" layout=\"${level}\" \/&gt;\n      &lt;parameter name=\"@logger\" layout=\"${logger}\" \/&gt;\n      &lt;parameter name=\"@message\" layout=\"${message}\" \/&gt;\n      &lt;parameter name=\"@exception\" layout=\"${exception:tostring}\" \/&gt;\n    &lt;\/target&gt;\n  &lt;\/targets&gt;\n\n  &lt;!-- Define the rules --&gt;\n  &lt;rules&gt;\n    &lt;!-- Log everything to file and console --&gt;\n    &lt;logger name=\"*\" minlevel=\"Trace\" writeTo=\"logfile,logconsole\" \/&gt;\n\n    &lt;!-- Log only errors to the database --&gt;\n    &lt;logger name=\"*\" minlevel=\"Error\" writeTo=\"database\" \/&gt;\n  &lt;\/rules&gt;\n&lt;\/nlog&gt;\n<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">4.Program.cs<\/h3>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:c# decode:true \">using NLog.Web;\n\nvar logger = NLogBuilder.ConfigureNLog(\"nlog.config\").GetCurrentClassLogger();\ntry\n{\n    logger.Debug(\"init main\");\n    var builder = WebApplication.CreateBuilder(args);\n\n    \/\/ Add services to the container.\n    builder.Services.AddControllersWithViews();\n\n    \/\/ Configure NLog as the logging provider\n    builder.Logging.ClearProviders();\n    builder.Logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);\n    builder.Host.UseNLog();\n\n    var app = builder.Build();\n\n    \/\/ Configure the HTTP request pipeline.\n    if (!app.Environment.IsDevelopment())\n    {\n        app.UseExceptionHandler(\"\/Home\/Error\");\n        app.UseHsts();\n    }\n\n    app.UseHttpsRedirection();\n    app.UseStaticFiles();\n\n    app.UseRouting();\n\n    app.UseAuthorization();\n\n    app.MapControllerRoute(\n        name: \"default\",\n        pattern: \"{controller=Home}\/{action=Index}\/{id?}\");\n\n    app.Run();\n}\ncatch (Exception ex)\n{\n    \/\/ NLog: catch setup errors\n    logger.Error(ex, \"Stopped program because of exception\");\n    throw;\n}\nfinally\n{\n    \/\/ Ensure to flush and stop internal timers\/threads before application-exit (Avoid segmentation fault on Linux)\n    NLog.LogManager.Shutdown();\n}\n<\/pre><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">5. Mysql Log Data<\/h3>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-8.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"383\" src=\"https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-8-1024x383.png\" alt=\"\" class=\"wp-image-9426\" srcset=\"https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-8-1024x383.png 1024w, https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-8-300x112.png 300w, https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-8-768x287.png 768w, https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-8-1536x575.png 1536w, https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-8.png 1553w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">6. Log files<\/h3>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-9.png\"><img loading=\"lazy\" decoding=\"async\" width=\"784\" height=\"111\" src=\"https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-9.png\" alt=\"\" class=\"wp-image-9427\" srcset=\"https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-9.png 784w, https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-9-300x42.png 300w, https:\/\/www.auctionpro.co.kr\/wp-content\/uploads\/2024\/07\/image-9-768x109.png 768w\" sizes=\"auto, (max-width: 784px) 100vw, 784px\" \/><\/a><\/figure>\n\n\n\n<div class=\"wp-block-urvanov-syntax-highlighter-code-block\"><pre class=\"lang:vim decode:true \">2024-07-10 13:56:04.8714 INFO Starting up\n2024-07-10 15:30:18.1394 INFO Starting up\n2024-07-10 15:43:03.4143 INFO Starting up\n2024-07-10 16:06:03.7546 DEBUG InMemoryCacheCore.Program init main\n2024-07-10 16:06:04.6545 INFO InMemoryCacheCore.Program Starting up\n2024-07-10 16:22:22.6490 DEBUG InMemoryCacheCore.Program init main\n2024-07-10 16:22:23.9055 INFO InMemoryCacheCore.Program Starting up\n2024-07-10 16:29:31.8965 DEBUG InMemoryCacheCore.Program init main<\/pre><\/div>\n","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>\uc81c3\uc790 \ub85c\uae45 \uc11c\ube44\uc2a4: Serilog, NLog, ELK Stack (Elasticsearch, Logstash, Kibana)\uc640 \uac19\uc740 \uc678\ubd80 \ub85c\uae45 \ub77c\uc774\ube0c\ub7ec\ub9ac\ub97c \uc0ac\uc6a9\ud558\uc5ec \ub85c\uadf8\ub97c \ud2b9\uc815 \uc2a4\ud1a0\ub9ac\uc9c0\ub098 \uc11c\ube44\uc2a4\ub85c \ubcf4\ub0bc \uc218 \uc788\uc2b5\ub2c8\ub2e4. 1. NLog \ud328\ud0a4\uc9c0 <a class=\"mh-excerpt-more\" href=\"https:\/\/www.auctionpro.co.kr\/?p=9423\" title=\"NLog\">[&#8230;]<\/a><\/p>\n<\/div>","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[256],"tags":[],"class_list":["post-9423","post","type-post","status-publish","format-standard","hentry","category-c-log"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/9423","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9423"}],"version-history":[{"count":0,"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/9423\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9423"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9423"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.auctionpro.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9423"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}