본문 바로가기
프로그래밍

[c#] NLog 데이터베이스(DB)에 저장 하는 방법

by 도장깨기 2021. 6. 16.
728x90
반응형

오늘 소개할 내용은 Nlog 관련 내용인데요.

NLog로 저장할 로그 내용을 데이터베이스에 저장하는 방법이에요.

 

먼저, 저 같은 경우 데이터베이스는 MSSQL을 이용해 관리 중인데요.

NLog DB 저장을 위해 StoredProcedure을 하나 생성해 줄게요~

 

USE TEST
 
CREATE TABLE [dbo].[Logs] (
    ID int Identity(1,1) not null,
    [Level] varchar(255) not null,
    CallSite varchar(255) not null,
    [Type] varchar(255) not null,
    [Message] varchar(255) not null,
    StackTrace varchar(max) not null,
    InnerException varchar(max) not null,
    AdditionalInfo varchar(max) not null,
    LoggedOnDate datetime not null,
    CONSTRAINT [PK_Logs] PRIMARY KEY CLUSTERED
    (
        ID ASC
    )
) ON [PRIMARY]
 
ALTER TABLE Logs ADD CONSTRAINT [DF_Logs_TimeStamp] DEFAULT (getdate()) FOR [LoggedOnDate]
GO
 
CREATE PROCEDURE InsertLog
(
    @level varchar(20),
    @callsite varchar(MAX),
    @type varchar(MAX),
    @message varchar(MAX),
    @stackTrace varchar(MAX),
    @innerException varchar(MAX),
    @additionalInfo varchar(MAX)
)
AS 
    INSERT INTO Logs
    (
        [Level],
        CallSite,
        [Type],
        [Message],
        StackTrace,
        InnerException,
        AdditionalInfo
    )
    VALUES
    (
        @level,
        @callsite,
        @type,
        @message,
        @stackTrace,
        @innerException,
        @additionalInfo
    )
GO

 

로그 내용을 저장할 Logs라는 테이블을 하나 생성해주고,

InsertLog라는 이름의 StoredProcedure을 생성해 호출시 로그내용을 Logs 테이블에 저장하도록 설정합니다.

 

이제 테이블과 저장 프로시저를 모두 생성하셨다면

NLog.Config만 설정해 주시면되는데요.

 

		<target xsi:type="Database"
				name="database"
				connectionStringName="DefaultConnection"
				commandText ="exec InsertLog @level,@callsite,@type,@message,@stackTrace,@innerException,@additionalInfo">
			<parameter name="@level" layout="${level}" />
			<parameter name="@callsite" layout="${callsite}" />
			<parameter name="@type" layout="${exception:format=type}" />
			<parameter name="@message" layout="${exception:format=message}" />
			<parameter name="@stackTrace" layout="${exception:format=stackTrace}" />
			<parameter name="@innerException" layout="${exception:method:maxInnerExceptionLevel-5:innerFormat=shortType,message,method}" />
			<parameter name="@additionalInfo" layout="${message}" />
		</target>

NLog.config에 target으로 위와 같이 넣어주시면되는데

commandText 같은 경우에는 StoredProcedure을 실행하는 sql 쿼리문을 넣어주시면 되고 

connectionStringName의 경우 저같은 경우 웹기반이기 때문에 Web.config에 저장된 DB 연결문자열 이름을 넣어줬어요.

 

<rules>
	<logger name="databaseLogger" minlevel="Trace" writeTo="database" />
</rules>

그다음 <rules> </rules> 사이에 

이렇게 databaseLogger라는 이름의 규칙을 하나 생성해 줬어요 .

writeTo의 경우 위에서 생성한 target의 이름을 넣어주시면되요.

 

그 다음 로그 저장할 위치로 가서 

저 같은 경우 c#프로그래밍 기준으로 볼때 

 

Logger _dbLogger = NLog.LogManager.GetLogger("databaseLogger");

_dbLogger.Info("필요한 로그 내용");

 

이런형태로 해서 넣어주면

 

 

DB에 위와 같이 생성대고 AdditionalInfo에 로그내용이 저장되는걸 확인할 수 있어요!

 

 

이렇게 오늘은 NLog내용을 Database에 저장하는 방법에 대해 소개해봤는데요.

 

질문 사항있으시면 댓글에 달아주세요!!!

728x90
반응형

댓글