By David,
FSLogix records what happens to each profile in three places: daily text logs under C:\ProgramData\FSLogix\Logs, the FSLogix event logs in Event Viewer, and a Status and Reason code in the registry for every session. The text log is where you'll find the cause of almost every failure. Each sign-in starts with a LoadProfile line for the user, warnings and errors carry a Windows error code, and the sign-in ends with a Status and a Reason code that say whether the container attached and, if not, why.
The short version: Open the newest
Profile_<date>.logon the session host, search forLoadProfile: <username>, and read theStatus set toandReason set tolines for that sign-in. Status 0, Reason 0 means the container attached. Any other Status is a failure (the table below says which step failed), and the[ERROR:xxxxxxxx]code before it is a Windows system error code you can look up. Microsoft documents very few FSLogix event IDs; the text log and the Status codes are the reference.
This is a companion to our FSLogix troubleshooting guide. Every table below is from Microsoft Learn as of November 2026, with each source linked.
Where FSLogix writes its logs
| What | Where | Use it for |
|---|---|---|
| Text logs | C:\ProgramData\FSLogix\Logs\<component>\, one file per day; profile containers in Profile\Profile_<date>.log | The cause of a failed or slow sign-in or sign-out |
| Event logs | Event Viewer → Applications and Services Logs → FSLogix: Apps (Admin, Operational) and CloudCache (Admin, Operational) | Alerting and collection with your monitoring tools |
| Session status | HKLM\Software\FSLogix\Profiles\Sessions\<user SID>; Office containers under HKLM\Software\Policies\FSLogix\ODFC\Sessions\<user SID> | The Status and Reason of each user's current session on this host |
| ETL traces | trace.etl.001 and trace.etl.002 in the Logs folder, 100 MB each, round-robin | Microsoft support only; Microsoft says they're "intended for Microsoft Internal Use only" |
Sources: logs and diagnostics, error codes.
How to read the profile log
Each line starts with a time, a thread ID and a level: [INFO], [WARN:xxxxxxxx] or [ERROR:xxxxxxxx]. The eight hex digits on a warning or error are a Windows error code. Microsoft suggests searching for these markers (logs and diagnostics):
| Search for | What it marks |
|---|---|
LoadProfile: <samaccountname> | The start of that user's profile load |
===== Begin Session: Logon | A sign-in |
===== Begin Session: Logoff | A sign-out |
loadProfile time: | How long the sign-in took FSLogix, in milliseconds |
unloadProfile time: | How long the sign-out took |
Status set to and Reason set to | The result, for example "Status set to 0: Success" and "Reason set to 0: The container is attached" |
On a multi-session host, every user's sign-in writes to the same file, and their lines interleave. A "Status set to" or "ERROR" line near your user's sign-in may belong to someone else. Microsoft's advice is to note the process ID on the user's LoadProfile line and follow only the lines with that ID, "as there may be other processes running for other users at the same time" (logs and diagnostics). To find the user's latest sign-in and the lines after it in today's log:
$log = Get-ChildItem "C:\ProgramData\FSLogix\Logs\Profile" -Filter "Profile*.log" |
Sort-Object LastWriteTime | Select-Object -Last 1
# The user's most recent LoadProfile line, then the 60 lines after it
Select-String -Path $log.FullName -Pattern "LoadProfile: jdoe" -Context 0,60 | Select-Object -Last 1
Then read only the lines that carry the same process ID as that LoadProfile line, down to its Status set to and Reason set to lines.
FSLogix Status codes
Status is the result of the sign-in. 0, 100, 200 and 300 are normal; everything else names the step that failed (error codes):
| Status | Name | Meaning |
|---|---|---|
| 0 | STATUS_SUCCESS | Success |
| 1 | ERROR | Can't load user's profile |
| 2 | ERROR_VIRT_DLL | Virtual disk API isn't available on this platform |
| 3 | ERROR_GET_USER | Can't retrieve user's security identifier |
| 4 | ERROR_HANDLE_ODFC | There was an error setting up the Office 365 Container |
| 5 | ERROR_SECURITY | Can't retrieve security information |
| 6 | ERROR_VHD_PATH | Can't retrieve virtual disk location |
| 7 | ERROR_CREATE_DIR | Can't create destination folders |
| 8 | ERROR_IMPERSONATION | Can't impersonate user |
| 9 | ERROR_CREATE_VHD | Can't create virtual disk |
| 10 | ERROR_CLOSE_HANDLE | Can't release virtual disk |
| 11 | ERROR_OPEN_VHD | Can't open virtual disk |
| 12 | ERROR_ATTACH_VHD | Can't attach to virtual disk |
| 13 | ERROR_GET_PHYSICAL_PATH | Can't retrieve virtual disk's physical information |
| 14 | ERROR_OPEN_DEVICE | Can't open virtual disk's volume |
| 15 | ERROR_INIT_DISK | Can't initialize virtual disk |
| 16 | ERROR_GET_VOL_GUID | Can't retrieve virtual disk identifier |
| 17 | ERROR_FORMAT_VOL | Error while formatting virtual disk |
| 18 | ERROR_GET_PROFILE_DIR | Can't retrieve profile directory |
| 19 | ERROR_SET_MOUNT_POINT | Can't set up directory mount point |
| 20 | ERROR_REG_IMPORT | Can't import registry information |
| 21 | ERROR_CHK_GRP_MEMBERSHIP | Can't retrieve user's group |
| 22 | ERROR_HANDLE_PROFILE | Error handling profile |
| 23 | ERROR_PROFILE_SUBFOLDER_REDIRECTION | Can't set up folder redirections |
| 24 | ERROR_CREATE_EVENT | Unable to create event |
| 25 | ERROR_PER_SESSION_VHD | Maximum sessions reached |
| 26 | ERROR_DETACH_VHD | Can't detach virtual disk at the provided location |
| 27 | ERROR_FIND_VHD | Can't find virtual disk at the provided location |
| 28 | ERROR_NO_SESSION_CONFIG | No user session config found |
| 100 | STATUS_WAITING_FOR_PROFILE_DIR_SET | Waiting for the Windows Profile Service to determine the user's profile folder |
| 200 | STATUS_IN_PROGRESS | Setup in progress |
| 300 | STATUS_ALREADY_ATTACHED | The profile is already attached (differencing disks only) |
What the common ones usually mean in practice. Status 11 or 12 (can't open or attach the disk) with a sharing or lock error before it is usually a locked container. With access denied before it, it's permissions or Kerberos. Status 7 or 9 (can't create the folder or disk) usually means the user can't write to the share, or the share is full. Status 27 (can't find the disk) with an existing user often means a naming setting changed, so FSLogix is looking in the wrong folder.
FSLogix Reason codes
Reason only accompanies a normal Status, and explains why FSLogix did what it did (error codes):
| Reason | Name | Meaning |
|---|---|---|
| 0 | REASON_PROFILE_ATTACHED | The container is attached |
| 1 | REASON_NOT_IN_WHITE_LIST | User isn't a member of the include group |
| 2 | REASON_IN_BLACK_LIST | User is a member of the exclude group |
| 3 | REASON_LOCAL_PROFILE_EXISTS | A local profile for this user exists on this system |
| 4 | REASON_SHORT_SID | Not an appropriate user type |
| 5 | REASON_UNSET | Reason initialized to empty state |
| 6 | REASON_COMPONENT_NOT_ENABLED | Component isn't enabled in product key (legacy) |
| 7 | REASON_WINDOWS_TEMP_PROFILE | Profile is a Windows temporary profile |
| 8 | REASON_NOT_WVD_SESSION | Session isn't an Azure Virtual Desktop Session |
| 9 | REASON_FAILED_TO_LOAD_PROFILE | Profile load failed |
Reasons 1 and 2 are deliberate: the user isn't in the FSLogix include group, or is in the exclude group. Reason 3 means a local profile got there first; Microsoft's DeleteLocalProfileWhenVHDShouldApply setting (recommended value 1) deletes the local profile so the container can load, and it does delete it permanently (configuration settings).
Windows error codes in the log
The code inside [WARN:...] or [ERROR:...] isn't an FSLogix code. Microsoft says these codes "come from Windows" and correspond to System Error Codes, and you can look any of them up with net helpmsg <decimal code> (error codes). The ones you'll see most on AVD:
| Hex in the log | Decimal | Windows message | Usual FSLogix cause |
|---|---|---|---|
| 00000002 | 2 | The system cannot find the file specified | A file or folder FSLogix expected isn't there |
| 00000003 / 80070003 | 3 | The system cannot find the path specified | Wrong or unreachable VHDLocations path |
| 00000005 | 5 | Access is denied | Share-level or NTFS permissions, or Kerberos |
| 00000020 | 32 | The process cannot access the file because it is being used by another process | Container open elsewhere |
| 00000021 | 33 | The process cannot access the file because another process has locked a portion of the file | Container locked by another session |
| 00000070 | 112 | There is not enough space on the disk | The share or the container is full |
| 000000b7 | 183 | Cannot create a file when that file already exists | A leftover folder or file from an earlier session |
| 0000052e | 1326 | The user name or password is incorrect | Authentication to the storage account failed |
The meaning of each number is Windows'; the "usual cause" column is our experience, not Microsoft's. For permissions and Kerberos causes, see section 4 of the troubleshooting guide.
FSLogix event logs and event IDs
FSLogix writes to Applications and Services Logs → FSLogix in Event Viewer: the Apps log (Admin and Operational channels, provider Microsoft-FSLogix-Apps) and, if you use Cloud Cache, the CloudCache log (logs and diagnostics).
Microsoft doesn't publish a catalog of FSLogix event IDs. The ones it does document:
| Event ID | Channel | Meaning |
|---|---|---|
| 26 | Apps (Error) | On Entra-joined-only hosts, "Failed to get computer's group SIDs" or "Querying computer's fully qualified distinguished name failed". Expected, and safe to ignore (known issues) |
| 57 | Apps/Operational | Disk compaction result |
| 58 | Apps/Operational | Disk compaction optimization failed |
| 60 | Apps/Admin | Compaction can't run: the Optimize Drives service (defragsvc) is disabled |
| 61 | Apps/Operational | Compaction skipped: the disk is fixed size |
| 62 | Apps/Admin | Unable to compact the disk |
| 63 | Apps/Admin | Disk compaction failed |
The compaction events are from VHD disk compaction troubleshooting and its reference queries. For everything else, alert on the Error and Warning levels of the FSLogix channels rather than on specific IDs, and go to the text log for the cause:
Get-WinEvent -FilterHashtable @{
LogName = "Microsoft-FSLogix-Apps/Operational", "Microsoft-FSLogix-Apps/Admin"
Level = 2, 3 # Error, Warning
StartTime = (Get-Date).AddHours(-4)
} -ErrorAction SilentlyContinue | Select-Object TimeCreated, Id, LevelDisplayName, Message
Logging settings
All under HKLM\SOFTWARE\FSLogix\Logging (configuration settings):
| Setting | Type | Default | Values |
|---|---|---|---|
| LoggingEnabled | DWORD | 2 | 0 = all logs off; 1 = only the components you enable; 2 = all logs on |
| LoggingLevel | DWORD | 1 | 0 = verbose (debug, info, warning, error); 1 = info, warning, error; 2 = warning, error; 3 = errors only |
| LogFileKeepingPeriod | DWORD | 2 | Days of daily log files to keep, up to 180 |
| LogDir | REG_SZ | %ProgramData%\FSLogix\Logs | A local or UNC path. A UNC path is written as the computer account, and a change needs a reboot or a restart of the FSLogix service |
| RobocopyLogPath | REG_SZ | none | Logs FSLogix's robocopy operations; Microsoft recommends it for troubleshooting only |
Two practical changes for AVD. Raise LogFileKeepingPeriod: the default of two days means a ticket raised on Monday about Friday's sign-in has no log left. And on pooled hosts that are reimaged or replaced, consider a LogDir on a share so the logs outlive the host.
Tools that help
- frx.exe, in
C:\Program Files\FSLogix\Apps.frx versionshows the installed build;frx list-redirectsshows the active folder redirections;frx list-rulesthe active rules (frx). - The Microsoft.FSLogix PowerShell module, installed with FSLogix:
Get-CloudCacheDiskandGet-CloudCacheProviderfor Cloud Cache (PowerShell module). - The FSLogix Support Tool (aka.ms/fslogix_support_tool) collects the text and event logs, FSLogix registry settings, gpresult and filter driver output into
C:\ProgramData\FSLogix\Support, with an error breakdown report. Useful when you open a case with Microsoft (support tool).
How Atlas AVD helps
Atlas AVD ships alert rules for FSLogix profile load and sign-in time alongside session host CPU, memory and disk, and its Workspace → FSLogix page shows each host's live FSLogix state on Host Coverage, whether each pool is fully configured on Health, and each share's fill level on Capacity, so you know which host and which user to open the log for. See FSLogix optimization for the rest.
FAQ
Where are the FSLogix logs?
On each session host, in C:\ProgramData\FSLogix\Logs, one file per component per day. Profile container activity is in Profile\Profile_<date>.log. Event logs are in Event Viewer under Applications and Services Logs → FSLogix.
What does FSLogix Status 0 and Reason 0 mean?
Success: the profile container is attached. Any Status other than 0, 100, 200 or 300 is an error, and the Status table above names the step that failed.
What does FSLogix Reason 3 mean?
A local profile for the user already exists on the host, so FSLogix used it instead of the container. Remove the local profile, or set DeleteLocalProfileWhenVHDShouldApply to 1 so FSLogix deletes it.
Is there a list of FSLogix event IDs?
No. Microsoft documents only a few: event 26 on Entra-joined hosts, which you can ignore, and events 57, 58 and 60 to 63 for disk compaction. Use the text log for everything else.
How do I keep FSLogix logs for longer?
Set LogFileKeepingPeriod under HKLM\SOFTWARE\FSLogix\Logging to the number of days you want, up to 180. The default is two days.
FSLogix log locations, codes, event IDs and settings are from Microsoft Learn as of November 2026: logs and diagnostics, error codes, known issues, VHD disk compaction troubleshooting, configuration settings, frx, the PowerShell module and the support tool. Windows error messages are from System Error Codes.