들어는 보셨을 Log4Net 을 소개해 드립니다.


Web 에서 간단하게 Log 를 쌓을 때 사용하던 녀석입니다.


이번 프로젝트는 WinForm 인데 Log 기능을 넣어달라고 하여 이 녀석을 추가해주려고 합니다.


일단은 파일로만 생성해 주렵니다.

공식웹사이트는 http://logging.apache.org/log4net 이며


GitHub Site 는 https://github.com/apache/logging-log4net/ 입니다.



Project 를 여시고요.

NuGet Manager Console 에서 


Install-Package log4net


이렇게 입력하시면 설치가 간단히 끝납니다.


그 다음은 app.config 또는 Web.config 파일에 Log4Net 을 사용하겠다고 알려주고요.


Log 에 대한 설정 사항을 입력해 주면 됩니다.


별도의 Log4Net.config 파일에 정의해 주어도 되겠습니다.


Log4Net.config 에서 설정을 관리하겠다면 첨부되어 있는 Logger.cs 파일의 initialize() 함수에서 처럼 로그를 관리하는 class 에 아래 구문을 추가해주시고요.


XmlConfigurator.ConfigureAndWatch(new FileInfo(logFilePath));


app.config 나 web.config 을 사용하시겠다면 

assemblyinfo.cs 이나 program.cs 파일에 아래 구문을 입력해 주셔요. ^^


[assembly: log4net.Config.XmlConfigurator(Watch = true)]



다음 설정은 App.Config 에 적어준 사항을 블로그에 맞게 약간 수정해서 기록합니다.


다른 사항들도 빼곡하게 적어 놓았는데 그 사항들을 여러분들이 사용하실때 주석을 풀어 사용하시면 되리라 생각하고 일단은 파일에 Log 를 쌓는 부분만 사용할 수 있게 주석을 풀어 놓았습니다.



<?xml version="1.0" encoding="utf-8"?>

<configuration>

  <startup> 

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

  </startup>

  <runtime>

    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

      <probing privatePath="DLL" />

    </assemblyBinding>

  </runtime>


  <configSections>

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>

  </configSections>


  <log4net>


    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">


      <file type="log4net.Util.PatternString" value="Logs/%date{yyyy-MM-dd}_log4net.log"/>

      <datePattern value="yyyy-MM-dd"/>

      <appendToFile value="true" />

      <rollingStyle value="Date" />

      <staticLogFileName value="true" />

      <maxSizeRollBackups value="60" />

      <maximumFileSize value="15MB"/>

      <layout type="log4net.Layout.PatternLayout">

        <conversionPattern value="%d [%t] %-5p %c - %m%n" />

      </layout>


    </appender>

    

    <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">

      <bufferSize value="1" />

      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

      <connectionString value="Data Source=DataSourceName;Initial Catalog=DatabaseName;integrated security=True" />

      <commandText value="INSERT INTO SADT_Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />

      <parameter>

        <parameterName value="@log_date" />

        <dbType value="DateTime" />

        <layout type="log4net.Layout.RawTimeStampLayout" />

      </parameter>

      <parameter>

        <parameterName value="@thread" />

        <dbType value="String" />

        <size value="255" />

        <layout type="log4net.Layout.PatternLayout">

          <conversionPattern value="%thread" />

        </layout>

      </parameter>

      <parameter>

        <parameterName value="@log_level" />

        <dbType value="String" />

        <size value="50" />

        <layout type="log4net.Layout.PatternLayout">

          <conversionPattern value="%level" />

        </layout>

      </parameter>

      <parameter>

        <parameterName value="@logger" />

        <dbType value="String" />

        <size value="255" />

        <layout type="log4net.Layout.PatternLayout">

          <conversionPattern value="%logger" />

        </layout>

      </parameter>

      <parameter>

        <parameterName value="@message" />

        <dbType value="String" />

        <size value="4000" />

        <layout type="log4net.Layout.PatternLayout">

          <conversionPattern value="%message" />

        </layout>

      </parameter>

      <parameter>

        <parameterName value="@exception" />

        <dbType value="String" />

        <size value="2000" />

        <layout type="log4net.Layout.ExceptionLayout" />

      </parameter>

    </appender>

    

    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">

      <layout type="log4net.Layout.PatternLayout">

        <conversionPattern value="%d [%t] %-5p %c - %m%n" />

      </layout>

    </appender>

    <appender name="OutputDebugStringAppender" type="log4net.Appender.OutputDebugStringAppender">

      <layout type="log4net.Layout.PatternLayout">

        <conversionPattern value="%-5p %m - %c -%n" />

      </layout>

    </appender>

    <appender name="TraceAppender" type="log4net.Appender.TraceAppender">

      <layout type="log4net.Layout.PatternLayout">

        <conversionPattern value="%d [%t] %-5p %c - %m%n" />

      </layout>

    </appender>

    <appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender">

      <layout type="log4net.Layout.PatternLayout">

        <conversionPattern value="%d [%t] %-5p %c - %m%n" />

      </layout>

    </appender>


    <root>

      <level value="DEBUG" />


      <appender-ref ref="RollingFileAppender" />


      <!--

      <appender-ref ref="AdoNetAppender" />

      <appender-ref ref="ConsoleAppender" />

      <appender-ref ref="OutputDebugStringAppender" />

      <appender-ref ref="TraceAppender" />

      <appender-ref ref="AspNetTraceAppender" />

      -->

    </root>


  </log4net>

  

</configuration>




내용은 설명을 달아 놓아야 할까 싶을 정도로 간단합니다.

제가 굵게 표시한 글자들만 보셔도 아하~~ 하실거라 생각합니다.


설명을 안할까 생각중인데... 헤헤헤 

에헤~~ 한번 찬찬히 봐 보셔요. ^^

설명 필요없을거예요. 






행복한 고수되셔요. ^^


woojja ))*

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\




반응형

'Tools' 카테고리의 다른 글

[Tools] Shared Project in VisualStudio  (0) 2018.10.18
[Tools] GUID Maker Updated.  (0) 2017.10.31
[Tools] DotNetZip  (0) 2017.10.10
[Tools] 3 Ways to Change Bitrate on MP3 Files  (0) 2017.09.08
[Tools] NShape  (0) 2017.06.28


File Header 정보를 확인해 볼 수 있는 페이지 입니다.


참고삼아 올려봅니다.



http://www.garykessler.net/library/file_sigs.html



행복한 고수되셔요 ^^


woojja ))*

\\\\\\\\\\\\\\\\\\\\\\\

반응형

.NET Framework 에서 사용할 Zip library 로 DotNetZip 을 사용했습니다.


사용도 편하여 사용 code snippet ? 을 적어봅니다.


공식 Source Page 는 사용이 정지된 Codeplex 의 https://dotnetzip.codeplex.com/ 입니다.

해당 페이지에 사용법도 간단하게? 설명해 놓았습니다.


NuGet Package Manager 에서도 DotNetZip 이라는 Keyword 로 찾으시면 되겠습니다.

제가 사용한 Version 은 1.10.1 입니다.



참조 추가는 해주시고요.


using Ionic.Zip; 으로 사용을 시작하겠습니다.


using Ionic.Zip;


. . . 


string strFileName = string.Format("NewZip_{0}.zip", DateTime.Now.ToString("yyyyMMddHHmm"));

bool isOk = false;


saveFileDialog.CreatePrompt = false;

saveFileDialog.CheckFileExists = false;

saveFileDialog.CheckPathExists = true;

saveFileDialog.Filter = FileFilterZip;

saveFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);

saveFileDialog.FileName = strFileName;


if (saveFileDialog.ShowDialog() == DialogResult.OK)

{

    strFileName = saveFileDialog.FileName;


    . . .


    using (ZipFile zip = new ZipFile { CompressionLevel = CompressionLevel.BestCompression })

    {

        . . . 

        strPath = Path.Combine(strFileFolderPath, "FileName.ext");


        if (File.Exists(strPath))

{

    // Zip 파일내에 FolderName 이라는 Folder 를 만들어 그 폴더 내에 저장합니다.

            zip.AddFile(fi.FullName, "FolderName"); 


            // Zip 파일의 Root 에 저장됩니다.

            // zip.AddFile(strPath, ""); 


            // 이렇게 하시면 System 의 Folder 구조대로 Zip 파일에 포함됩니다. 

            // 경로의 앞부분은 잘립니다.

    // 어느 Depth 에서 잘리는지 확인하지 못했네요. 직접 확인해보시길... ^^;

            // zip.AddFile(strPath); 

}


        if (Directory.Exists(strFolderPath))

{

    // Directory 를 Zip 파일에 포함하고자 할 때 사용하는 구문이겠죠?

            zip.AddDirectory(strFolderPath, strFolderName);


    // 이렇게 하시면 System 의 Folder 구조대로 Zip 파일에 포함됩니다. 

    // 이 경우도 마찬가지로 경로의 앞부분은 잘립니다. ^^;

            // zip.AddDirectory(strFolderPath); 

        }


string strRootPath = dirRoot.FullName;

        foreach (var d in dirRoot.GetDirectories())

        {

            // 이렇게도 사용할 수 있습니다.

    // 이렇게하면 Zip 파일내에 New_Folder 라는

    // Directory 를 생성하고 그 아래에 d Directory를 포함시킵니다.

    zip.AddDirectory(d.FullName, "New_Folder" 

+ d.FullName.Replace(strRootPath, string.Empty));

        } 

        . . .


        zip.Save(strFileName);

        isOk = true;

    }


    if (isOk)

    {

        DialogResult result = MessageBox.Show("Completed Export Work.\n\t Do you want to open result file's location?", "Network Designer", MessageBoxButtons.OKCancel);

        //압축에 성공했으니 압축결과물을 봐야겠죠? ^^


        if (result == DialogResult.OK)

        {

            if (File.Exists(strFileName))

            {

                Process.Start(new ProcessStartInfo("explorer.exe", " /select, " + strFileName));

            }

        }

    }

}


사이트에 설명이 되어 있는 내용도 있고 제가 요리조리 잔머리 굴리며 작성한 내용입니다.

Folder 이름이나 파일명을 바꾸느라 코드에 오류가 있을 수도 있습니다. ^^;

오류가 있더라도 큰 줄기만 잘 살펴보시고...

도움이 되었으면 합니다.



행복한 고수되셔요.


woojja ))*

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

반응형

'Tools' 카테고리의 다른 글

[Tools] GUID Maker Updated.  (0) 2017.10.31
[Tools] Log4Net  (0) 2017.10.12
[Tools] 3 Ways to Change Bitrate on MP3 Files  (0) 2017.09.08
[Tools] NShape  (0) 2017.06.28
[Tools] GUID Maker  (0) 2017.06.21

+ Recent posts