สร้าง LogClass ไว้เขียน Log

  1. เพิ่ม Reference ชื่อ System.Configuration
  2. กำหนด path ที่ใช้เก็บ Log
  3. สร้างคลาส LogClass
  4. Program.cs

1.เพิ่ม Reference ชื่อ System.Configuration

ที่ Solution Explorer
ใต้โปรเจ็กส์ ให้คลิกขวาที่ References
เลือก Add Reference…

จะเห็นไดอะล็อก Reference Manager
เลือก Assemblies
พิมพ์ค้นหาด้วยคำว่า configuration
เลือก System.Configuration แล้วคลิก OK

2.กำหนด path ที่ใช้เก็บ Log

App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>

  <appSettings>
    <add key="LogPath"     value="\log\" />
  </appSettings>

</configuration>

บรรทัดที่ 8: กำหนด path ที่ต้องการเก็บไฟล์ log

3.สร้างคลาส LogClass

สร้างโฟลเดอร์ mylib ไว้เก็บคลาส จากนั้นสร้างไฟล์ mylib/LogClass.cs

mylib/LogClass.cs

using System;
using System.Configuration;
using System.Globalization;
using System.IO;

namespace ConsoleApp1.mylib
{
    class LogClass
    {
        private static void Log(string logMessage)
        {
            string logPath = AppDomain.CurrentDomain.BaseDirectory
                + ConfigurationManager.AppSettings.Get("LogPath");  // path

            if (!Directory.Exists(logPath))
                Directory.CreateDirectory(logPath);

            string filename = logPath
                + DateTime.Today.ToString("yyyy-MM-dd", new CultureInfo("en-US")) + ".log";     // filename

            using (StreamWriter w = File.AppendText(filename))
            {
                w.WriteLine("[{0}]  {1}", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss", new CultureInfo("en-US")), logMessage);
            }
        }

        public static void writeApplicationName()
        {
                        Log("===================================================================");
            Log(AppDomain.CurrentDomain.FriendlyName);
        }

        public static void writeLogMethod(string message)
        {
            Log("  " + message);
        }

        public static void writeLogDetail(string message)
        {
            Log("    " + message);
        }

        public static void writeResponse(string message)
        {
            Log("------------------------");
            Log("Response : " + message + "\n");
        }

    }
}

AppDomain.CurrentDomain.BaseDirectory จะคืนค่า path ของโปรแกรมที่รัน (.exe)
เสมอ แต่ถ้าเป็น Environment.CurrentDirectory จะคืนค่า path ของ Environment ที่ใช้รัน ซึ่งอาจจะไม่ใช่ตำแหน่งที่ไฟล์นั้นอยู่ (เช่นเมื่อรันด้วย Schedule Task ของ Windows)

4.Program.cs

Program.cs

using ConsoleApp1.mylib;

namespace ConsoleApp1
{
    class Program
    {

        static void Main(string[] args)
        {
            LogClass.writeApplicationName();

            FirstMethod();
        }

        static void FirstMethod()
        {
            LogClass.writeLogMethod(System.Reflection.MethodBase.GetCurrentMethod().Name);

            LogClass.writeLogDetail("do somethings.");

            LogClass.writeResponse("Finish methods.");
        }
    }
}

ตัวอย่างผลลัพธ์ไฟล์ log/2019-01-22.txt

[2019-01-22 22:38:06]  ==================================
[2019-01-22 22:38:06]  ConsoleApp1.exe
[2019-01-22 22:38:06]    FirstMethod
[2019-01-22 22:38:06]      do somethings.
[2019-01-22 22:38:06]  ------------------------
[2019-01-22 22:38:06]  Response : Finish methods.