오늘 소개할 내용은 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에 저장하는 방법에 대해 소개해봤는데요.
질문 사항있으시면 댓글에 달아주세요!!!
'프로그래밍' 카테고리의 다른 글
[c# Asp.net] Web Api 보안을 위한 HMAC 인증 (0) | 2021.06.22 |
---|---|
[C#] System.Net.WebException StatusCode, Response 처리 (0) | 2021.06.17 |
c# TripleDES(DESede) ECB PKCS7 암호화/복호화 코드 (0) | 2021.05.04 |
[C#] JSON을 Model 클래스로 변환해주는 사이트(Convert Json to C# Classes Online) (0) | 2021.04.14 |
c# Webclient.UploadString으로 PATCH, PUT, GET 호출 (0) | 2021.04.14 |
댓글