Dokümantasyon
Ne yakalanır, ne süreçten hiç çıkmaz.
Yakalama sizin SaveChanges çağrınızın içinde çalışır; bu yüzden ne yapabileceğine dair kurallar buradaki her şeyden katıdır.
Maskeleme
Maskeler, hiçbir şey tamponlanmadan önce sizin sürecinizde çalışır. Alan bazında öznitelikle ya da aynı alan birçok varlıkta geçiyorsa model genelinde ada göre tanımlayabilirsiniz.
// Per property
[AuditMask(MaskStrategy.PreserveLast, 4)] // ************4242
[AuditMask(MaskStrategy.Hash)] // sha256:9f2b1c74a0e8…
[AuditMask(MaskStrategy.Email)] // e***@contoso.com
[AuditMask(MaskStrategy.Length)] // ***(16)
[AuditMask] // ***
// Model-wide, by property name
options.MaskProperty("NationalId", MaskStrategy.Hash);
options.IgnoreProperty("PasswordHash");
Yapay zekâ ajanını kaydetme
Değişikliği bir kişi değil bir model yaptığında kayıt bunu söylemelidir. Ajanı kapsama verin; kaydın ürettiği her değişiklik onu taşısın — bir ajana özellik değil görev verilir ve tek bir koşu altı kaydı birden değiştirebilir.
using (AuditScope.Push(new AuditContext
{
Actor = new AuditActor(user.Id, "user", user.FullName),
Agent = new AuditAgent(
"claude-opus-5",
ModelVersion: "2026-05-01",
Tool: "issue_refund",
Decision: AuditAgent.Approved,
OnBehalfOf: user.Id),
Payload = AuditPayload.Create(prompt, answer),
}))
{
// Every change in here is attributed to the agent.
await db.SaveChangesAsync(ct);
}
| autonomous | Ajan kendi başına hareket etti. |
| suggested | Ajan önerdi; değişikliği başka bir şey gerçekleştirdi. |
| approved | Bir kişi, değişiklik olmadan önce onayladı. |
İstem ve yanıt, değişiklik kümesinin dışında, kendi sütunlarında ve bir özellik değerine tanınandan çok daha geniş bir sınırla saklanır. Madde 12 girdi verisini ve sonucu ister; yarım bir istem, sisteme ne sorulduğu hakkında hiçbir şey kanıtlamaz. Özet her zaman, hiçbir şey kısaltılmadan önce her iki tarafın tamamı üzerinden alınır — böylece kısaltılmış bir kayıt, başka yerde tutulan tam bir kopyayla eşleştirilebilir.
Ayar referansı
| Option | Default | |
|---|---|---|
| CaptureMode | OptOut | OptOut, [AuditIgnore] ile işaretlenmemiş her şeyi denetler. OptIn yalnızca [AuditInclude] ile işaretlenenleri denetler. |
| MaskHashSecret | — | Özet stratejisinin anahtarı. Tüm sunucularda birebir aynı olmalıdır. |
| IncludeShadowProperties | true | EF gölge alanlarını (örneğin yabancı anahtarlar) kaydeder. Değişen bir MusteriId genellikle kayda değerdir. |
| CaptureFullSnapshotOnCreate | true | Yeni bir kaydın ilk hâlinin tamamını kaydeder. |
| MaxValueLength | 4096 | Daha uzun metin değerleri işaretle birlikte kırpılır. |
| BufferCapacity | 10000 | İstemci yük atmaya başlamadan önce tutulan olay sayısı. |
| MaxBatchSize | 500 | İstek başına olay sayısı. |
| FlushInterval | 2sn | Yarım dolu bir paketin gönderilmeden önce beklediği süre. |
Diğer diller
Node.js, Python ve Go istemcileri .NET SDK'sıyla aynı belgeyi gönderir. ORM kancası yerine elle yakalarlar ve her biri yalnızca gerçekten değişen alanları kaydeden bir diff yardımcısı içerir.
// Node.js — npm install @reldavi/client
import { ReldaviClient, mask, diff } from '@reldavi/client';
const audit = new ReldaviClient({
endpoint: 'https://ingest.reldavi.com',
apiKey: process.env.RELDAVI_API_KEY,
});
audit.capture({
action: 'updated',
resourceType: 'shop.order',
resourceId: order.id,
actor: { id: user.id, displayName: user.name, ip: req.ip },
changes: mask.applyMasks(diff(before, after), {
cardNumber: mask.preserveLast(4),
}),
});
await audit.close(); // on shutdown
Sırada ne okunur
Şema, SDK kaynakları ve mimari notların tamamı açıktır. Bir şey belirsizse, bu bizim dokümantasyonumuzdaki bir hatadır. Bize yazın.