블로그 이미지
따시쿵

calendar

1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

Notice

2015. 2. 21. 07:43 C#

log4net 을 이용한 로그파일 쓰는 예제입니다. 라이브러리 다운로드와 자세한 설명은 다음의 사이트를 이용하시면 됩니다. http://logging.apache.org/log4net/index.html


파일 이름이 날짜로 되어서 구분하는 예제를 만들었습니다.


app.config App.config


<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>
  
<!--log4net 설정하는 부분 시작-->    
  <log4net>    
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
      <file value="logs\" />
      <datePattern value="yyyy-MM-dd'.log'" />
      <staticLogFileName value="false" />
      <appendToFile value="true" />
      <rollingStyle value="Date" />
      <maxSizeRollBackups value="10" />
      <maximumFileSize value="50MB" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
  
    
    <root>
      <!--LogLevel: OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
      <level value="ALL" />
      <appender-ref ref="LogFileAppender" />
    </root>
  </log4net>
<!--log4net 설정하는 부분 종료--> 
  

    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>


사용예제


            new Thread(delegate()
                {
                    for (int i = 0; i <= 100; i++)
                    {
                        Logger.WriteLog(LogLevel4N.INFO, i.ToString());
                    }
                }).Start();

            new Thread(delegate()
            {
                for (int i = 0; i <= 100; i++)
                {
                    Logger.WriteLog(LogLevel4N.DEBUG, i.ToString());
                }
            }).Start();

            new Thread(delegate()
            {
                for (int i = 0; i <= 100; i++)
                {
                    Logger.WriteLog(LogLevel4N.ERROR, i.ToString());
                }
            }).Start();

            new Thread(delegate()
            {
                for (int i = 0; i <= 100; i++)
                {
                    Logger.WriteLog(LogLevel4N.WARN, i.ToString());
                }
            }).Start();      


posted by 따시쿵
2015. 2. 21. 07:21 C#

Trace class를 이용해서 파일에 로그 파일을 쓰는 경우가 있습니다. 이런 경우에도 설정 파일(app.config)을 이용해서 파일에 쓰는 경우를 보여 줍니다.


Trace.WriteLine 을 이용한 경우입니다.

System.IO.StreamWriter class 와 로그 파일에 lock mode 를 걸지 않는 경우입니다.


app.config


  <!--Trace.WriteLine 을 설정하는 부분 시작 -->
  <system.diagnostics>
    <trace autoflush="true" indentsize="4">
      <listeners>
        <add name="myListener" type="System.Diagnostics.TextWriterTraceListener" initializedata="TextWriterOutput.log" />
        <remove name="Default" />
      </remove>
    </trace>
  </system.diagnostics>
 <!--Trace.WriteLine 을 설정하는 부분 종료 -->


LoggerSystem.cs


    #region LoggerSystem class
    public static class LoggerSystem
    {
        public static void Error(string message, string module)
        {
            WriteEntry(message, "error", module);
        }

        public static void Error(Exception ex, string module)
        {
            WriteEntry(ex.Message, "error", module);
        }

        public static void Warning(string message, string module)
        {
            WriteEntry(message, "warning", module);
        }

        public static void Info(string message, string module)
        {
            WriteEntry(message, "info", module);
        }

        private static void WriteEntry(string message, string type, string module)
        {
            Trace.WriteLine(
                    string.Format("[{0}],{1},{2},{3}",
                                  DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                                  type,
                                  module,
                                  message));
        }
    }
    #endregion


사용예제


            new Thread(delegate()
                {
                    for (int i = 0; i <= 1000; i++)
                    {
                        LoggerSystem.Error("button1_Click = " + i.ToString(), "myapp");
                    }
                }).Start();

            new Thread(delegate()
            {
                for (int i = 0; i <= 1000; i++)
                {
                    LoggerSystem.Info("button2_Click = " + i.ToString(), "myapp");
                }
            }).Start();  


'C#' 카테고리의 다른 글

BackgroundWorker class  (0) 2015.03.02
텍스트 로그 파일 라이브러리 - 3  (0) 2015.02.21
멀티플(multiple) 윈도우 - 1  (0) 2015.01.24
멀티스레드 환경에서 UI 에 데이타 표시할 경우  (0) 2015.01.15
Task 클래스  (0) 2015.01.10
posted by 따시쿵
2015. 2. 12. 15:57 C# with UDP/IP

udp multicast 는 sender가 receiver 에게 데이타를 단방향 통신으로 전달하는 기술 기법입니다.


multicast 구현시 고려할 사항


▷ IP multicast 에서 사용할 아이피를 적당하게 잘 선택해야 합니다. 

   선택한 아이피로 멀티캐스트그룹을 만들어야 하므로 다른 시스템에서 사용하지 않는 아이피를 사용

   합니다.

   

   사용할 아이피는 IANA 정보에 따라서 239.0.0.0 와 239.255.255.255 사이의 아이피를 선택합니다.

   MComms TV 에도 정보가 나와 있으니 참조하면 됩니다.


▷ 시스템에서 사용하지 않는 포트를 선택합니다.

   Windows Vista, 7, 2008 는 포트 번호 49152 와 65535, 예전 윈도즈는 1025 와 5000 그리고 Linux

   는 32768 와 61000 번호를 선택합니다.

   

   자세한 정보는 여기에 나와 있습니다. MComms TV 



프로그램 설명


sender 가 특정 아이피로 멀티캐스트그룹을 만들고, 그룹에 참가하는 receiver 에게 루프를 돌면서 메시지를 전송한 것입니다.



실행 후


메시지 전송 후


프로그램 작성 순서


1. 공통 라이브러리


using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.IO;


2. Sender 프로그램


        static void Main(string[] args)
        {
            UdpClient udpclient = new UdpClient();

            IPAddress multicastaddress = IPAddress.Parse("239.0.0.222");
            udpclient.JoinMulticastGroup(multicastaddress);
            IPEndPoint remoteEP = new IPEndPoint(multicastaddress, 2222);

            byte[] buffer = null;

            Console.WriteLine("Press ENTER to start sending message");
            Console.ReadLine();

            for (int i = 0; i <= 8000; i++)
            {
                buffer = Encoding.Unicode.GetBytes(i.ToString());
                udpclient.Send(buffer, buffer.Length, remoteEP);
                Console.WriteLine("Sent : {0}", i.ToString());
            }

            buffer = Encoding.Unicode.GetBytes("quit");
            udpclient.Send(buffer, buffer.Length, remoteEP);

            udpclient.Close();

            Console.WriteLine("All Done! Press ENTER to quit.");
            Console.ReadLine();
        }


3. Receiver 프로그램


        static void Main(string[] args)
        {
            UdpClient client = new UdpClient();

            client.ExclusiveAddressUse = false;
            IPEndPoint localEp = new IPEndPoint(IPAddress.Any, 2222);

            client.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
            client.ExclusiveAddressUse = false;

            client.Client.Bind(localEp);

            IPAddress multicastaddress = IPAddress.Parse("239.0.0.222");
            client.JoinMulticastGroup(multicastaddress);

            Console.WriteLine("Listening this will quit");

            while(true)
            {
                byte[] data = client.Receive(ref localEp);
                string strData = Encoding.Unicode.GetString(data);
                Console.WriteLine("received data : {0}", strData);

                if (strData == "quit")
                    break;
            }

            Console.WriteLine("quit the program to ENTER");
            Console.ReadLine();
        }
posted by 따시쿵