# 감사 로그 - Audit Logging

Audit Logging

#### 설명

Axs는 애플리케이션 내의 모든 상호 작용을 자동으로 기록하는 기능을 제공합니다.

기본적으로 저장된 필드는 다음과 같습니다. 관련 **테넌트 ID**, 호출자 **사용자 ID**, 호출 된 **서비스 이름** (호출 된 메서드의 클래스), 호출 된 **메서드 이름**, 실행 **매개 변수** (JSON으로 직렬화 됨), **실행 시간**, **실행 기간** (밀리 초), 클라이언트의 **IP 주소**, 클라이언트의 **컴퓨터 이름** 및 **예외**.

이 정보를 통해 우리는 누가 작업을 수행했는지 알 수 있을 뿐만 아니라 애플리케이션의 **성능**을 측정하고 발생한 **예외**를 확인 할 수도 있습니다. 또한 응용 프로그램 사용에 대한 **통계**를 얻을 수 있습니다.

감사 시스템은 [**IAxsSession**](https://github.com/axuslab/docs.axs/blob/main/Developments/Session/README.md)을 사용하여 현재 UserId 및 TenantId를 가져옵니다.

애플리케이션 컨트롤러, MVC 컨트롤러, 웹 API 및 ASP.NET Core 메서드는 기본적으로 자동으로 감사됩니다.

![오딧 로그](https://973433021-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F35tSm8dhwtRBSQhjeoCu%2Fuploads%2Fgit-blob-7599656cde749216255ed09ed02ba14af7c337d9%2Fauditlogs.png?alt=media)

**IAuditingStore**

감사 시스템은 **IAuditingStore**를 사용하여 감사 정보를 저장합니다. 기본적으로 SimpleLogAuditingStore가 사용되고 감사 정보를 로그([log](https://github.com/axuslab/docs.axs/blob/main/Developments/Logging/README.md))에 저장합니다.

#### 환경구성

감사를 구성하려면 모듈([module](https://github.com/axuslab/docs.axs/blob/main/Developments/Module_System/README.md))의 PreInitialize 메서드에서 **Configuration.Auditing** 속성을 사용할 수 있습니다.

```csharp
public class MyModule : AxsModule
{
    public override void PreInitialize()
    {
        // 감사로그 사용여부
        Configuration.Auditing.IsEnabled = AppConsts.AuditingEnabled;
    }

    //...
}
```

감사 구성 속성은 다음과 같습니다 :

* **IsEnabled**: 감사 시스템을 완전히 활성화/비 활성화하는데 사용됩니다. 기본값 : **true**.
* **IsEnabledForAnonymousUsers**: true로 설정하면 시스템에 로그인하지 않은 사용자에 대한 감사 로그가 저장됩니다. 기본값 : **false**.
* **Selectors**: 감사 로그를 저장할 다른 클래스를 선택하는 데 사용됩니다.
* **SaveReturnValues**: 반환 값 저장을 활성화/비 활성화하는 데 사용됩니다. 기본값 : **false**.
* **IgnoredTypes**: 정의 된 유형을 무시하는 데 사용됩니다.

**Selectors**는 감사 로그를 저장하는 다른 유형의 클래스를 선택하기 위한 기능 입니다.

```csharp
Configuration.Auditing.Selectors.Add(
    new NamedTypeSelector(
        "Axs.AppControllers",
        type => typeof (IAppController).IsAssignableFrom(type)
    )
);
```

모듈의 PreInitialize 메서드에 선택기를 추가 할 수 있습니다. 애플리케이션 컨트롤러에 대한 감사 로그를 저장하지 않으려면 위의 선택기를 이름으로 제거 할 수도 있습니다. 이것이 고유 한 이름을 갖는 이유입니다 (간단한 LINQ를 사용하여 선택기에서 선택기를 찾고 원하는 경우 제거).

#### 어트리뷰트를 이용한 활성/비 활성화

구성별로 감사 **클래스**를 선택할 수 있지만 단일 클래스 또는 개별 메서드에 대해 **Audited** 및 **DisableAuditing** 특성을 사용할 수 있습니다.

```csharp
[Audited]
public class MyClass
{
    public void MyMethod1(int a)
    {
        //...
    }

    // 오딧로그 사용하지 않도록 설정
    [DisableAuditing]
    public void MyMethod2(string b)
    {
        //...
    }

    public void MyMethod3(int a, int b)
    {
        //...
    }
}
```

MyClass의 모든 메서드는 명시 적으로 비활성화되어 있으므로 MyMethod2를 제외한 모든 메서드가 감사됩니다. Audited 속성은 원하는 방법에 대한 감사를 저장하는 데 사용할 수 있습니다.

**DisableAuditing**은 DTO의 단일 속성에도 사용할 수 있습니다. 따라서 예를 들어 암호와 같은 감사 로그에서 **민감한 데이터를 숨길 수 있습니다**.

#### 확인

**스웨거를 호출하여 감사로그가 발생이 되도록 호출한다.**

스웨거에서 **/api/services/app/Sample/CreateSampleAudited** 주소를 호출합니다. ![스웨거 이미지](https://973433021-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F35tSm8dhwtRBSQhjeoCu%2Fuploads%2Fgit-blob-8934224c198954da399075bf023c5cd010683e6e%2F49af96fe934dd05722f098313e6a56964a233b69507051d5d90160d8437c7ab2.png?alt=media)

아래와 같이 데이터 베이스의 AuditLogs 테이블에서 아래와 같이 호출된 주소에 대한 정보를 확인 할 수 있습니다.

![스웨거 이미지](https://973433021-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F35tSm8dhwtRBSQhjeoCu%2Fuploads%2Fgit-blob-2de029043ba01836e54519ee816d9f5e514b0f13%2F93d5ff1b7cd6f34707814645c104f9234e5c57bf2dfc1cebc82c4a6a665157ee.png?alt=media)
