log4net 사용 관련 참고 사이트 : http://hind.pe.kr/1199

log4net 설정 관련 참고 사이트 : http://egloos.zum.com/empty79/v/2956254


C#에서 logging을 할때 손쉽고 편하게 사용할 수 있는 라이브러리를 소개하려한다.

Log4Net이라는 라이브러리 이다.

이 라이브러리는 log4j라는 java라이브러리에서 따온것이라고 알고있다.


log4net에 대한 자세한 내용은 홈페이지를 참조 바랍니다.

https://logging.apache.org/log4net/


1. 사용 방법

 - Nuget으로 Log4Net을 검색하면 아파치 log4net이 제일 상위에 나타난다


 "설치"버튼을 클릭하면 사용준비 끝.


2. 설정 파일

 - 사실 설정 파일에 대해 정확하게 알지 못한다. 일단 구글링을 통해 알아본 기본적인 틀을 확인해보자.

   응용 프로그램의 경우 app.config 파일에 설정 내용을 입력 하지만 나는 asp.net에서 로깅을 하려하기 때문에

   별도의 LogConfig.xml 파일을 생성하였다. (web.config에 하면 되려나)

<log4net>
  <appender name="RollingFile" type="log4net.Appender.RollingFileAppender">
    <file value="C:\Log\"/>
    <appendtofile value="true"/>
    <datepattern value="yyyy-MM-dd'_Log.log'"/>
    <staticlogfilename value="false"/>
    <rollingstyle value="Date"/>
    <layout type="log4net.Layout.PatternLayout">
      <conversionpattern value="%d [%t] %-5p - %m%n"/>
    </layout>
  </appender>
  <root>
    <level value="ALL"/>
    <appender-ref ref="RollingFile"/>
  </root>
</log4net>

<appender> 태그는 로그를 어떤식으로 남길 것인지에 대한 큰 틀이라고 보면된다.

appender 태그 안에서 파일을 어느곳에 만들것인지 파일이름을 어떻게 할것인지 로그 패턴을 어떻게 할것인지를 정할 수 있다.

<root> 태그는 기본 logger 설정을 하며, level 태그는 ALL, Warn, 등등 으로 나뉘며 해당 레벨 이상의 로그만 로그파일에 쓰길 원할경우 설정한다.

appender-ref 태그에는 appender의 name을 입력하여 연결을 해준다.


3. 소스

//using 해준다.
using log4net;
using log4net.Config;

//로깅할 곳에 로그 변수 추가
private ILog _logger = null;
public readonly ILog Logger
{
  get { return _Logger; }
}

string strDirPath;
strDirPath = @"C:\Log";
DirectoryInfo dirInfo = new DirectoryInfo(strDirPath);
//log4net에서 폴더를 만들어주는지 안만들어주는지 몰라서.. 일단 혹시나해서 만듦

if (dirInfo.Exists == false) { if (dirInfo != null) dirInfo.Create(); } //LogConfig.xml 경로를 설정해준다. string AppPath = AppDomain.CurrentDomain.BaseDirectory; //log4net.config 하위의 xmlconfigurator에 설정 파일을 등록한다. XmlConfigurator.Configure(new System.IO.FileInfo(AppPath + @"bin\LogConfig.xml")); //설정파일의 appender의 name에 아까 입력한 RollingFile을 입력하여 logger를 추가한다. _logger = log4net.LogManager.GetLogger("RollingFile"); // ----------- 이렇게 해서 기본적인 변수 선언과 사용준비는 끝. // 사용 //error if(_logger.IsErrorEnabled) _logger.Error("Error!!!!!!!!!!!"); if(_logger.IsDebugEnabled) _logger.Debug("Debug!!!!!!!!!!!"); if(_logger.IsInfoEnabled) _logger.Info("Info!!!!!!!!!!!");

로그를 남길때 수준을 정할 수 있다.

Error, Fatal, Warn, Info, Debug


이렇게 해서 로그 파일을 확인해 보면 아래와 같이 로그가 남는 것을 확인 할 수 있다.



*log4net을 사용하다 보면 남겨야 하는 로그의 성격이 다른 것들이 있다. 이럴경우 로그파일을 나눠서 로그를 남기고 싶을 경우가 있다.

이럴 경우에는 설정파일을 살짝 바꿔서 사용하면된다.


아래와 같이 appender를 추가하고 logger를 추가해주면 끝. 알기쉽게 이름을 잘 지어주면 끝.

눈치가 빠른 사람들은 소스에서 어떻게 사용하는지도 대충은 파악했을 것이다.


<log4net> <appender name="Common" type="log4net.Appender.RollingFileAppender"> <file value="C:\Log\" /> <appendToFile value="true" /> <datePattern value="yyyy-MM-dd'_Common.log'" /> <staticLogFileName value="false" /> <rollingStyle value="Date" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d [%t] %-5p - %m%n" /> </layout> </appender> <appender name="Socket" type="log4net.Appender.RollingFileAppender"> <file value="C:\Log\" /> <appendToFile value="true" /> <datePattern value="yyyy-MM-dd'_Socket.log'" /> <staticLogFileName value="false" /> <rollingStyle value="Date" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d [%t] %-5p - %m%n" /> </layout> </appender> <appender name="Database" type="log4net.Appender.RollingFileAppender"> <file value="C:\Log\" /> <appendToFile value="true" /> <datePattern value="yyyy-MM-dd'_Database.log'" /> <staticLogFileName value="false" /> <rollingStyle value="Date" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d [%t] %-5p - %m%n" /> </layout> </appender> <root> <level value="ALL" /> </root> <logger name="Common"> <level value="ALL" /> <appender-ref ref="Common" /> </logger> <logger name="Socket"> <level value="ALL" /> <appender-ref ref="Socket" /> </logger> <logger name="Database"> <level value="ALL" /> <appender-ref ref="Database" /> </logger> </log4net>

여러 파일에 로그 남기기 소스는 첨부파일을 열어보자

LogManager.cs



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

[C#] 네이버 자동 로그인 / 카페 글쓰기 API  (9) 2019.11.01
[C#]ini file 사용법 & 소스 공유  (3) 2017.01.03
[C#]Log4Net 사용법  (2) 2017.01.03
[C#]Snappy 사용법  (5) 2016.12.30
[C#]DataTable Sorting 간단 사용법  (0) 2016.12.30
  1. 2017.01.03 16:21

    비밀댓글입니다

noVNC란 브라우져에서 PC를 원격으로 제어하는 브라우저 VNC라고 생각하면 된다.

작동원리는.. 정확하진 않지만 아마 이런 그림일 것이다.



noVNC 서버는 Python, Nodejs 등 여러 언어를 지원하며 MPL-2.0 라이센스이다.

자세한 내용은 아래 noVNC 사이트에서 확인 가능하다.

noVNC 클라이언트 출처 : https://kanaka.github.io/noVNC/

noVNC 서버 "Websockify" 출처 : https://github.com/novnc/websockify


*사용 방법

nodejs를 이용한 noVNC 사용법을 소개하려한다.


1. websockify.js를 node.js로 실행 (node.js 실행 방법은 인터넷을 찾아보자)


github Websockify(noVNC Server) 프로젝트에 들어가서 소스를 다운받아 압축 해제

"other -> js -> websockify.js"라는 파일이 있다.


node.js를 처음 설치 후 websockify.js를 실행하면 여러가지 모듈이 설치가 안되 실행이 되지 않을 수 있다.

다음과 같은 모듈들을 설치 후 다시 시도해 보자

"optimist", "policyfile", "ws" 모듈을 설치 후 다시 시도하면 다음과 같은 모습을 볼 수 있다.

모듈 설치 방법은 npm을 이용해 설치하면된다. ex) "npm install optimist"

"node websockify.js 6080 서버PC의 IP:5900"를 입력하면 다음과 같이 서버가 실행되는 모습을 볼 수 있다.

여기서 6080은 Browser와 websockify서버가 통신을 할때 사용할 port를 의미 하고,

서버PC의 IP는 websockify서버가 실행될 pc의 IP를 의미한다.

5900은 websockify서버와 vnc서버(real, ultra 등등)가 통신을 할때 사용하는 port를 의미한다.


2. vnc.html 실행

github noVNC(noVNC Client) 프로젝트에 들어가서 소스를 다운받아 압축 해제

"noVNC-master -> vnc.html"라는 파일이 있다.

vnc.html을 더블클릭하여 브라우저에 띄우게 되면 다음과 같은 화면이 나타난다.

톱니바퀴 모양의 Setting과 자물쇠? 쇠사슬? 모양의 Connection을 설정 후 noVNC를 접속해보자.


톱니바퀴 모양

 Path를 localhost:5900으로 설정한다.

 Host를 localhost로 Port를 6080으로 설정 후 Connect버튼을 클릭하면!

여기서 localhost는 websockify 서버pc의 ip를 의미합니다.

.

.

.

.

.

.

.

.

짜란! 끗!

'Programming > 기타' 카테고리의 다른 글

HMAC SHA-256 암호화 (C#, Javascript, Nodejs)  (2) 2018.08.28
[C#]텔레그램 봇 만들기  (2) 2017.01.05
noVNC  (0) 2017.01.02

압축 알고리즘 선택 기준 : http://bspfp.pe.kr/192 참조


Snappy 개요 : http://www.mimul.com/pebble/default/2012/04/10/1334044735206.html 참조


Snappy 사용법


1. Nuget에서 Snappy를 검색하여 Snappy for .NET을 설치한다.

2. using Snappy;


 
//압축된 내용
byte[] byteCompressed = null;
//압축 해제 된 내용
byte[] byteDeCompressed = null;

Stream stream = null;

ulong ulJsonLength = 0;

byteCompressed = File.ReadAllBytes("FilePath");

byteDeCompressed = SnappyCodec.Uncompress(byteCompressed);

stream = new MemoryStream(byteDeCompressed);

// stream에 담아 지지고볶고 사용 하면 된다.
// ** 해당 내용은 압축 해제를 다룬 내용.
// ** 압축은 위의 소스를 조금만 수정하여 사용하면 될듯 하다.


* Snappy 함수들


함수가 많지 않다. 압축과 압축 해제는 Compress, Uncompress 함수를 사용하면 된다. 단순히 byte[] 만 넣어주면 알아서 압축과 해제를 해주니 사용하기는 간단하다.

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

[C#] 네이버 자동 로그인 / 카페 글쓰기 API  (9) 2019.11.01
[C#]ini file 사용법 & 소스 공유  (3) 2017.01.03
[C#]Log4Net 사용법  (2) 2017.01.03
[C#]Snappy 사용법  (5) 2016.12.30
[C#]DataTable Sorting 간단 사용법  (0) 2016.12.30
  1. 2018.01.12 16:50

    비밀댓글입니다

  2. 보초섭 2018.01.12 16:52

    안녕하세요?
    블로그에 올리신 Google Snappy로 데이터 압축하기를 보고
    C#으로 코드를 작성해 보았는데
    너무 간단한 것 같아 맞는지 해깔려 이렇게 댓글 답니다.
    혹시 고칠 점이 있는지 봐주시면 감사하겠습니다.


    using Snappy;

    public class Snappy_ex : MonoSingleTon<Snappy_ex>
    {
    //Google Snappy 패킷 압축, 해제
    public byte[] DataCompressed = null;
    public byte[] DataUnCompressed = null;
    MemoryStream stream = null;

    //패킷 압축
    public void Compression(byte[] data)
    {
    DataCompressed = SnappyCodec.Compress(data);
    }

    //패킷 압축 해제
    public void UnCompressed(byte[] data)
    {
    data = DataCompressed;
    DataUnCompressed = SnappyCodec.Uncompress(data);
    stream = new MemoryStream(DataUnCompressed);
    }
    }

  3. 라이브러리가 생각보다 간단해서 저도 당황햇엇던 기억이 나네요. 딱히 고칠 점이 잇는지는 모르겟습니다. 워낙 간단해서 그대로 쓰셔도 무방할 것 같습니다. 다만 compression 함수에 memorystream을 안쓴건 일부러 그러신거겟져

    • 보초섭 2018.01.12 21:29

      아 그럼 이런식으로 해야하는 건가요?

      //패킷 압축
      public void Compression(byte[] data)
      {
      DataCompressed = SnappyCodec.Compress(data);

      stream = new MemoryStream(DataCompressed);

      }

  4. 보통은 메모리스트림이나 파일스트림에 넣어서 사용하죠 물론 목적에 따라 달라지겟지만요

+ Recent posts