Skip to main content

adk_anthropic/
client_logger.rs

1//! Logging trait for Anthropic client operations.
2//!
3//! This module provides the [`ClientLogger`] trait that allows users to capture
4//! and log all API interactions passing through the [`Anthropic`] client.
5
6use crate::{Message, MessageStreamEvent};
7
8/// A trait for logging Anthropic client operations.
9///
10/// Implement this trait to capture and record all API interactions,
11/// including both non-streaming responses and individual streaming events.
12///
13/// # Example
14///
15/// ```rust,ignore
16/// use adk_anthropic::{ClientLogger, Message, MessageStreamEvent};
17/// use std::sync::Mutex;
18///
19/// struct FileLogger {
20///     file: Mutex<std::fs::File>,
21/// }
22///
23/// impl ClientLogger for FileLogger {
24///     fn log_response(&self, message: &Message) {
25///         let mut file = self.file.lock().unwrap();
26///         writeln!(file, "Response: {}", serde_json::to_string(message).unwrap()).unwrap();
27///     }
28///
29///     fn log_stream_event(&self, event: &MessageStreamEvent) {
30///         let mut file = self.file.lock().unwrap();
31///         writeln!(file, "Stream event: {}", serde_json::to_string(event).unwrap()).unwrap();
32///     }
33///
34///     fn log_stream_message(&self, message: &Message) {
35///         let mut file = self.file.lock().unwrap();
36///         writeln!(file, "Stream complete: {}", serde_json::to_string(message).unwrap()).unwrap();
37///     }
38/// }
39/// ```
40pub trait ClientLogger: Send + Sync {
41    /// Log a complete response from a non-streaming `send` call.
42    ///
43    /// This method is called once per successful `send` call with the full
44    /// [`Message`] response from the API.
45    fn log_response(&self, message: &Message);
46
47    /// Log an individual streaming event.
48    ///
49    /// This method is called for each [`MessageStreamEvent`] received during
50    /// a streaming request. Events include message starts, content deltas,
51    /// and message stops.
52    fn log_stream_event(&self, event: &MessageStreamEvent);
53
54    /// Log the reconstructed message from a completed stream.
55    ///
56    /// This method is called once when a stream completes successfully,
57    /// with the full [`Message`] that was reconstructed from all the
58    /// streaming events.
59    fn log_stream_message(&self, message: &Message);
60}