Release Notes
v3.2.0
February 2026
New Features
AuditLogsService (Proxy Service)
A new typed proxy service for audit logging API operations:
import { AuditLogsService } from '@abpjs/audit-logging';
import { useRestService } from '@abpjs/core';
function useAuditLogs() {
const restService = useRestService();
const auditLogsService = new AuditLogsService(restService);
// Get a single audit log by ID
const log = await auditLogsService.get('log-id');
// Get paginated list of audit logs
const logs = await auditLogsService.getList({
userName: 'admin',
httpMethod: 'POST',
hasException: false,
maxResultCount: 10,
skipCount: 0,
});
// Get a single entity change
const entityChange = await auditLogsService.getEntityChange('entity-change-id');
// Get entity change with username
const changeWithUser = await auditLogsService.getEntityChangeWithUsername('entity-change-id');
// Get paginated entity changes
const entityChanges = await auditLogsService.getEntityChanges({
entityTypeFullName: 'MyApp.Domain.Product',
changeType: EntityChangeType.Updated,
maxResultCount: 10,
});
// Get entity changes with username for a specific entity
const changesWithUser = await auditLogsService.getEntityChangesWithUsername({
entityId: 'entity-id',
entityTypeFullName: 'MyApp.Domain.Product',
});
}
Statistics Methods
New methods for retrieving audit log statistics:
import { AuditLogsService } from '@abpjs/audit-logging';
const auditLogsService = new AuditLogsService(restService);
// Get average execution duration per day
const avgDuration = await auditLogsService.getAverageExecutionDurationPerDay({
startDate: '2026-01-01',
endDate: '2026-01-31',
});
// Returns: { data: { '2026-01-01': 150, '2026-01-02': 200, ... } }
// Get error rate statistics
const errorRate = await auditLogsService.getErrorRate({
startDate: '2026-01-01',
endDate: '2026-01-31',
});
// Returns: { data: { '2026-01-01': 5, '2026-01-02': 3, ... } }
EntityChangeType Enum
New enum for entity change types in proxy DTOs:
import { EntityChangeType, entityChangeTypeOptions } from '@abpjs/audit-logging';
// Available values:
EntityChangeType.Created // 0
EntityChangeType.Updated // 1
EntityChangeType.Deleted // 2
// Use in select components
<select>
{entityChangeTypeOptions.map(opt => (
<option key={opt.value} value={opt.value}>{opt.label}</option>
))}
</select>
New Proxy Models
Typed DTOs for all audit logging operations:
import type {
// Audit Log DTOs
AuditLogDto,
AuditLogActionDto,
GetAuditLogListDto,
// Entity Change DTOs
EntityChangeDto,
EntityChangeWithUsernameDto,
EntityPropertyChangeDto,
GetEntityChangesDto,
EntityChangeFilter,
// Statistics DTOs
GetAverageExecutionDurationPerDayInput,
GetAverageExecutionDurationPerDayOutput,
GetErrorRateFilter,
GetErrorRateOutput,
} from '@abpjs/audit-logging';
Updated State Interface
The AuditLogging.State interface now uses the new proxy DTOs:
import type { AuditLogging, AuditLogDto } from '@abpjs/audit-logging';
import type { PagedResultDto } from '@abpjs/core';
interface State {
result: PagedResultDto<AuditLogDto>;
averageExecutionStatistics: Record<string, number>;
errorRateStatistics: Record<string, number>;
}
Deprecations
The following legacy types are deprecated and will be removed in v4.0:
| Deprecated | Replacement |
|---|---|
AuditLogging.Response | PagedResultDto<AuditLogDto> |
AuditLogging.Log | AuditLogDto |
AuditLogging.AuditLogsQueryParams | GetAuditLogListDto |
AuditLogging.EntityChange | EntityChangeDto |
AuditLogging.PropertyChange | EntityPropertyChangeDto |
Statistics.Data | Record<string, number> |
New Exports
Services:
AuditLogsService- Typed proxy service for audit logging API
Enums:
EntityChangeType- Entity change type enum (proxy version)entityChangeTypeOptions- Label/value options for select components
Audit Log Types:
AuditLogDto- Audit log data transfer objectAuditLogActionDto- Audit log action data transfer objectGetAuditLogListDto- Input for getting audit logs with filtering
Entity Change Types:
EntityChangeDto- Entity change data transfer objectEntityChangeWithUsernameDto- Entity change with usernameEntityPropertyChangeDto- Property change data transfer objectGetEntityChangesDto- Input for getting entity changesEntityChangeFilter- Filter for entity changes by ID and type
Statistics Types:
GetAverageExecutionDurationPerDayInput- Input for avg duration statsGetAverageExecutionDurationPerDayOutput- Output with date-to-duration mapGetErrorRateFilter- Input for error rate statsGetErrorRateOutput- Output with date-to-error-count map
v3.1.0
February 2026
- Version alignment with @abpjs/core
v3.0.0
February 2026
Breaking Changes
eAuditLoggingRouteNames.Administration removed
The Administration key has been removed from eAuditLoggingRouteNames. Use eThemeSharedRouteNames.Administration from @abpjs/theme-shared instead:
// Before (v2.7.0)
import { eAuditLoggingRouteNames } from '@abpjs/audit-logging';
const adminRoute = eAuditLoggingRouteNames.Administration;
// After (v3.0.0)
import { eThemeSharedRouteNames } from '@abpjs/theme-shared';
const adminRoute = eThemeSharedRouteNames.Administration;
New Features
Route Providers
New route provider system for initializing audit logging routes:
import { initializeAuditLoggingRoutes } from '@abpjs/audit-logging';
// Call once during app initialization
initializeAuditLoggingRoutes();
// This registers:
// - Audit Logging (under Administration)
// - /audit-logging
For advanced configuration with a custom RoutesService:
import { configureRoutes, AUDIT_LOGGING_ROUTE_PROVIDERS } from '@abpjs/audit-logging';
import { getRoutesService } from '@abpjs/core';
const routesService = getRoutesService();
const addRoutes = configureRoutes(routesService);
addRoutes();
Policy Names
New constants for audit logging permission policies:
import { eAuditLoggingPolicyNames } from '@abpjs/audit-logging';
// Available policies:
eAuditLoggingPolicyNames.AuditLogging // 'AuditLogging.AuditLogs'
// Use with permission checking
import { usePermission } from '@abpjs/core';
function AuditLoggingMenu() {
const canViewAuditLogs = usePermission(eAuditLoggingPolicyNames.AuditLogging);
if (!canViewAuditLogs) return null;
return <AuditLoggingLink />;
}
EntityChangeModalService
New service for displaying entity change details and history in modals:
import { EntityChangeModalService, EntityChangeService } from '@abpjs/audit-logging';
import { RestService } from '@abpjs/core';
const restService = new RestService();
const entityChangeService = new EntityChangeService(restService);
const modalService = new EntityChangeModalService(entityChangeService);
// Register callbacks for modal display
modalService.onShowDetails((data) => {
// Handle showing entity change details
console.log('Show details:', data);
});
modalService.onShowHistory((data) => {
// Handle showing entity change history
console.log('Show history:', data);
});
// Trigger modal display
await modalService.showDetails('entity-change-id');
await modalService.showHistory('entity-id', 'MyApp.Domain.Entities.Product');
Entity Details and History Providers
New providers for registering entity details and history display:
import {
ENTITY_DETAILS_PROVIDERS,
ENTITY_HISTORY_PROVIDERS,
SHOW_ENTITY_DETAILS,
SHOW_ENTITY_HISTORY,
} from '@abpjs/audit-logging';
// These tokens can be used to provide custom implementations
// for showing entity details and history
Extensions System
New extensibility system for customizing audit logging components:
import {
EntityAction,
EntityProp,
ToolbarAction,
DEFAULT_AUDIT_LOGGING_ENTITY_ACTIONS,
DEFAULT_AUDIT_LOGGING_TOOLBAR_ACTIONS,
DEFAULT_AUDIT_LOGGING_ENTITY_PROPS,
} from '@abpjs/audit-logging';
// Define custom entity action
const customAction: EntityAction<AuditLogging.Log> = {
text: 'Export',
action: ({ record }) => exportLog(record),
permission: 'AuditLogging.Export',
icon: 'bi bi-download',
};
// Define custom entity property
const customProp: EntityProp<AuditLogging.Log> = {
type: 'string',
name: 'customField',
displayName: 'Custom Field',
sortable: true,
valueResolver: ({ record }) => record.extraProperties?.customField,
};
// Define custom toolbar action
const customToolbarAction: ToolbarAction<AuditLogging.Log[]> = {
text: 'Export All',
action: ({ records }) => exportAll(records),
permission: 'AuditLogging.Export',
icon: 'bi bi-download',
};
Config Options
New configuration options for the audit logging module:
import {
AuditLoggingConfigOptions,
DEFAULT_AUDIT_LOGGING_CONFIG_OPTIONS,
} from '@abpjs/audit-logging';
const config: AuditLoggingConfigOptions = {
entityActionContributors: {
'AuditLogging.AuditLogsComponent': (actions) => [
...actions,
{ text: 'Custom', action: () => {} },
],
},
toolbarActionContributors: {
'AuditLogging.AuditLogsComponent': (actions) => [
...actions,
{ text: 'Export', action: () => {} },
],
},
entityPropContributors: {
'AuditLogging.AuditLogsComponent': (props) => [
...props,
{ type: 'string', name: 'custom', displayName: 'Custom' },
],
},
};
Extensions Guard
New guard for protecting routes with extensions:
import { AuditLoggingExtensionsGuard } from '@abpjs/audit-logging';
// Use in route configuration to ensure extensions are loaded
Config Subpackage
The @volo/abp.ng.audit-logging/config functionality is now merged into the main package:
// All config exports are available from the main package
import {
configureRoutes,
AUDIT_LOGGING_ROUTE_PROVIDERS,
initializeAuditLoggingRoutes,
eAuditLoggingRouteNames,
eAuditLoggingPolicyNames,
EntityChangeModalService,
ENTITY_DETAILS_PROVIDERS,
ENTITY_HISTORY_PROVIDERS,
} from '@abpjs/audit-logging';
New Exports
Route and Policy:
initializeAuditLoggingRoutes()- Initialize audit logging routesconfigureRoutes(routes)- Configure routes with custom RoutesServiceAUDIT_LOGGING_ROUTE_PROVIDERS- Route provider configuration objecteAuditLoggingPolicyNames- Constants for audit logging permission policiesAuditLoggingPolicyNameKey- Type for policy name values
Modal Service:
EntityChangeModalService- Service for entity change modalsEntityChangeDetailsCallback- Callback type for details displayEntityChangeHistoryCallback- Callback type for history display
Entity Providers:
ENTITY_DETAILS_PROVIDERS- Provider for entity details displayENTITY_HISTORY_PROVIDERS- Provider for entity history displaySHOW_ENTITY_DETAILS- Token for entity details displaySHOW_ENTITY_HISTORY- Token for entity history display
Extensions:
EntityAction<T>- Interface for entity actionsEntityProp<T>- Interface for entity propertiesToolbarAction<T>- Interface for toolbar actionsEntityActionContributorCallback<T>- Callback type for entity action contributorsEntityPropContributorCallback<T>- Callback type for entity prop contributorsToolbarActionContributorCallback<T>- Callback type for toolbar action contributorsDEFAULT_AUDIT_LOGGING_ENTITY_ACTIONS- Default entity actionsDEFAULT_AUDIT_LOGGING_TOOLBAR_ACTIONS- Default toolbar actionsDEFAULT_AUDIT_LOGGING_ENTITY_PROPS- Default entity propertiesAuditLoggingEntityActionContributors- Type for entity action contributorsAuditLoggingToolbarActionContributors- Type for toolbar action contributorsAuditLoggingEntityPropContributors- Type for entity prop contributors
Config:
AuditLoggingConfigOptions- Interface for module configurationDEFAULT_AUDIT_LOGGING_CONFIG_OPTIONS- Default configuration options
Guards:
AuditLoggingExtensionsGuard- Guard for extensions loading
v2.9.0
February 2026
- Version alignment with @abpjs/core
v2.7.0
February 2026
New Features
EntityChangeService
New service for managing entity changes:
import { EntityChangeService } from '@abpjs/audit-logging';
import { RestService } from '@abpjs/core';
const restService = new RestService();
const entityChangeService = new EntityChangeService(restService);
// Get paginated entity changes
const response = await entityChangeService.getEntityChanges({
startDate: '2026-01-01',
endDate: '2026-01-31',
maxResultCount: 10,
});
// Get entity change by ID
const change = await entityChangeService.getEntityChangeById('change-id');
// Get entity changes with username for a specific entity
const changesWithUser = await entityChangeService.getEntityChangesWithUserName(
'entity-id',
'MyApp.Domain.Entities.Product'
);
// Get single entity change with username
const changeWithUser = await entityChangeService.getEntityChangeWithUserNameById('change-id');
Entity Change Models
New namespace for entity change types:
import { EntityChange, eEntityChangeType } from '@abpjs/audit-logging';
// Query parameters
const params: EntityChange.EntityChangesQueryParams = {
entityChangeType: eEntityChangeType.Updated,
entityId: 'some-id',
startDate: '2026-01-01',
endDate: '2026-01-31',
};
// Entity change item
const change: EntityChange.Item = {
id: 'change-id',
auditLogId: 'audit-log-id',
changeType: eEntityChangeType.Created,
entityId: 'entity-id',
entityTypeFullName: 'MyApp.Domain.Entities.Product',
changeTime: '2026-01-15T10:30:00Z',
propertyChanges: [
{
propertyName: 'Name',
originalValue: 'Old Name',
newValue: 'New Name',
// ...
},
],
// ...
};
Entity Change Type Enum
New enum for entity change types:
import { eEntityChangeType } from '@abpjs/audit-logging';
// Available values:
// eEntityChangeType.Created = 0
// eEntityChangeType.Updated = 1
// eEntityChangeType.Deleted = 2
Route Names
New constants for audit logging route names (localization keys):
import { eAuditLoggingRouteNames } from '@abpjs/audit-logging';
// Available route names:
// eAuditLoggingRouteNames.AuditLogging = 'AbpAuditLogging::Menu:AuditLogging'
New Exports
EntityChangeService- Service for entity change operationsEntityChange- Namespace with entity change typesEntityChange.Item- Entity change item interfaceEntityChange.ItemWithUserName- Entity change with usernameEntityChange.PropertyChange- Property change interfaceEntityChange.EntityChangesQueryParams- Query parameters typeEntityChange.Response- Paginated response typeeEntityChangeType- Enum for entity change types (Created, Updated, Deleted)eAuditLoggingRouteNames- Constants for route namesAuditLoggingRouteNameKey- Type for route name values
v2.4.0
February 2026
New Features
-
AuditLoggingService.apiNameproperty - New property for REST API configuration. Defaults to'default'. -
eAuditLoggingComponentsenum - New enum for component identifiers, useful for component registration and customization:import { eAuditLoggingComponents } from '@abpjs/audit-logging';
// Available components:
// eAuditLoggingComponents.AuditLogs = 'AuditLogging.AuditLogsComponent'
v2.2.0
February 2026
- Version alignment with @abpjs/core
v2.1.1
February 2026
- Version alignment with @abpjs/core
v2.0.0
January 2026
New Features
AuditLoggingStateService- New state service for programmatic audit logging operations:dispatchGetAuditLogs(params?)- Fetch audit logs and update internal statedispatchGetAverageExecutionDurationPerDay(params?)- Fetch average execution duration statisticsdispatchGetErrorRate(params?)- Fetch error rate statisticsgetResult()- Get current audit logs resultgetTotalCount()- Get total count of audit logsgetAverageExecutionStatistics()- Get cached average execution statisticsgetErrorRateStatistics()- Get cached error rate statistics
Example
import { AuditLoggingStateService } from '@abpjs/audit-logging';
import { RestService } from '@abpjs/core';
const restService = new RestService();
const stateService = new AuditLoggingStateService(restService);
// Fetch audit logs
await stateService.dispatchGetAuditLogs({
startTime: '2026-01-01',
endTime: '2026-01-31',
maxResultCount: 10,
});
const logs = stateService.getResult();
console.log(`Found ${stateService.getTotalCount()} logs`);
// Fetch statistics
await stateService.dispatchGetAverageExecutionDurationPerDay({
startDate: '2026-01-01',
endDate: '2026-01-31',
});
const avgStats = stateService.getAverageExecutionStatistics();
await stateService.dispatchGetErrorRate({
startDate: '2026-01-01',
endDate: '2026-01-31',
});
const errorStats = stateService.getErrorRateStatistics();
v1.0.0
January 2026
- Version alignment with @abpjs/core v1.0.0
v0.7.2 (Initial Release)
January 2026
Features
- AuditLogsComponent - Complete audit logs management UI with:
- Paginated table with sorting
- Advanced filtering (user, URL, HTTP method, status code, execution duration, exceptions)
- Detail modal with tabbed view (Overall, Actions, Changes)
- Entity change tracking with property-level diffs
- Action tracking with service/method names and parameters
Hooks
- useAuditLogs - Hook for managing audit log state:
auditLogs- List of audit logstotalCount- Total count for paginationselectedLog- Currently selected logisLoading/error- Loading and error statesaverageExecutionStats/errorRateStats- Statistics datasortKey/sortOrder- Sorting statefetchAuditLogs()- Fetch with query parametersgetAuditLogById()- Get single logfetchAverageExecutionStats()/fetchErrorRateStats()- Statistics
Services
- AuditLoggingService with methods:
getAuditLogs()- Get paginated audit logsgetAuditLogById()- Get single audit log by IDgetAverageExecutionDurationPerDayStatistics()- Execution duration statsgetErrorRateStatistics()- Error rate statistics
Constants
- AUDIT_LOGGING_ROUTES - Pre-configured routes
- HTTP_METHODS - List of HTTP methods for filtering
- HTTP_STATUS_CODES - HTTP status codes with descriptions
Models
AuditLogging.Log- Audit log entryAuditLogging.EntityChange- Entity change recordAuditLogging.PropertyChange- Property change recordAuditLogging.AuditLogAction- Action recordAuditLogging.AuditLogsQueryParams- Query parametersStatistics.Filter/Statistics.Data/Statistics.Response- Statistics types
TypeScript
- Full TypeScript support with exported interfaces and namespaces