# FileLogger

## ``autogen.logger.FileLogger [#](https://docs.ag2.ai/0.9.2/docs/api-reference/autogen/logger/FileLogger/#autogen.logger.FileLogger "Permanent link")

```
FileLogger(config)
```

Bases: `BaseLogger`

Source code in `autogen/logger/file_logger.py`

|     |     |
| --- | --- |
| ```<br>54<br>55<br>56<br>57<br>58<br>59<br>60<br>61<br>62<br>63<br>64<br>65<br>66<br>67<br>68<br>69<br>70<br>71<br>72<br>``` | ```<br>def __init__(self, config: dict[str, Any]):<br>    self.config = config<br>    self.session_id = str(uuid.uuid4())<br>    curr_dir = os.getcwd()<br>    self.log_dir = os.path.join(curr_dir, "autogen_logs")<br>    os.makedirs(self.log_dir, exist_ok=True)<br>    self.log_file = os.path.join(self.log_dir, self.config.get("filename", "runtime.log"))<br>    try:<br>        with open(self.log_file, "a"):<br>            pass<br>    except Exception as e:<br>        logger.error(f"[file_logger] Failed to create logging file: {e}")<br>    self.logger = logging.getLogger(__name__)<br>    self.logger.setLevel(logging.INFO)<br>    file_handler = logging.FileHandler(self.log_file)<br>    self.logger.addHandler(file_handler)<br>``` |

### ``config`instance-attribute`[#](https://docs.ag2.ai/0.9.2/docs/api-reference/autogen/logger/FileLogger/#autogen.logger.FileLogger.config "Permanent link")

```
config = config
```

### ``session_id`instance-attribute`[#](https://docs.ag2.ai/0.9.2/docs/api-reference/autogen/logger/FileLogger/#autogen.logger.FileLogger.session_id "Permanent link")

```
session_id = str(uuid4())
```

### ``log_dir`instance-attribute`[#](https://docs.ag2.ai/0.9.2/docs/api-reference/autogen/logger/FileLogger/#autogen.logger.FileLogger.log_dir "Permanent link")

```
log_dir = join(curr_dir, 'autogen_logs')
```

### ``log_file`instance-attribute`[#](https://docs.ag2.ai/0.9.2/docs/api-reference/autogen/logger/FileLogger/#autogen.logger.FileLogger.log_file "Permanent link")

```
log_file = join(log_dir, get('filename', 'runtime.log'))
```

### ``logger`instance-attribute`[#](https://docs.ag2.ai/0.9.2/docs/api-reference/autogen/logger/FileLogger/#autogen.logger.FileLogger.logger "Permanent link")

```
logger = getLogger(__name__)
```

### ``start [#](https://docs.ag2.ai/0.9.2/docs/api-reference/autogen/logger/FileLogger/#autogen.logger.FileLogger.start "Permanent link")

```
start()
```

Start the logger and return the session_id.

Source code in `autogen/logger/file_logger.py`

|     |     |
| --- | --- |
| ```<br>74<br>75<br>76<br>77<br>78<br>79<br>80<br>81<br>``` | ```<br>def start(self) -> str:<br>    """Start the logger and return the session_id."""<br>    try:<br>        self.logger.info(f"Started new session with Session ID: {self.session_id}")<br>    except Exception as e:<br>        logger.error(f"[file_logger] Failed to create logging file: {e}")<br>    finally:<br>        return self.session_id<br>``` |

### ``log_chat_completion [#](https://docs.ag2.ai/0.9.2/docs/api-reference/autogen/logger/FileLogger/#autogen.logger.FileLogger.log_chat_completion "Permanent link")

```
log_chat_completion(invocation_id, client_id, wrapper_id, source, request, response, is_cached, cost, start_time)
```

Log a chat completion.

Source code in `autogen/logger/file_logger.py`

|     |     |
| --- | --- |
| ```<br> 83<br> 84<br> 85<br> 86<br> 87<br> 88<br> 89<br> 90<br> 91<br> 92<br> 93<br> 94<br> 95<br> 96<br> 97<br> 98<br> 99<br>100<br>101<br>102<br>103<br>104<br>105<br>106<br>107<br>108<br>109<br>110<br>111<br>112<br>113<br>114<br>115<br>116<br>117<br>118<br>119<br>120<br>121<br>``` | ```<br>def log_chat_completion(<br>    self,<br>    invocation_id: uuid.UUID,<br>    client_id: int,<br>    wrapper_id: int,<br>    source: str | Agent,<br>    request: dict[str, float | str | list[dict[str, str]]],<br>    response: str | ChatCompletion,<br>    is_cached: int,<br>    cost: float,<br>    start_time: str,<br>) -> None:<br>    """Log a chat completion."""<br>    thread_id = threading.get_ident()<br>    source_name = (<br>        source<br>        if isinstance(source, str)<br>        else source.name<br>        if hasattr(source, "name") and source.name is not None<br>        else ""<br>    )<br>    try:<br>        log_data = json.dumps({<br>            "invocation_id": str(invocation_id),<br>            "client_id": client_id,<br>            "wrapper_id": wrapper_id,<br>            "request": to_dict(request),<br>            "response": str(response),<br>            "is_cached": is_cached,<br>            "cost": cost,<br>            "start_time": start_time,<br>            "end_time": get_current_ts(),<br>            "thread_id": thread_id,<br>            "source_name": source_name,<br>        })<br>        self.logger.info(log_data)<br>    except Exception as e:<br>        self.logger.error(f"[file_logger] Failed to log chat completion: {e}")<br>``` |

### ``log_new_agent [#](https://docs.ag2.ai/0.9.2/docs/api-reference/autogen/logger/FileLogger/#autogen.logger.FileLogger.log_new_agent "Permanent link")

```
log_new_agent(agent, init_args={})
```

Log a new agent instance.

Source code in `autogen/logger/file_logger.py`

|     |     |
| --- | --- |
| ```<br>123<br>124<br>125<br>126<br>127<br>128<br>129<br>130<br>131<br>132<br>133<br>134<br>135<br>136<br>137<br>138<br>139<br>140<br>141<br>142<br>``` | ```<br>def log_new_agent(self, agent: ConversableAgent, init_args: dict[str, Any] = {}) -> None:<br>    """Log a new agent instance."""<br>    thread_id = threading.get_ident()<br>    try:<br>        log_data = json.dumps({<br>            "id": id(agent),<br>            "agent_name": agent.name if hasattr(agent, "name") and agent.name is not None else "",<br>            "wrapper_id": to_dict(<br>                agent.client.wrapper_id if hasattr(agent, "client") and agent.client is not None else ""<br>            ),<br>            "session_id": self.session_id,<br>            "current_time": get_current_ts(),<br>            "agent_type": type(agent).__name__,<br>            "args": to_dict(init_args),<br>            "thread_id": thread_id,<br>        })<br>        self.logger.info(log_data)<br>    except Exception as e:<br>        self.logger.error(f"[file_logger] Failed to log new agent: {e}")<br>``` |

### ``log_event [#](https://docs.ag2.ai/0.9.2/docs/api-reference/autogen/logger/FileLogger/#autogen.logger.FileLogger.log_event "Permanent link")

```
log_event(source, name, **kwargs)
```

Log an event from an agent or a string source.

Source code in `autogen/logger/file_logger.py`

|     |     |
| --- | --- |
| ```<br>144<br>145<br>146<br>147<br>148<br>149<br>150<br>151<br>152<br>153<br>154<br>155<br>156<br>157<br>158<br>159<br>160<br>161<br>162<br>163<br>164<br>165<br>166<br>167<br>168<br>169<br>170<br>171<br>172<br>173<br>174<br>175<br>176<br>177<br>178<br>179<br>180<br>``` | ```<br>def log_event(self, source: str | Agent, name: str, **kwargs: dict[str, Any]) -> None:<br>    """Log an event from an agent or a string source."""<br>    from .. import Agent<br>    # This takes an object o as input and returns a string. If the object o cannot be serialized, instead of raising an error,<br>    # it returns a string indicating that the object is non-serializable, along with its type's qualified name obtained using __qualname__.<br>    json_args = json.dumps(kwargs, default=lambda o: f"<<non-serializable: {type(o).__qualname__}>>")<br>    thread_id = threading.get_ident()<br>    if isinstance(source, Agent):<br>        try:<br>            log_data = json.dumps({<br>                "source_id": id(source),<br>                "source_name": str(source.name) if hasattr(source, "name") else source,<br>                "event_name": name,<br>                "agent_module": source.__module__,<br>                "agent_class": source.__class__.__name__,<br>                "json_state": json_args,<br>                "timestamp": get_current_ts(),<br>                "thread_id": thread_id,<br>            })<br>            self.logger.info(log_data)<br>        except Exception as e:<br>            self.logger.error(f"[file_logger] Failed to log event {e}")<br>    else:<br>        try:<br>            log_data = json.dumps({<br>                "source_id": id(source),<br>                "source_name": str(source.name) if hasattr(source, "name") else source,<br>                "event_name": name,<br>                "json_state": json_args,<br>                "timestamp": get_current_ts(),<br>                "thread_id": thread_id,<br>            })<br>            self.logger.info(log_data)<br>        except Exception as e:<br>            self.logger.error(f"[file_logger] Failed to log event {e}")<br>``` |

### ``log_new_wrapper [#](https://docs.ag2.ai/0.9.2/docs/api-reference/autogen/logger/FileLogger/#autogen.logger.FileLogger.log_new_wrapper "Permanent link")

```
log_new_wrapper(wrapper, init_args={})
```

Log a new wrapper instance.

Source code in `autogen/logger/file_logger.py`

|     |     |
| --- | --- |
| ```<br>182<br>183<br>184<br>185<br>186<br>187<br>188<br>189<br>190<br>191<br>192<br>193<br>194<br>195<br>196<br>``` | ```<br>def log_new_wrapper(self, wrapper: OpenAIWrapper, init_args: dict[str, LLMConfig | list[LLMConfig]] = {}) -> None:<br>    """Log a new wrapper instance."""<br>    thread_id = threading.get_ident()<br>    try:<br>        log_data = json.dumps({<br>            "wrapper_id": id(wrapper),<br>            "session_id": self.session_id,<br>            "json_state": json.dumps(init_args),<br>            "timestamp": get_current_ts(),<br>            "thread_id": thread_id,<br>        })<br>        self.logger.info(log_data)<br>    except Exception as e:<br>        self.logger.error(f"[file_logger] Failed to log event {e}")<br>``` |

### ``log_new_client [#](https://docs.ag2.ai/0.9.2/docs/api-reference/autogen/logger/FileLogger/#autogen.logger.FileLogger.log_new_client "Permanent link")

```
log_new_client(client, wrapper, init_args)
```

Log a new client instance.

Source code in `autogen/logger/file_logger.py`

|     |     |
| --- | --- |
| ```<br>198<br>199<br>200<br>201<br>202<br>203<br>204<br>205<br>206<br>207<br>208<br>209<br>210<br>211<br>212<br>213<br>214<br>215<br>216<br>217<br>218<br>219<br>220<br>221<br>222<br>223<br>224<br>225<br>226<br>227<br>228<br>229<br>230<br>231<br>``` | ```<br>def log_new_client(<br>    self,<br>    client: (<br>        AzureOpenAI<br>        | OpenAI<br>        | CerebrasClient<br>        | GeminiClient<br>        | AnthropicClient<br>        | MistralAIClient<br>        | TogetherClient<br>        | GroqClient<br>        | CohereClient<br>        | OllamaClient<br>        | BedrockClient<br>    ),<br>    wrapper: OpenAIWrapper,<br>    init_args: dict[str, Any],<br>) -> None:<br>    """Log a new client instance."""<br>    thread_id = threading.get_ident()<br>    try:<br>        log_data = json.dumps({<br>            "client_id": id(client),<br>            "wrapper_id": id(wrapper),<br>            "session_id": self.session_id,<br>            "class": type(client).__name__,<br>            "json_state": json.dumps(init_args),<br>            "timestamp": get_current_ts(),<br>            "thread_id": thread_id,<br>        })<br>        self.logger.info(log_data)<br>    except Exception as e:<br>        self.logger.error(f"[file_logger] Failed to log event {e}")<br>``` |

### ``log_function_use [#](https://docs.ag2.ai/0.9.2/docs/api-reference/autogen/logger/FileLogger/#autogen.logger.FileLogger.log_function_use "Permanent link")

```
log_function_use(source, function, args, returns)
```

Log a registered function(can be a tool) use from an agent or a string source.

Source code in `autogen/logger/file_logger.py`

|     |     |
| --- | --- |
| ```<br>233<br>234<br>235<br>236<br>237<br>238<br>239<br>240<br>241<br>242<br>243<br>244<br>245<br>246<br>247<br>248<br>249<br>250<br>``` | ```<br>def log_function_use(self, source: str | Agent, function: F, args: dict[str, Any], returns: Any) -> None:<br>    """Log a registered function(can be a tool) use from an agent or a string source."""<br>    thread_id = threading.get_ident()<br>    try:<br>        log_data = json.dumps({<br>            "source_id": id(source),<br>            "source_name": str(source.name) if hasattr(source, "name") else source,<br>            "agent_module": source.__module__,<br>            "agent_class": source.__class__.__name__,<br>            "timestamp": get_current_ts(),<br>            "thread_id": thread_id,<br>            "input_args": safe_serialize(args),<br>            "returns": safe_serialize(returns),<br>        })<br>        self.logger.info(log_data)<br>    except Exception as e:<br>        self.logger.error(f"[file_logger] Failed to log event {e}")<br>``` |

### ``get_connection [#](https://docs.ag2.ai/0.9.2/docs/api-reference/autogen/logger/FileLogger/#autogen.logger.FileLogger.get_connection "Permanent link")

```
get_connection()
```

Method is intentionally left blank because there is no specific connection needed for the FileLogger.

Source code in `autogen/logger/file_logger.py`

|     |     |
| --- | --- |
| ```<br>252<br>253<br>254<br>``` | ```<br>def get_connection(self) -> None:<br>    """Method is intentionally left blank because there is no specific connection needed for the FileLogger."""<br>    pass<br>``` |

### ``stop [#](https://docs.ag2.ai/0.9.2/docs/api-reference/autogen/logger/FileLogger/#autogen.logger.FileLogger.stop "Permanent link")

```
stop()
```

Close the file handler and remove it from the logger.

Source code in `autogen/logger/file_logger.py`

|     |     |
| --- | --- |
| ```<br>256<br>257<br>258<br>259<br>260<br>261<br>``` | ```<br>def stop(self) -> None:<br>    """Close the file handler and remove it from the logger."""<br>    for handler in self.logger.handlers:<br>        if isinstance(handler, logging.FileHandler):<br>            handler.close()<br>            self.logger.removeHandler(handler)<br>``` |
