﻿
{"id":226,"date":"2012-03-18T19:09:46","date_gmt":"2012-03-18T19:09:46","guid":{"rendered":"http:\/\/www.gencayyildiz.com\/blog\/?p=226"},"modified":"2019-02-08T21:21:59","modified_gmt":"2019-02-08T21:21:59","slug":"cta-eventlog-sinifinin-kullanimi","status":"publish","type":"post","link":"https:\/\/www.gencayyildiz.com\/blog\/cta-eventlog-sinifinin-kullanimi\/","title":{"rendered":"C# EventLog S\u0131n\u0131f\u0131n\u0131n Kullan\u0131m\u0131"},"content":{"rendered":"<div id=\"fb-root\"><\/div>\n<p>Bu yaz\u0131mda C#&#8217;ta EventLog s\u0131n\u0131f\u0131n\u0131n kullan\u0131m\u0131n\u0131 g\u00f6rece\u011fiz.Bazen program\u0131n i\u015fleyi\u015fini veya hatalar\u0131n\u0131 bilgi olarak loglamak isteriz.Bu gibi durumlar yaz\u0131l\u0131mc\u0131 i\u00e7in \u00f6nem arz etmektedir.Hatalar\u0131n sebeplerini loglad\u0131\u011f\u0131 veriler sayesinde daha rahat anlayabilir.Program\u0131n i\u015fleyi\u015f bi\u00e7imini loglardan rahatl\u0131kla takip edebilir.\u0130stedi\u011fimiz \u015fekilde loglama yapabiliriz.\u0130sterseniz veritaban\u0131na anl\u0131k durumlar\u0131 ve hatalar\u0131 loglayabilirsiniz.Bir \u00e7ok yolu oldu\u011fu halde bu yaz\u0131mda EventLog s\u0131n\u0131f\u0131yla loglamay\u0131 g\u00f6sterece\u011fim.<br \/>\n<!--more--><br \/>\nBu s\u0131n\u0131f sayesinde Windows i\u015fletim sisteminin i\u00e7indeki programdan faydalanm\u0131\u015f olaca\u011f\u0131z.<br \/>\nDenetim Masas\u0131 &#8211; Y\u00f6netimsel Ara\u00e7lar &#8211; Olay G\u00f6r\u00fcnt\u00fcleyicisi ile, Windows i\u015fletim sisteminin uygulama bazl\u0131 loglar\u0131na eri\u015filebilir.Biz de uygulamam\u0131zda olu\u015facak hatalar\u0131 veya bilgi loglar\u0131n\u0131 burada saklayaca\u011f\u0131z.<br \/>\nBu s\u0131n\u0131f\u0131 kullanabilmek i\u00e7in a\u015fa\u011f\u0131daki k\u00fct\u00fcphaneyi projenize eklemeniz gerekiyor.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nusing System.Diagnostics;\r\n<\/pre>\n<p>\u0130lk olarak logun kayna\u011f\u0131 olu\u015fturulmal\u0131d\u0131r.(Olay G\u00f6r\u00fcnt\u00fcleyicinsindeki kategori i\u00e7indeki Uygulama ve Hizmet G\u00fcnl\u00fckleri sekmesinde g\u00f6r\u00fcnecek isim)<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nif (!EventLog.SourceExists(&quot;Gen\u00e7ay&quot;))\r\n            {\r\n                EventLog.CreateEventSource(&quot;Gen\u00e7ay&quot;,&quot;Gen\u00e7ay&quot;);\r\n            }\r\n<\/pre>\n<p>Yukardaki kod blo\u011funu tan\u0131mlayal\u0131m.<br \/>\nEventLog.SourceExists(&#8220;Gen\u00e7ay&#8221;) : &#8220;Gen\u00e7ay&#8221; isminde kaynak varsa True, yoksa False g\u00f6nderir.<br \/>\nEventLog.CreateEventSource(&#8220;Gen\u00e7ay&#8221;,&#8221;Gen\u00e7ay&#8221;) : &#8220;Gen\u00e7ay&#8221; isminde ki kayna\u011f\u0131, &#8220;Gen\u00e7ay&#8221; kategorisinde olu\u015ftur.<br \/>\nSonu\u00e7 olarak benim bilgisayar\u0131mda &#8220;Gen\u00e7ay&#8221; diye bir kay\u0131t olmad\u0131\u011f\u0131ndan !EventLog.SourceExists(&#8220;Gen\u00e7ay&#8221;) true d\u00f6necektir ve if scope&#8217;u \u00e7al\u0131\u015f\u0131p &#8220;Gen\u00e7ay&#8221; ad\u0131nda bir kaynak olu\u015fturulacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\nif (!EventLog.SourceExists(&quot;Gen\u00e7ay&quot;))\r\n            {\r\n                EventLog.CreateEventSource(&quot;Gen\u00e7ay&quot;,&quot;Gen\u00e7ay&quot;);\r\n            }\r\n<\/pre>\n<p>\u015eimdi ise olu\u015fturdu\u011fum kayna\u011fa loglama yapma zaman\u0131..<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n            EventLog log = new EventLog();\r\n\/\/EventLog nesnesi olu\u015fturuyoruz.\r\n            log.Source = &quot;Gen\u00e7ay&quot;;\r\n\/\/Loglama yapaca\u011f\u0131m\u0131z kayna\u011f\u0131 g\u00f6steriyoruz.Yukarda olu\u015fturdu\u011fum kayna\u011f\u0131 yazd\u0131m ben.\r\n            log.WriteEntry(&quot;Hata Var&quot;, EventLogEntryType.Error);\r\nVe WriteEntry metoduyla Hata mesaj\u0131 tipinden logumuzu kay\u0131t ediyoruz.\r\n<\/pre>\n<p>Yukarda ki kodlar\u0131 her \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131z da hata mesaj\u0131 yaz\u0131lacakt\u0131r.<br \/>\n<a href=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/hataresim1.jpg\"><img loading=\"lazy\" decoding=\"async\" title=\"Hata Resmi\" src=\"http:\/\/www.gencayyildiz.com\/blog\/wp-content\/uploads\/2012\/03\/hataresim1.jpg\" alt=\"Hata\" width=\"500\" height=\"500\" \/><\/a><br \/>\n\u015eu ana kadar EventLog s\u0131n\u0131f\u0131n da loglama nas\u0131l yap\u0131ld\u0131\u011f\u0131n\u0131 \u00f6\u011frendik.Ancak bu \u015fekilde loglama olmaz.Ben baz\u0131 durumlar\u0131 bilgi tipinde,hatalar\u0131 da hata tipinde loglama yapmak istiyorum.Yani program hata verdi\u011finde loglamas\u0131 gerekiyor.Buna benzer bir uygulama 2. sayfada g\u00f6rebilirsiniz.<br \/>\n<!--nextpage--><br \/>\nBurada loglamayla ilgili ufak bir uygulama yapaca\u011f\u0131z.<br \/>\n\u00d6ncelikle Logger.cs sayfas\u0131n\u0131 olu\u015ftural\u0131m.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n--Logger.cs--\r\n class Logger\r\n    {\r\n        private void Logla(string LogMesaji,bool HataMi)\r\n        {\r\n            if (!EventLog.SourceExists(&quot;Gen\u00e7ay&quot;))\r\n            {\r\n                EventLog.CreateEventSource(&quot;Gen\u00e7ay&quot;,&quot;Gen\u00e7ay&quot;);\r\n            }\r\n            EventLog loglama = new EventLog();\r\n            loglama.Source = &quot;Gen\u00e7ay&quot;;\r\n            if (HataMi)\/\/E\u011fer HataMi de\u011fi\u015fkeni True ise hata olarak loglayacak,False ise Bilgi olarak.\r\n            {\r\n                loglama.WriteEntry(LogMesaji, EventLogEntryType.Error);\r\n            }\r\n            else\r\n            {\r\n                loglama.WriteEntry(LogMesaji, EventLogEntryType.Information);\r\n            }\r\n        }\r\n        \/*Yukardaki metod private olarak tan\u0131mlanm\u0131\u015ft\u0131r.D\u0131\u015fardan Logger class\u0131n\u0131n nesnesinden\r\nbu metoda ula\u015f\u0131lamaz.Bu metod log kay\u0131t etme i\u015flemini ger\u00e7ekle\u015ftirmektedir.*\/\r\n        private void SqlHatalariKodla(string LogMesaji,SqlErrorCollection SqlHatalari)\r\n        {\r\n            StringBuilder sb = new StringBuilder();\r\n            foreach (SqlError hata in SqlHatalari)\r\n            {\r\n                sb.AppendLine(&quot;Hata Tarihi :&quot;);\r\n                sb.Append(DateTime.Now);\r\n                sb.Append(Environment.NewLine);\r\n                sb.AppendLine(&quot;Sat\u0131r Numaras\u0131 :&quot;);\r\n                sb.Append(hata.LineNumber);\r\n                sb.Append(Environment.NewLine);\r\n                sb.AppendLine(&quot;Mesaj :&quot;);\r\n                sb.Append(hata.Message);\r\n                sb.Append(Environment.NewLine);\r\n                sb.AppendLine(&quot;No :&quot;);\r\n                sb.Append(hata.Number);\r\n                sb.Append(Environment.NewLine);\r\n                sb.AppendLine(&quot;Prosed\u00fcr :&quot;);\r\n                sb.Append(hata.Procedure);\r\n                sb.Append(Environment.NewLine);\r\n                sb.AppendLine(&quot;Kaynak&quot;);\r\n                sb.Append(hata.Source);\r\n                sb.Append(Environment.NewLine);\r\n                sb.AppendLine(&quot;Sever&quot;);\r\n                sb.Append(hata.Server);\r\n                sb.Append(Environment.NewLine);\r\n                sb.Append(Environment.NewLine);\r\n                sb.Append(Environment.NewLine);\r\n                sb.Append(&quot;----------------------------------&quot;);\r\n                sb.Append(LogMesaji);\r\n            }\r\n            Logla(sb.ToString(), true);\r\n        }\r\n        \/*Bu metod ise sadece SqlException hatalar\u0131n\u0131 yakalar.SqlException dan gelen\r\nhatalar SqlError tipindedir ve bu hatalar SqlErrorCollection koleksiyonuda tutulur.\r\nSqlError tipini kullanarak biz bir sql hatas\u0131n\u0131n t\u00fcm detay bilgilerine eri\u015febiliriz.\r\nBu detay bilgileriyle hatan\u0131n olu\u015fma zaman\u0131, tipi, mesaj\u0131, sat\u0131r nosu gibi bilgilere\r\neri\u015febiliriz.StringBuilder s\u0131n\u0131f\u0131n\u0131 kullanarak bu bilgileri belirli bir d\u00fczende toplayarak\r\n,en son Logla metodunu \u00e7a\u011f\u0131r\u0131p kay\u0131t ediyoruz.Ancak dikkat ederseniz bu metodumuzda private.\r\nYani bunada d\u0131\u015fardan eri\u015fim sa\u011flayam\u0131yoruz.Peki bu metodlar\u0131 nas\u0131l devreye sokaca\u011f\u0131z?*\/\r\n\r\n        \/*Bir tane public metod olu\u015fturaca\u011f\u0131m.Bu metod Exception tipinden parametre alacak.\r\nBiliyoruz ki hatalar\u0131n en geneli Exception tiptir.Di\u011fer hatalar bunun i\u00e7indedir.E\u011fer bir hata\r\n geldi\u011finde SqlException tipine \u00e7evirebiliyorsak e\u011fer SqlHatalariKodla() metodu \u00e7al\u0131\u015ft\u0131r\u0131lacak.\r\nE\u011fer \u00e7evrilmiyorsa demek ki ba\u015fka bir hata var(SqlException tipinden olmayan ama Exception tipinin kapsad\u0131\u011f\u0131)\r\n o zamanda o hatay\u0131 al\u0131p direkt olarak Logla() metodunu \u00e7al\u0131\u015ft\u0131raca\u011f\u0131z.*\/\r\n        public void Loglayal\u0131m(Exception hata)\r\n        {\r\n            SqlException hatam = hata as SqlException;\r\n            \/* as operat\u00f6r\u00fc sayesinde Exception tipindeki hata referans\u0131 SqlExeption\r\n tipine d\u00f6nebiliyorsa o tipe \u00e7evirecektir.E\u011fer d\u00f6nm\u00fcyorsa null de\u011ferini verecektir.*\/\r\n            if (hatam==null)\r\n            {\r\n                Logla(hatam.Message, true);\r\n            }\r\n            else\r\n            {\r\n                SqlHatalariKodla(hata.Message, hatam.Errors);\r\n            }\r\n        }\r\n        \/\/G\u00f6rd\u00fc\u011f\u00fcn\u00fcz gibi yukardaki metod anlatt\u0131\u011f\u0131m\u0131z i\u015flemi ger\u00e7ekle\u015ftirmektedir.\r\n    }\r\n<\/pre>\n<p>Yukardaki Logger.cs class\u0131n\u0131 \u00e7al\u0131\u015ft\u0131raca\u011f\u0131m\u0131z hatal\u0131 kodlar\u0131m\u0131z da Form1.cs sayfas\u0131nda mevcut olacakt\u0131r.<\/p>\n<pre class=\"brush: jscript; title: ; notranslate\" title=\"\">\r\n        private void Form1_Load(object sender, EventArgs e)\r\n        {\r\n            try\r\n            {\r\n                SqlConnection baglanti = new SqlConnection(&quot;Server=GENCAY-GENCAY;database=northwind;trusted_connection=true;&quot;);\r\n                SqlCommand cmd = new SqlCommand(&quot;Select * ffrom Personeller&quot;, baglanti);\r\n                SqlDataAdapter dap = new SqlDataAdapter(cmd);\r\n                DataTable dt = new DataTable();\r\n                dap.Fill(dt);\r\n                dataGridView1.DataSource = dt;\r\n            }\r\n            catch (Exception hata)\r\n            {\r\n                Logger calistir = new Logger();\r\n                calistir.Loglayal\u0131m(hata);\r\n\r\n            }\r\n        }\r\n<\/pre>\n<p>Dikkat ederseniz sorguda from yerine ffrom yazd\u0131m.Bu kodlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131rsan\u0131z loglama i\u015flemi ba\u015far\u0131yla ger\u00e7ekle\u015fti\u011fini g\u00f6receksiniz.<\/p>\n<!-- AddThis Advanced Settings generic via filter on the_content --><!-- AddThis Share Buttons generic via filter on the_content -->","protected":false},"excerpt":{"rendered":"<p>Bu yaz\u0131mda C#&#8217;ta EventLog s\u0131n\u0131f\u0131n\u0131n kullan\u0131m\u0131n\u0131 g\u00f6rece\u011fiz.Bazen program\u0131n i\u015fleyi\u015fini veya hatalar\u0131n\u0131 bilgi olarak loglamak isteriz.Bu gibi durumlar yaz\u0131l\u0131mc\u0131 i\u00e7in \u00f6nem arz etmektedir.Hatalar\u0131n sebeplerini loglad\u0131\u011f\u0131 veriler sayesinde daha rahat anlayabilir.Program\u0131n i\u015fleyi\u015f bi\u00e7imini loglardan rahatl\u0131kla takip&#46;&#46;&#46;<!-- AddThis Advanced Settings generic via filter on get_the_excerpt --><!-- AddThis Share Buttons generic via filter on get_the_excerpt --><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12],"tags":[150],"class_list":["post-226","post","type-post","status-publish","format-standard","hentry","category-c-sharp-c","tag-eventlog"],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/226","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/comments?post=226"}],"version-history":[{"count":1,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/226\/revisions"}],"predecessor-version":[{"id":10366,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/posts\/226\/revisions\/10366"}],"wp:attachment":[{"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/media?parent=226"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/categories?post=226"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.gencayyildiz.com\/blog\/wp-json\/wp\/v2\/tags?post=226"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}