Skip to main content
Version: 3.2.0

Overview

The @abpjs/audit-logging package provides components and services for viewing and managing audit logs in ABP React applications. This is the React equivalent of Angular's @volo/abp.ng.audit-logging module.

npm version

ABP Commercial License Required

This package is free to use but requires the corresponding backend module from ABP Commercial. You can purchase an ABP Commercial license from abp.io.

Installation​

npm install @abpjs/audit-logging
# or
yarn add @abpjs/audit-logging

Required peer dependencies:

npm install @abpjs/core @abpjs/theme-shared @chakra-ui/react

Features​

  • Audit Logs Table - Paginated table with filtering and sorting
  • Log Details Modal - View detailed audit log information
  • Entity Changes - Track entity property changes
  • Action Tracking - View service method calls and parameters
  • Statistics - Average execution duration and error rate charts
  • Advanced Filtering - Filter by user, URL, HTTP method, status code, and more

Main Exports​

Components​

ComponentDescription
AuditLogsComponentComplete audit logs management UI

Hooks​

HookDescription
useAuditLogsHook for managing audit log state and operations

Services​

ServiceDescription
AuditLoggingServiceAPI service for audit log operations

Constants​

ConstantDescription
AUDIT_LOGGING_ROUTESPre-configured routes
HTTP_METHODSList of HTTP methods for filtering
HTTP_STATUS_CODESList of HTTP status codes with descriptions

Quick Example​

import { AuditLogsComponent } from '@abpjs/audit-logging';

function AuditLogsPage() {
return (
<AuditLogsComponent
onAuditLogSelected={(log) => console.log('Selected:', log)}
/>
);
}

Using the Hook​

import { useAuditLogs } from '@abpjs/audit-logging';
import { useEffect } from 'react';

function CustomAuditLogs() {
const {
auditLogs,
totalCount,
isLoading,
error,
fetchAuditLogs,
getAuditLogById,
fetchAverageExecutionStats,
fetchErrorRateStats,
} = useAuditLogs();

useEffect(() => {
fetchAuditLogs({
maxResultCount: 10,
skipCount: 0,
});
}, []);

if (isLoading) return <div>Loading...</div>;
if (error) return <div>Error: {error}</div>;

return (
<div>
<h2>Audit Logs ({totalCount})</h2>
<ul>
{auditLogs.map((log) => (
<li key={log.id}>
{log.userName} - {log.httpMethod} {log.url} ({log.httpStatusCode})
</li>
))}
</ul>
</div>
);
}

Hook Return Values​

PropertyTypeDescription
auditLogsAuditLogging.Log[]List of audit logs
totalCountnumberTotal count for pagination
selectedLogAuditLogging.Log | nullCurrently selected log
isLoadingbooleanLoading state
errorstring | nullError message
averageExecutionStatsStatistics.DataExecution duration statistics
errorRateStatsStatistics.DataError rate statistics
sortKeystringCurrent sort field
sortOrder'asc' | 'desc' | ''Sort direction
fetchAuditLogsfunctionFetch audit logs with params
getAuditLogByIdfunctionGet single log by ID
fetchAverageExecutionStatsfunctionFetch execution stats
fetchErrorRateStatsfunctionFetch error rate stats
setSelectedLogfunctionSet selected log
setSortKeyfunctionUpdate sort field
setSortOrderfunctionUpdate sort direction
resetfunctionReset all state

Service Methods​

The AuditLoggingService provides the following methods:

MethodParametersReturnsDescription
getAuditLogsparams?: AuditLogsQueryParamsPromise<Response>Get paginated audit logs
getAuditLogByIdid: stringPromise<Log>Get single audit log
getAverageExecutionDurationPerDayStatisticsparams?: FilterPromise<Statistics.Response>Get execution duration stats
getErrorRateStatisticsparams?: FilterPromise<Statistics.Response>Get error rate stats

Query Parameters​

Filter audit logs with these parameters:

interface AuditLogsQueryParams {
// Pagination
skipCount?: number;
maxResultCount?: number;
sorting?: string;

// Filters
url?: string;
userName?: string;
applicationName?: string;
correlationId?: string;
httpMethod?: string;
httpStatusCode?: number;
minExecutionDuration?: number;
maxExecutionDuration?: number;
hasException?: boolean;
startTime?: string;
endTime?: string;
}

Audit Log Structure​

Each audit log contains:

interface Log {
id: string;
userId: string;
userName: string;
tenantId: string;
impersonatorUserId: string;
impersonatorTenantId: string;
executionTime: string;
executionDuration: number;
clientIpAddress: string;
clientName: string;
browserInfo: string;
httpMethod: string;
url: string;
exceptions: string;
comments: string;
httpStatusCode: number;
applicationName: string;
correlationId: string;
extraProperties: Record<string, unknown>;
entityChanges: EntityChange[];
actions: AuditLogAction[];
}

Routes​

import { AUDIT_LOGGING_ROUTES } from '@abpjs/audit-logging';

// Route configuration:
// /audit-logs (requires 'AuditLogging.AuditLogs' policy)

HTTP Constants​

import { HTTP_METHODS, HTTP_STATUS_CODES } from '@abpjs/audit-logging';

// HTTP_METHODS: ['GET', 'POST', 'DELETE', 'PUT', 'HEAD', 'CONNECT', 'OPTIONS', 'TRACE', 'PATCH']

// HTTP_STATUS_CODES: [{ code: 200, message: 'OK' }, { code: 404, message: 'Not Found' }, ...]

TypeScript Support​

import type {
AuditLogging,
Statistics,
HttpStatusCode,
} from '@abpjs/audit-logging';

// AuditLogging namespace contains:
// - AuditLogging.State
// - AuditLogging.Response
// - AuditLogging.Log
// - AuditLogging.EntityChange
// - AuditLogging.PropertyChange
// - AuditLogging.AuditLogAction
// - AuditLogging.AuditLogsQueryParams

// Statistics namespace contains:
// - Statistics.Filter
// - Statistics.Data
// - Statistics.Response

Required Policies​

The audit logging module requires the following ABP policies:

PolicyDescription
AuditLogging.AuditLogsView audit logs

Dependencies​

  • @abpjs/core - Core ABP React functionality
  • @abpjs/theme-shared - Shared UI components
  • @chakra-ui/react - UI component library

See Also​