mirror of https://github.com/abpframework/abp
parent
8c6bd22c7f
commit
27e2461581
@ -1,3 +1,63 @@
|
||||
# Audit Logging
|
||||
|
||||
TODO
|
||||
[Wikipedia](https://en.wikipedia.org/wiki/Audit_trail): "*An audit trail (also called **audit log**) is a security-relevant chronological record, set of records, and/or destination and source of records that provide documentary evidence of the sequence of activities that have affected at any time a specific operation, procedure, or event*".
|
||||
|
||||
ABP Framework automates the audit logging by convention and provides configuration points to control the level of the audit logs.
|
||||
|
||||
## IAuditingStore
|
||||
|
||||
`IAuditingStore` is an interface that is used to save the audit log objects (explained below) by the ABP Framework.
|
||||
|
||||
`SimpleLogAuditingStore` is used if no audit store was registered. It simply writes the audit object to the standard [logging system](Logging.md).
|
||||
|
||||
However, [the audit logging module](Modules/Audit-Logging.md) has been configured in [the startup templates](Startup-Templates/Index.md) which writes audit log objects to a database (it supports multiple database providers). So, most of the times you don't care about how `IAuditingStore` was implemented and used.
|
||||
|
||||
If you need to save the audit log objects to a custom data store, you can implement the `IAuditingStore` in your own application and replace using the [dependency injection system](Dependency-Injection.md).
|
||||
|
||||
## Audit Log Object
|
||||
|
||||
An **audit log object** is created for each **web request** is by default. An audit log object can be represented by the following relation diagram:
|
||||
|
||||

|
||||
|
||||
* **AuditLogInfo**: The root object with the following properties:
|
||||
* `ApplicationName`: When you save audit logs of different applications to the same database, this property is used to distinguish the logs of the applications.
|
||||
* `UserId`: Id of the current user, if the user has logged in.
|
||||
* `UserName`: User name of the current user, if the user has logged in (this value is here to not depend on the identity module/system for lookup).
|
||||
* `TenantId`: Id of the current tenant, for a multi-tenant application.
|
||||
* `TenantName`: Name of the current tenant, for a multi-tenant application.
|
||||
* `ExecutionTime`: The time when this audit log object has been created.
|
||||
* `ExecutionDuration`: Total execution duration of the request, in milliseconds. This can be used to observe the performance of the application.
|
||||
* `ClientId`: Id of the current client, if the client has been authenticated. A client is generally a 3rd-party application using the system over an HTTP API.
|
||||
* `ClientName`: Name of the current client, if available.
|
||||
* `ClientIpAddress`: IP address of the client/user device.
|
||||
* `CorrelationId`: Current [Correlation Id]((CorrelationId.md)). Correlation Id is used to relate the audit logs written by different applications (or microservices) in a single logical operation.
|
||||
* `BrowserInfo`: Browser name/version info of the current user, if available.
|
||||
* `HttpMethod`: HTTP method of the current request (GET, POST, PUT, DELETE... etc.).
|
||||
* `HttpStatusCode`: HTTP response status code for this request.
|
||||
* `Url`: URL of the request.
|
||||
* **AuditLogActionInfo**: An audit log action is typically a controller action or an [application service](Application-Services.md) method call during the web request. One audit log may contain multiple actions. An action object has the following properties:
|
||||
* `ServiceName`: Name of the executed controller/service.
|
||||
* `MethodName`: Name of the executed method of the controller/service.
|
||||
* `Parameters`: A JSON formatted text representing the parameters passed to the method.
|
||||
* `ExecutionTime`: The time when this method was executed.
|
||||
* `ExecutionDuration`: Duration of the method execution, in milliseconds. This can be used to observe the performance of the method.
|
||||
* **EntityChangeInfo**: Represents a change of an entity in this web request. An audit log may contain zero or more entity changes. An entity change has the following properties:
|
||||
* `ChangeTime`: The time when the entity was changed.
|
||||
* `ChangeType`: An enum with the following fields: `Created` (0), `Updated` (1) and `Deleted` (2).
|
||||
* `EntityId`: Id of the entity that was changed.
|
||||
* `EntityTenantId`: Id of the tenant this entity belongs to.
|
||||
* `EntityTypeFullName`: Type (class) name of the entity with full namespace (like *Acme.BookStore.Book* for the Book entity).
|
||||
* **EntityPropertyChangeInfo**: Represents a change of a property of an entity. An entity change info (explained above) may contain one or more property change with the following properties:
|
||||
* `NewValue`: New value of the property. It is `null` if the entity was deleted.
|
||||
* `OriginalValue`: Old/original value before the change. It is `null` if the entity was newly created.
|
||||
* `PropertyName`: The name of the property on the entity class.
|
||||
* `PropertyTypeFullName`: Type (class) name of the property with full namespace.
|
||||
* **Exception**: An audit log object may contain zero or more exception. In this way, you can get a report of the failed requests.
|
||||
* **Comment**: An arbitrary string value to add custom messages to the audit log entry. An audit log object may contain zero or more comments.
|
||||
|
||||
In addition to the standard properties explained above, `AuditLogInfo`, `AuditLogActionInfo` and `EntityChangeInfo` objects implement the `IHasExtraProperties` interface, so you can add custom properties to these objects.
|
||||
|
||||
## Audit Logging Module
|
||||
|
||||
...
|
||||
@ -0,0 +1,3 @@
|
||||
# Audit Logging Module
|
||||
|
||||
TODO
|
||||
|
After Width: | Height: | Size: 28 KiB |
Loading…
Reference in new issue