# Logging / Debugging

The SOFA Java class has a builtin, detailed logging funtion to help finding and diagnosing any issue you may encounter.

To enable the Java Logger framework, you need to add a Logger properties file `SOFA-Logging.properties` in the current directory of your running application.

#### **SOFA-Logging.properties Example**

```properties
# SOFA - Simple OAuth 2.0 Framework for Authentication - Logging configuration file
#
# Notes:
# - The SOFA class only uses logging level FINE (for debugging) and WARNING (for errors)
# - To disable logging, comment out all "handlers" properties or remove/rename this configuration file)

# Logging level for the SOFA class
SOFA.level                                  = FINE

# Specify where the logging output should go
#handlers                                   = java.util.logging.ConsoleHandler
#handlers                                   = java.util.logging.FileHandler
handlers	                            = java.util.logging.ConsoleHandler, java.util.logging.FileHandler

# Logging output format, e.g. "2022-01-27T16:44:00.322 FINE        SOFA Version ..."
java.util.logging.SimpleFormatter.format    = %1$tFT%1$tT.%1$tL %4$-11s %5$s %6$s %n

# Define logging output to system console
java.util.logging.ConsoleHandler.level      = ALL
java.util.logging.ConsoleHandler.formatter  = java.util.logging.SimpleFormatter

# Define logging output to file (maximum 10 files, each up to about 60 kB)
java.util.logging.FileHandler.pattern       = ALL
java.util.logging.FileHandler.formatter     = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.pattern       = SOFA-Log-%g.txt
java.util.logging.FileHandler.count         = 10
java.util.logging.FileHandler.limit         = 60000
java.util.logging.FileHandler.append        = true
```

This Logger configuration file writes the logging output to `System.out` and to the files `SOFA-Log-0.txt` to `SOFA-Log-9.txt`.

#### **Output Example**

```
2022-10-19T15:54:29.742 FEIN        SOFA (Simple OAuth 2.0 Framework for Authentication) Version 1.0.0 (2022-10-19) initialization called  
2022-10-19T15:54:29.742 FEIN        SOFA running on OS platform <Windows 8 6.2/amd64>  
2022-10-19T15:54:29.742 FEIN        SOFA running on JVM version <International Business Machines Corporation openj9-0.29.0>  
2022-10-19T15:54:29.742 FEIN        SOFA AES-256 cipher initialized  
2022-10-19T15:54:29.742 FEIN        SOFA object initialized  
2022-10-19T15:54:29.742 FEIN        SOFA authenticate() called  
2022-10-19T15:54:29.742 FEIN        OAuth authorization endpoint <https://login.microsoftonline.com/11111111-2222-3333-4444-555555555555/oauth2/v2.0/token>  
2022-10-19T15:54:29.742 FEIN        OAuth authorization scope <https://outlook.office365.com/.default>  
2022-10-19T15:54:29.742 FEIN        OAuth client ID <66666666-7777-8888-9999-111111111111>  
2022-10-19T15:54:29.742 FEIN        OAuth grant type <client_credentials>  
2022-10-19T15:54:29.742 FEIN        SOFA executeHttpTransaction() called  
2022-10-19T15:54:29.742 FEIN        HTTP connecting to URL <https://login.microsoftonline.com/11111111-2222-3333-4444-555555555555/oauth2/v2.0/token>  
2022-10-19T15:54:29.742 FEIN        HTTP method <POST>  
2022-10-19T15:54:29.757 FEIN        HTTP header sent <Date: Wed, 19 Oct 2022 13:54:29 GMT>  
2022-10-19T15:54:29.757 FEIN        HTTP header sent <User-Agent: SOFA/1.0.0 (Simple OAuth 2.0 Framework for Authentication)>  
2022-10-19T15:54:29.757 FEIN        HTTP header sent <Accept: application/json>  
2022-10-19T15:54:29.757 FEIN        HTTP header sent <Content-Type: application/x-www-form-urlencoded>  
2022-10-19T15:54:29.757 FEIN        HTTP header sent <Content-Length: 188>  
2022-10-19T15:54:29.945 FEIN        HTTP data size sent <188 bytes>  
2022-10-19T15:54:29.945 FEIN        HTTP connection established with cipher <TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384>  
2022-10-19T15:54:30.070 FEIN        HTTP header received <HTTP/1.1 200 OK>  
2022-10-19T15:54:30.070 FEIN        HTTP header received <x-ms-ests-server: 2.1.13943.8 - WEULR1 ProdSlices>  
2022-10-19T15:54:30.070 FEIN        HTTP header received <X-Content-Type-Options: nosniff>  
2022-10-19T15:54:30.070 FEIN        HTTP header received <Pragma: no-cache>  
2022-10-19T15:54:30.070 FEIN        HTTP header received <P3P: CP="DSP CUR OTPi IND OTRi ONL FIN">  
2022-10-19T15:54:30.070 FEIN        HTTP header received <Date: Wed, 19 Oct 2022 13:54:29 GMT>  
2022-10-19T15:54:30.070 FEIN        HTTP header received <Strict-Transport-Security: max-age=31536000; includeSubDomains>  
2022-10-19T15:54:30.070 FEIN        HTTP header received <Cache-Control: no-store, no-cache>  
2022-10-19T15:54:30.070 FEIN        HTTP header received <Set-Cookie: stsservicecookie=estsfd; path=/; secure; samesite=none; httponly>  
2022-10-19T15:54:30.070 FEIN        HTTP header received <Expires: -1>  
2022-10-19T15:54:30.070 FEIN        HTTP header received <Content-Length: 1595>  
2022-10-19T15:54:30.070 FEIN        HTTP header received <X-XSS-Protection: 0>  
2022-10-19T15:54:30.070 FEIN        HTTP header received <x-ms-request-id: 11111111-4444-5555-6666-777777777777>  
2022-10-19T15:54:30.070 FEIN        HTTP header received <Content-Type: application/json; charset=utf-8>  
2022-10-19T15:54:30.070 FEIN        HTTP response code <200>  
2022-10-19T15:54:30.070 FEIN        HTTP data size received <1595 bytes>  
2022-10-19T15:54:30.070 FEIN        SOFA executeHttpTransaction() elapsed time <328 ms>  
2022-10-19T15:54:30.070 FEIN        SOFA parseJsonResponse() called  
2022-10-19T15:54:30.085 FEIN        OAuth access token size received <1520> bytes  
2022-10-19T15:54:30.085 FEIN        OAuth returned token type <Bearer>  
2022-10-19T15:54:30.085 FEIN        OAuth returned access token expiration <3599> seconds  
2022-10-19T15:54:30.085 FEIN        OAuth access token expiration date <Wed Oct 19 16:53:29 CEST 2022>  
2022-10-19T15:54:30.085 FEIN        SOFA getAccessToken() called  
2022-10-19T15:54:30.085 FEIN        SOFA Refresh token not necessary - Returning saved OAuth 2.0 access token 
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sofa.k43.ch/quick-start/logging-debugging.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
