---
title: "How to log an user activity in C# using file handling?"  
description: "How to log an user activity in C# using file handling?"  
author: "ICSM Computer"  
published: 2025-05-29  
updated: 2025-05-29  
canonical: https://www.mindstick.com/interview/34181/how-to-log-an-user-activity-in-c-sharp-using-file-handling  
category: "c#"  
tags: ["c#"]  
reading_time: 3 minutes  

---

# How to log an user activity in C# using file handling?

To maintain **user activity logs saved as separate files per day**, you can easily modify the async logger to create a new log file for each date.

## Updated: Async Logger with Day-Wise Log Files

```cs
public static class UserActivityLogger
{
    public static async Task LogAsync(string userId, string userName, string action, string description, string ipAddress = null)
    {
        try
        {
            // Format: UserActivityLog_2025-05-29.txt
            string logFileName = $"UserActivityLog_{DateTime.UtcNow:yyyy-MM-dd}.txt";
            string logDirectory = HttpContext.Current.Server.MapPath("~/App_Data/UserLogs");

            if (!Directory.Exists(logDirectory))
                Directory.CreateDirectory(logDirectory);

            string logFilePath = Path.Combine(logDirectory, logFileName);

            string logMessage = $"{DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} | UserID: {userId} | UserName: {userName} | Action: {action} | IP: {ipAddress} | Description: {description}{Environment.NewLine}";
            byte[] encodedText = Encoding.UTF8.GetBytes(logMessage);

            using (var stream = new FileStream(logFilePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite, 4096, useAsync: true))
            {
                await stream.WriteAsync(encodedText, 0, encodedText.Length);
            }
        }
        catch
        {
            // Do not throw from logger
        }
    }
}
```

## Sample Output Location

Your logs will be stored like this:

```plaintext
App_Data/UserLogs/
├── UserActivityLog_2025-05-28.txt
├── UserActivityLog_2025-05-29.txt
├── UserActivityLog_2025-05-30.txt
```

## Usage in Controller (same as before)

```cs
await UserActivityLogger.LogAsync(
    userId: User.Identity.GetUserId(),
    userName: User.Identity.Name,
    action: "Login",
    description: "User successfully logged in",
    ipAddress: Request.UserHostAddress
);
```

## Optional Enhancements

Would you like to:

- Compress old log files (e.g., ZIP after 7 days)?
- Automatically delete logs older than X days?
- Use JSON format instead of plain text?

## Answers

### Answer by ICSM Computer

To maintain **user activity logs saved as separate files per day**, you can easily modify the async logger to create a new log file for each date.

## Updated: Async Logger with Day-Wise Log Files

```cs
public static class UserActivityLogger
{
    public static async Task LogAsync(string userId, string userName, string action, string description, string ipAddress = null)
    {
        try
        {
            // Format: UserActivityLog_2025-05-29.txt
            string logFileName = $"UserActivityLog_{DateTime.UtcNow:yyyy-MM-dd}.txt";
            string logDirectory = HttpContext.Current.Server.MapPath("~/App_Data/UserLogs");

            if (!Directory.Exists(logDirectory))
                Directory.CreateDirectory(logDirectory);

            string logFilePath = Path.Combine(logDirectory, logFileName);

            string logMessage = $"{DateTime.UtcNow:yyyy-MM-dd HH:mm:ss} | UserID: {userId} | UserName: {userName} | Action: {action} | IP: {ipAddress} | Description: {description}{Environment.NewLine}";
            byte[] encodedText = Encoding.UTF8.GetBytes(logMessage);

            using (var stream = new FileStream(logFilePath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite, 4096, useAsync: true))
            {
                await stream.WriteAsync(encodedText, 0, encodedText.Length);
            }
        }
        catch
        {
            // Do not throw from logger
        }
    }
}
```

## Sample Output Location

Your logs will be stored like this:

```plaintext
App_Data/UserLogs/
├── UserActivityLog_2025-05-28.txt
├── UserActivityLog_2025-05-29.txt
├── UserActivityLog_2025-05-30.txt
```

## Usage in Controller (same as before)

```cs
await UserActivityLogger.LogAsync(
    userId: User.Identity.GetUserId(),
    userName: User.Identity.Name,
    action: "Login",
    description: "User successfully logged in",
    ipAddress: Request.UserHostAddress
);
```

## Optional Enhancements

Would you like to:

- Compress old log files (e.g., ZIP after 7 days)?
- Automatically delete logs older than X days?
- Use JSON format instead of plain text?


---

Original Source: https://www.mindstick.com/interview/34181/how-to-log-an-user-activity-in-c-sharp-using-file-handling

Copyright © MindStick Software Pvt. Ltd. This Markdown version is provided for developers, AI systems, and offline reading.
