푸터 콘텐츠로 바로가기
.NET 도움말

NLog C# (개발자용 작동 방식)

로깅은 소프트웨어 개발의 필수적인 측면입니다. 이는 개발자가 애플리케이션의 동작을 추적하고 문제를 해결하며, 코드가 다양한 환경에서 어떻게 작동하는지에 대한 통찰을 얻는 데 도움을 줍니다. NLog는 C#에서 견고하고 유연한 로깅을 쉽게 구현할 수 있게 해주는 인기 있는 로깅 프레임워크입니다. 이 종합적인 가이드 및 튜토리얼에서는 C#에서 NLog의 세계를 탐구할 것입니다.

NLog는 무엇인가요?

NLog는 .NET 및 .NET Core 애플리케이션을 위한 무료 오픈 소스 로깅 라이브러리입니다. 이는 애플리케이션에서 메시지를 로그하는 유연하고 고도로 설정 가능한 방법을 제공합니다. NLog는 성능, 확장성, 사용의 용이성 덕분에 .NET 생태계에서 널리 사용되는 무료 로깅 플랫폼입니다.

NLog 시작하기

우리는 필요에 따라 ASP.NET 웹 애플리케이션, ASP.NET WEB API, Windows 폼 애플리케이션, ASP.NET MVC 애플리케이션 또는 어떤 종류의 애플리케이션에서 NLog를 사용할 수 있습니다. 우리는 모든 사용 사례를 보이기 위해 콘솔 애플리케이션을 사용할 것입니다.

NLog NuGet 패키지 설치

NLog를 시작하려면 프로젝트에 NLog NuGet 패키지를 설치해야 합니다. 이는 Visual Studio에서 NuGet 패키지 관리자 도구를 통해 다음 단계를 따라 할 수 있습니다:

  1. '도구' 메뉴에서 'NuGet 패키지 관리자'를 선택하고, '솔루션용 NuGet 패키지 관리'를 선택합니다.
  2. 또는 솔루션 탐색기에서 프로젝트를 마우스 오른쪽 버튼으로 클릭하고, 'NuGet 패키지 관리'를 선택하고 '찾아보기'를 선택합니다.
  3. NuGet 패키지 관리자 창에서 '찾아보기' 탭을 클릭하고, 검색 상자에 'NLog'를 입력합니다.
  4. 검색 결과에서 NLog 패키지를 볼 수 있어야 합니다. 클릭하여 선택합니다.
  5. NuGet 패키지 관리자 창의 오른쪽에 솔루션 내 프로젝트 목록이 있습니다. NLog를 설치할 프로젝트를 선택합니다.
  6. 버전 드롭다운에서 원하는 NLog 패키지 버전을 선택합니다. 필요에 따라 최신 안정 버전이나 특정 버전을 선택할 수 있습니다.
  7. 프로젝트와 버전을 선택한 후 '설치' 버튼을 클릭하여 설치 과정을 시작합니다.

NuGet 패키지 관리자는 NLog 및 모든 종속성을 다운로드하고 설치합니다. 출력 창에서 진행 상황을 볼 수 있습니다.

이제 프로젝트에 NLog가 성공적으로 설치되었으며, C# 코드 내에서 로깅에 사용할 수 있습니다.

NLog 설정 파일 만들기

NLog 설정 파일(일반적으로 nlog.config라는 이름으로)을 생성하려면 다음 단계를 따를 수 있습니다. 이 설정 파일은 애플리케이션에서 NLog가 어떻게 동작해야 하는지, 로그 대상, 레이아웃 렌더러 및 규칙을 포함하여 지정할 것입니다.

프로젝트에서 프로젝트 또는 설정 파일을 생성할 원하는 폴더를 마우스 오른쪽 버튼으로 클릭합니다.

  1. '추가' > '새 항목...'을 선택합니다.
  2. '새 항목 추가' 대화 상자에서 'XML 파일' 또는 'XML'을 검색하고 선택합니다.
  3. 파일 이름을 nlog.config로 지정하고 '추가' 버튼을 클릭합니다.

    Nlog Csharp Guide 1 related to NLog 설정 파일 만들기

  4. 새롭게 생성된 nlog.config 파일을 텍스트 편집기 또는 XML 편집기에서 엽니다.
  5. NLog.XML 파일에 다음 구성을 추가합니다. 아래에는 콘솔 대상으로 메시지를 로그하는 NLog 구성의 기본 예제가 있습니다. 이 구성 파일을 사용자 필요에 맞게 맞춤 설정할 수 있습니다:

구성 파일

<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <targets>

    <target name="console" xsi:type="Console" layout="${longdate}|${message}"/>
  </targets>

  <rules>

    <logger name="*" minlevel="Debug" writeTo="console" />
  </rules>

</nlog>
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

  <targets>

    <target name="console" xsi:type="Console" layout="${longdate}|${message}"/>
  </targets>

  <rules>

    <logger name="*" minlevel="Debug" writeTo="console" />
  </rules>

</nlog>
XML

C# 코드에서 nlog.config 파일에서 NLog 구성을 로드했는지 확인하세요. 일반적으로 ASP.NET Core의 Startup.cs(.NET 버전 5 이하의 경우), program.cs 파일(.NET 6 이상), 또는 콘솔 응용 프로그램의 Main 메서드에서 이를 수행합니다:

using NLog;

internal class Program
{
    // Create an instance of the Logger
    private static Logger logger = LogManager.GetCurrentClassLogger();

    static void Main(string[] args)
    {
        // Log a debug message
        logger.Debug("This is a Debug Message");

        // Pause the console for viewing output
        Console.Read();
    }
}
using NLog;

internal class Program
{
    // Create an instance of the Logger
    private static Logger logger = LogManager.GetCurrentClassLogger();

    static void Main(string[] args)
    {
        // Log a debug message
        logger.Debug("This is a Debug Message");

        // Pause the console for viewing output
        Console.Read();
    }
}
Imports NLog

Friend Class Program
	' Create an instance of the Logger
	Private Shared logger As Logger = LogManager.GetCurrentClassLogger()

	Shared Sub Main(ByVal args() As String)
		' Log a debug message
		logger.Debug("This is a Debug Message")

		' Pause the console for viewing output
		Console.Read()
	End Sub
End Class
$vbLabelText   $csharpLabel

위 프로그램의 출력은 다음과 같이 표시됩니다:

Nlog Csharp Guide 2 related to 구성 파일

이 예제에서는 Logger 클래스의 인스턴스를 생성하고 이를 사용하여 디버그 수준에서 메시지를 기록합니다. NLog에서 지원하는 추적 수준을 살펴보겠습니다.

로그 레벨

NLog는 각각 고유한 중요성을 가진 여러 로그 수준을 지원합니다:

  1. Trace: 가장 자세한 수준으로, 일반적으로 진단 목적으로 사용됩니다.
  2. Debug: 개발 중에 유용할 수 있는 디버그 정보에 사용됩니다.
  3. Info: 응용 프로그램 작동에 대한 일반 정보입니다.
  4. Warn: 응용 프로그램을 방해하지 않는 잠재적 문제를 나타냅니다.
  5. Error: 조사해야 하지만 반드시 앱을 충돌시키지는 않는 실패를 나타냅니다.
  6. Fatal: 즉시 조치해야 하는 치명적 실패를 나타냅니다.

로그 메시지를 이러한 수준으로 분류함으로써 중요도에 따라 필터링하고 우선순위를 정할 수 있습니다.

nLog.Config 파일의 rules 태그에 minlevel="Trace"을 아래와 같이 설정하십시오.

<rules>

  <logger name="*" minlevel="Trace" writeTo="console" />
</rules>
<rules>

  <logger name="*" minlevel="Trace" writeTo="console" />
</rules>
XML

모든 추적 수준의 메시지를 기록하는 코드를 작성합시다.

using NLog;

internal class Program
{
    // Create an instance of the Logger
    private static Logger logger = LogManager.GetCurrentClassLogger();

    static void Main(string[] args)
    {
        // Log messages of different tracking levels
        logger.Trace("This is a Trace Message");
        logger.Debug("This is a Debug Message");
        logger.Info("This is an Info Message");
        logger.Warn("This is a Warning Message");
        logger.Error("This is an Error Message");
        logger.Fatal("This is a Fatal Message");

        // Pause the console for viewing output
        Console.Read();
    }
}
using NLog;

internal class Program
{
    // Create an instance of the Logger
    private static Logger logger = LogManager.GetCurrentClassLogger();

    static void Main(string[] args)
    {
        // Log messages of different tracking levels
        logger.Trace("This is a Trace Message");
        logger.Debug("This is a Debug Message");
        logger.Info("This is an Info Message");
        logger.Warn("This is a Warning Message");
        logger.Error("This is an Error Message");
        logger.Fatal("This is a Fatal Message");

        // Pause the console for viewing output
        Console.Read();
    }
}
Imports NLog

Friend Class Program
	' Create an instance of the Logger
	Private Shared logger As Logger = LogManager.GetCurrentClassLogger()

	Shared Sub Main(ByVal args() As String)
		' Log messages of different tracking levels
		logger.Trace("This is a Trace Message")
		logger.Debug("This is a Debug Message")
		logger.Info("This is an Info Message")
		logger.Warn("This is a Warning Message")
		logger.Error("This is an Error Message")
		logger.Fatal("This is a Fatal Message")

		' Pause the console for viewing output
		Console.Read()
	End Sub
End Class
$vbLabelText   $csharpLabel

우리 프로그램은 아래와 같이 콘솔에 메시지를 기록했습니다.

nlog 로그 메시지

이제 콘솔에 메시지를 기록하는 예제를 시연했습니다. 이제 파일에 메시지를 기록하기 위해 NLog 대상을 구성할 것입니다.

파일에 로그 메시지

파일 로그를 위해 구성 파일에서 콘솔 대상 대신 파일 대상을 설정해야 합니다.

<targets>

  <target xsi:type="File" name="fileTarget" fileName="D:\Logs\mylog.txt" layout="${longdate} ${level:uppercase=true} ${message}" />
</targets>

<rules>

  <logger name="*" minlevel="Trace" writeTo="fileTarget" />
</rules>
<targets>

  <target xsi:type="File" name="fileTarget" fileName="D:\Logs\mylog.txt" layout="${longdate} ${level:uppercase=true} ${message}" />
</targets>

<rules>

  <logger name="*" minlevel="Trace" writeTo="fileTarget" />
</rules>
XML

이제 프로그램을 실행하여 파일에 메시지를 기록합니다.

Nlog Csharp Guide 4 related to 파일에 로그 메시지

로그 대상

NLog는 다양한 로그 출력 대상을 지원하며, 로그 메시지를 저장할 위치를 선택할 수 있게 해 줍니다. 일반적인 대상은 다음과 같습니다:

  1. 파일: 하나 이상의 파일에 메시지를 기록합니다.
  2. 콘솔: 콘솔에 메시지를 기록합니다.
  3. 데이터베이스: 데이터베이스(SQL Server, MySQL, Oracle, PostgreSQL 등) 테이블에 메시지를 기록합니다.
  4. 이메일: 이메일로 로그 메시지를 전송합니다.
  5. 이벤트 로그: Windows 이벤트 로그에 메시지를 기록합니다.
  6. 사용자 정의 대상: 특정 요구에 맞는 사용자 정의 로그 대상을 만들 수 있습니다.

NLog를 구성하여 하나 이상의 대상을 동시에 사용할 수 있습니다.

IronPDF 소개

IronPDF 자세히 탐색하기는 C#과 VB.NET 응용 프로그램에서 PDF 처리를 간소화하는 강력한 .NET 라이브러리입니다. PDF 문서를 생성, 편집 및 조작하는 강력한 기능을 제공하며, HTML 콘텐츠를 PDF 형식으로 변환하여 웹 개발, 보고 및 문서 관리 등을 포함한 다양한 산업의 개발자에게 필수 도구가 됩니다.

IronPDF의 뛰어난 기능은 레이아웃과 스타일을 보존하는 HTML to PDF 변환 기능입니다. 웹 콘텐츠로부터 PDF를 생성하여 보고서, 송장 및 문서화에 이상적입니다. HTML 파일, URL 및 HTML 문자열을 쉽게 PDF로 변환할 수 있습니다.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

로그가 포함된 PDF를 생성해 봅시다.

로그가 포함된 PDF 생성

첫 번째 단계는 프로젝트에 IronPDF 라이브러리를 설치하는 것입니다. 이는 Visual Studio의 NuGet 패키지 관리자나 NuGet CLI를 사용하여 수행할 수 있습니다. 프로젝트를 열고 패키지 관리자 콘솔에 다음 명령어를 씁니다.

Install-Package IronPdf

이 명령어는 프로젝트에 필요한 모든 종속성을 포함하여 IronPDF를 설치할 것입니다.

HTML에서 로그가 포함된 PDF 파일을 생성하는 코드를 작성합니다.

using NLog;
using IronPdf;

internal class Program
{
    // Create an instance of the Logger
    private static Logger logger = LogManager.GetCurrentClassLogger();

    static void Main(string[] args)
    {
        logger.Info("Initializing Chrome PDF Renderer");
        ChromePdfRenderer renderer = new ChromePdfRenderer();

        logger.Info("Creating PDF From HTML String");
        var pdf = renderer.RenderHtmlAsPdf("<h1>This is my Sample PDF<h1>");

        logger.Info("Saving PDF File");
        pdf.SaveAs(@"D:\myPDF.pdf");
    }
}
using NLog;
using IronPdf;

internal class Program
{
    // Create an instance of the Logger
    private static Logger logger = LogManager.GetCurrentClassLogger();

    static void Main(string[] args)
    {
        logger.Info("Initializing Chrome PDF Renderer");
        ChromePdfRenderer renderer = new ChromePdfRenderer();

        logger.Info("Creating PDF From HTML String");
        var pdf = renderer.RenderHtmlAsPdf("<h1>This is my Sample PDF<h1>");

        logger.Info("Saving PDF File");
        pdf.SaveAs(@"D:\myPDF.pdf");
    }
}
Imports NLog
Imports IronPdf

Friend Class Program
	' Create an instance of the Logger
	Private Shared logger As Logger = LogManager.GetCurrentClassLogger()

	Shared Sub Main(ByVal args() As String)
		logger.Info("Initializing Chrome PDF Renderer")
		Dim renderer As New ChromePdfRenderer()

		logger.Info("Creating PDF From HTML String")
		Dim pdf = renderer.RenderHtmlAsPdf("<h1>This is my Sample PDF<h1>")

		logger.Info("Saving PDF File")
		pdf.SaveAs("D:\myPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

위 코드는 아래와 같이 파일에 기록된 메시지와 함께 PDF 파일을 생성할 것입니다.

로그 및 PDF 파일

Nlog Csharp Guide 5 related to 로그 및 PDF 파일

결론

결론적으로, NLog는 C# 응용 프로그램에서 효과적인 로깅을 위한 필수 도구로 자리 잡았으며, 개발자에게 로그 데이터를 캡처, 분류 및 관리하기 위한 강력한 프레임워크를 제공합니다. 유연성과 사용 용이성으로 인해 다양한 분야의 로깅 요구 사항에 대한 고정적인 선택이 됩니다. 추가적으로, IronPDF와 같은 보조 라이브러리와 결합되면, 이는 .NET 애플리케이션에서 PDF 생성 및 조작을 간소화하여, 개발자들이 PDF 기반의 로그와 보고서를 생성하는 능력을 확장할 수 있습니다. IronPDF의 무료 체험판을 제공하여 기능을 테스트할 수 있습니다. 요구 사항을 충족한다면 IronPDF의 상용 라이선스를 선택할 수 있으며, 추가적인 이점과 지원을 통해 프로젝트에 원활하게 통합하여 PDF 관련 기능을 계속 사용할 수 있습니다.

NLog와 IronPDF의 힘을 함께 사용함으로써, 개발자는 애플리케이션 행동에 대한 인사이트를 얻을 수 있을 뿐만 아니라, 보고 및 문서 관리 프로세스를 개선하여 소프트웨어가 효율적이고, 유지 보수 가능하며, 잘 문서화된 구조적 로깅을 제공합니다.

자주 묻는 질문

NLog는 C# 애플리케이션에서 로깅을 어떻게 향상시킬 수 있습니까?

NLog는 C# 애플리케이션에 대해 강력하고 유연한 로깅 프레임워크를 제공합니다. 개발자는 구성 파일에서 로그 타겟과 규칙을 정의하여 로깅을 쉽게 구현할 수 있으며, Trace, Debug, Info, Warn, Error, Fatal과 같은 다양한 로깅 레벨을 지원합니다.

NLog를 .NET 애플리케이션에 설정하는 과정은 무엇입니까?

NLog를 .NET 애플리케이션에 설정하려면 NLog NuGet 패키지를 설치하고 nlog.config 파일에서 로깅 타겟과 규칙을 구성해야 합니다. 이 설정을 통해 파일, 콘솔, 데이터베이스, 이메일 등 로그가 지향되어야 하는 위치를 지정할 수 있습니다.

NLog를 사용하여 데이터베이스에 메시지를 로깅할 수 있습니까?

NLog를 사용하여 데이터베이스에 메시지를 로깅하려면 nlog.config 파일에 데이터베이스 타겟을 설정해야 합니다. 로그 항목에 대한 연결 문자열과 필요한 테이블 또는 저장 프로시저 세부 사항을 지정합니다.

NLog를 사용하여 이메일을 통해 로그 메시지를 보낼 수 있습니까?

예, NLog는 nlog.config 파일에 이메일 타겟을 구성하여 이메일을 통해 로그 메시지를 보낼 수 있습니다. SMTP 서버 세부 정보, 수신자 이메일 주소 및 기타 이메일 설정을 제공해야 합니다.

IronPDF를 .NET에서 PDF 생성에 사용하는 이점은 무엇인가요?

IronPDF는 PDF 생성, 편집 및 변환을 단순화하는 강력한 .NET 라이브러리입니다. HTML을 PDF로 변환하는 기능을 지원하여 개발자가 HTML 문자열, 파일 또는 URL에서 PDF를 생성할 수 있도록 하여 보고 및 문서 관리 프로세스를 향상시킵니다.

C# 애플리케이션에서 PDF 생성과 로깅을 어떻게 통합할 수 있습니까?

C# 애플리케이션에서 NLog를 사용하여 애플리케이션 이벤트를 로깅하고 IronPDF를 사용하여 PDF를 생성함으로써 NLog와 IronPDF를 통합할 수 있습니다. 이 조합을 통해 로그 정보를 포함한 상세한 PDF 보고서를 생성할 수 있습니다.

NLog 구성 문제의 일반적인 문제 해결 단계는 무엇입니까?

NLog 구성 문제에 대한 일반적인 문제 해결 단계에는 nlog.config 파일의 구문 오류 확인, 로그 타겟에 대한 올바른 파일 경로 및 권한 보장, 로깅에 영향을 미칠 수 있는 애플리케이션의 예외 확인이 포함됩니다.

IronPDF의 기능을 구매 전에 어떻게 테스트할 수 있습니까?

IronPDF는 무료 체험판을 제공하여 개발자가 기능을 테스트할 수 있도록 합니다. 이 체험 기간에는 상업적 라이선스를 선택하기 전에 PDF 생성, 편집 및 변환에 대한 IronPDF의 기능을 평가할 기회를 제공합니다.

제이콥 멜러, 팀 아이언 최고기술책임자
최고기술책임자

제이콥 멜러는 Iron Software의 최고 기술 책임자(CTO)이자 C# PDF 기술을 개척한 선구적인 엔지니어입니다. Iron Software의 핵심 코드베이스를 최초로 개발한 그는 창립 초기부터 회사의 제품 아키텍처를 설계해 왔으며, CEO인 캐머런 리밍턴과 함께 회사를 NASA, 테슬라, 그리고 전 세계 정부 기관에 서비스를 제공하는 50명 이상의 직원을 보유한 기업으로 성장시켰습니다.

제이콥은 맨체스터 대학교에서 토목공학 학사 학위(BEng)를 최우등으로 취득했습니다(1998~2001). 1999년 런던에서 첫 소프트웨어 회사를 설립하고 2005년 첫 .NET 컴포넌트를 개발한 후, 마이크로소프트 생태계 전반에 걸쳐 복잡한 문제를 해결하는 데 전문성을 발휘해 왔습니다.

그의 대표 제품인 IronPDF 및 Iron Suite .NET 라이브러리는 전 세계적으로 3천만 건 이상의 NuGet 설치 수를 기록했으며, 그의 핵심 코드는 전 세계 개발자들이 사용하는 다양한 도구에 지속적으로 활용되고 있습니다. 25년의 실무 경험과 41년의 코딩 전문성을 바탕으로, 제이콥은 차세대 기술 리더들을 양성하는 동시에 기업 수준의 C#, Java, Python PDF 기술 혁신을 주도하는 데 주력하고 있습니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해