class_docstr: Logging/Custom Handlers for proxy.
  
  Implemented mainly to:
  - log successful/failed db read/writes
  - support the max parallel request integration
class_docstr_tok: ["Logging\/Custom","Handlers","for","proxy",".","Implemented","mainly","to",":","-","log","successful\/failed","db","read\/writes","-","support","the","max","parallel","request","integration"]
code: def _init_litellm_callbacks(self):
      print_verbose(f"INITIALIZING LITELLM CALLBACKS!")
      litellm.callbacks.append(self.max_parallel_request_limiter)
      litellm.callbacks.append(self.max_budget_limiter)
      for callback in litellm.callbacks:
          if callback not in litellm.input_callback:
              litellm.input_callback.append(callback)
          if callback not in litellm.success_callback:
              litellm.success_callback.append(callback)
          if callback not in litellm.failure_callback:
              litellm.failure_callback.append(callback)
          if callback not in litellm._async_success_callback:
              litellm._async_success_callback.append(callback)
          if callback not in litellm._async_failure_callback:
              litellm._async_failure_callback.append(callback)
  
      if (
          len(litellm.input_callback) > 0
          or len(litellm.success_callback) > 0
          or len(litellm.failure_callback) > 0
      ):
          callback_list = list(
              set(
                  litellm.input_callback
                  + litellm.success_callback
                  + litellm.failure_callback
              )
          )
          litellm.utils.set_callbacks(callback_list=callback_list)
  
imports: from typing import Optional, List, Any, Literal, Union
  import os, subprocess, hashlib, importlib, asyncio, copy, json, aiohttp, httpx
  import litellm, backoff
  from litellm.proxy._types import UserAPIKeyAuth, DynamoDBArgs
  from litellm.caching import DualCache
  from litellm.proxy.hooks.parallel_request_limiter import MaxParallelRequestsHandler
  from litellm.proxy.hooks.max_budget_limiter import MaxBudgetLimiter
  from litellm.integrations.custom_logger import CustomLogger
  from litellm.proxy.db.base_client import CustomDB
  from fastapi import HTTPException, status
  import smtplib
  from email.mime.text import MIMEText
  from email.mime.multipart import MIMEMultipart
label_desc: Use image node_id 3 for calling the ProxyLogging obj's underlying member method code with example usage: obj._init_litellm_callbacks() without return types