# Robot Logs

> Logs are time-stamped files that contain informational events, error and warning messages relevant to the application.

Logs are time-stamped files that contain informational events, error and warning messages relevant to the application.

The types of logs are presented in the following pages:

## Robot Execution Logs

Robot Execution Logs are messages generated by the execution of a process. They contain information related to its behavior and user-defined messages in the workflow.

Execution logs are generated by:

* The **Write Line** activity, which creates logs at the Trace level.
* The **Log Message** activity, which creates logs at the level specified in the **Level** property field of the activity.
* Running an automation project, which generates logs that contain the behavior of each activity. These logs use `Trace` level if the **Level** setting in the **Orchestrator Settings window** in Assistant is set to **Verbose**.

### Execution Logs Logging Level

The default logging level is controlled by the **Level** setting stored in **Orchestrator Settings window**. By default, it is set to **Information**.

:::note
The [log level set in Orchestrator](https://docs.uipath.com/orchestrator/v2023.4/docs/about-logs) for the robot overrides the one [set in the UiPath Assistant](https://docs.uipath.com/robot/standalone/2023.10/user-guide/logging-and-log-levels#logging-and-log-levels). Only logs that match the level specified in either Assistant or Orchestrator settings get sent to Orchestrator.
:::

### Changing the Default Logging Level from the Assistant:

1. From the UiPath Assistant, go to the Preferences menu and then access **Orchestrator Settings**
2. Select the desired logging level from the **Log Level** drop-down menu, under the **Logging** section.
   :::note
   If the **Robot** is installed in service mode, administrator permissions are needed to edit this setting.
   :::

### Orchestrator target

If the **Robot** is connected to **Orchestrator**, only logs matching the level set in Assistant or Orchestrator appear on the [Logs](https://docs.uipath.com/orchestrator/v2023.4/docs/about-logs) page.

If Orchestrator is unavailable, logs are stored in a local database (`C:\Windows\System32\config\systemprofile\AppData\Local\UiPath\Logs\execution_log_data`), within the available disk space, until the connection is restored. When the connection is restored, the logs are sent in batches in the order they had been generated.

:::note
The database is not deleted after the logs have been successfully sent to Orchestrator.
:::

### NLog target

Additionally, log targets and content can be configured by editing the `<Installation Folder>\NLog.config` file.

The target location of the logs is controlled by the `<Installation Folder>\NLog.config` file. The Diagnostic logs are collected by the **Internal** type logger and are forwarded by using [NLog targets](https://github.com/nlog/nlog/wiki/Targets).

By default, Execution Logs are stored in a file in the `%LocalAppData%\UiPath\Logs` folder. The messages are collected by the **WorkflowLogging** logger and can be forwarded by using [NLog targets](https://github.com/nlog/nlog/wiki/Targets), as specified by the following parameters in the `NLog.config` file:

```
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <variable name="WorkflowLoggingDirectory" value="${specialfolder:folder=LocalApplicationData}/UiPath/Logs" />
  <rules>
    <logger name="WorkflowLogging" writeTo="WorkflowLogFiles" final="true" />
  </rules>
  <targets>
    <target type="File" name="WorkflowLogFiles" fileName="${WorkflowLoggingDirectory}/${shortdate}_Execution.log" layout="${time} ${level} ${message}" keepFileOpen="true" openFileCacheTimeout="5" concurrentWrites="true" encoding="utf-8" writeBom="true" />
  </targets>
</nlog>
```

### Deleting old workflow log files

To avoid creating a large amount of log files consuming disk space on the machine, you can choose to archive log files once a specific number files has been reached.

This is done by adding the following parameters in the `<target>` tag `NLog.config`:

* `archiveNumbering="Date"`
* `archiveEvery="Day"`
* `archiveDateFormat="yyyy-MM-dd"`
* `archiveFileName="${WorkflowLoggingDirectory}/{#}_Execution.log"`
* `maxArchiveFiles="10"`
  ```
  <?xml version="1.0" encoding="utf-8" ?>
  <nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <variable name="WorkflowLoggingDirectory" value="${specialfolder:folder=LocalApplicationData}/UiPath/Logs" />
    <rules>
      <logger name="WorkflowLogging" writeTo="WorkflowLogFiles" final="true" />
    </rules>
    <targets>
      <target type="File"
        name="WorkflowLogFiles"
        fileName="${WorkflowLoggingDirectory}/${shortdate}_Execution.log"
        layout="${time} ${level} ${message}"
        keepFileOpen="true"
        openFileCacheTimeout="5"
        concurrentWrites="true"
        encoding="utf-8"
        writeBom="true"
        archiveNumbering="Date"
        archiveEvery="Day"
        archiveDateFormat="yyyy-MM-dd"
        archiveFileName="${WorkflowLoggingDirectory}/{#}_Execution.log"
        maxArchiveFiles="10"
      />
    </targets>
  </nlog>
  ```

  :::note
  The `maxArchiveFiles` is the parameter controlling the number of archive files.
  :::
  :::note
  Editing the `NLog.config` file requires administrator permissions. The robot service does not need to be restarted for the changes to take effect.
  :::

### Further Editing of Logs

If the logging level is set to **Verbose**, the messages contain all the details about the activities that were run at execution. This log output can be customized by editing the `UiPath.Executor.exe.config` file, from `C:\Program Files\UiPath\Studio` folder.

For this, the following XML code must be added under the `<system.serviceModel>` tag.

```
<tracking>
    <profiles>
        <trackingProfile name="StandardProfile">
         <workflow>
          <activityStateQueries>  
            <activityStateQuery activityName="*">
                <states>  
                    <state name="Faulted"/>  
                </states>
                <arguments>  
                    <argument name="*"/>  
                </arguments> 
                 <variables>  
                    <variable name="*"/>  
                </variables>             
            </activityStateQuery>
          </activityStateQueries>    
         </workflow>
        </trackingProfile>       
    </profiles>
</tracking>
```

Since the `<states>` tag contains only `<state name="Faulted"/>`, inserting the above code enables only the activities which have the **Faulted** state to be logged. Adding other parameters under the `<states>` tag, such as `<state name="Executing"/>` causes activities that have other states to be logged as well.

Not only activity states can be modified, but also variables and arguments. More information about customization can be found [here](https://docs.microsoft.com/en-us/dotnet/framework/windows-workflow-foundation/tracking-profiles).

:::note
Modifying the `UiPath.Executor.exe.config` file requires a [restart of the robot service](https://docs.uipath.com/robot/standalone/2023.10/user-guide/restarting-robot-components) for changes to take effect.
:::

## Robot Diagnostic Logs

The robot diagnostic logs provide information related to the **Robot** itself and its context. They are useful to identify the cause of a specific error.

Robot diagnostic logs are saved in the following locations:

* On Windows, diagnostic logs related to errors are logged in the **Event Viewer**.
* On all platforms, including Windows, verbose diagnostic logs are written to a file:
  + `%LocalAppData%\UiPath\Logs\internal\Robot.log` on Windows when the robot is installed in user mode.
  + `%PROGRAMDATA%\UiPath\Logs\internal\Robot.log` on Windows when the robot is installed in service mode.
  + `~/.local/share/UiPath/Logs/internal/Robot.log` on other platforms.

## Driver Diagnostic Logs

**Driver Tracing** is written to an `.etl` file.

**To enable Driver Tracing**, open Command Prompt with administrator rights, access the installation directory using the `cd` argument, such as `cd C:\Program Files\UiPath\Studio`, and run the `UiRobot.exe --enableLowLevel` command.

**To disable Driver Tracing**, open Command Prompt with administrator rights, access the installation directory using the `cd` argument, such as `cd C:\Program Files\UiPath\Studio`, and run the `UiRobot.exe --disableLowLevel` command.
:::note
We recommend enabling Low Level Tracing only while investigating a problem, and disabling it when the investigation session is over. 

Additionally, the `.etl` file containing the trace information is generated only after you disable the feature. 

The Robot does not have to be restarted for the changes to take effect.
:::
