Skip to content

SDK Logs and LogConnector

How to read the logs from the SDK to get more information

Introduction

If you have been using our SygicMapsSDK, it's possible that you have already noticed that there's a lot being logged into the console. This is because we need to log several information to be able to better debug any problems that might be encountered. The logs do not leave the device if you do not choose otherwise.

If you would like to see more, check out the Configuration. The most useful appender can be the DiagnosticsAppender because if you add that one, you can receive the logs into the LogConnector's callbacks. Then, you can send the logs into Firebase after a crash. If you will ever like to report a crash, the logs will help us enormously! And it can even save you some time while analyzing a problem.

What's a LogConnector?

LogConnector is a class that's necessary to use (pass into the initialize() function) in case you want to "do something" with our logs. Just like above, you can send the logs to Firebase or wherever you want. Here's what it would look like on Android:

val logConnector = object: LogConnector() {
    private val tag = "SDK_LOG_CONNECTOR"

    override fun onLogReceived(message: String?, logLevel: Int) {
        if (message != null) {
            crashlytics.get().log("[$logLevel], [$tag], [$message]")
        }
    }
}

Examples of logs

Once you initialize the SDK, some information about the device and libraries will be logged.

Initialization information

Platform: android, OS: 11, App id: your.app.id, SDK version: 19.2.0
Libraries: SYL 3.1.1, SRL 5.0.0, SSSL 1.4.0
CPU:  Qualcomm Technologies, Inc SDM670, Cores: 8, Speed(Mhz): 1668, Little endian: yes

The log above lists the device's information, the used SDK version and the versions of our proprietary libraries that are used.

License status

Online auth status changed: StatusCreatingSession
Online auth status changed: StatusConnected

If the device is authorized correctly, you'll see StatusConnected.

HttpResponse(200) GET size 343b / 0b from: https://licensing.api.sygic.com/sdk-license-file-service/v2/license-file

Here's a reply from our license server with a license file.
Note that the log contains a response code. If something goes wrong, a 401 can tell you a lot.

Info

You can find list of all HTTP status codes at Wikipedia.

Tip

An HttpResponse(-1) on Android means that the request could not even be sent from the device because it did not have a proper internet connection.
This can happen when the device is connected to a WiFi hotspot that isn't connected to the internet.

Map licenses status: offline=Licensed, online=Licensed

If the licenses of maps are expired, you'll be notified here.

Maps - online, offline and loading

HttpResponse(200) GET size 47b / 0b from: https://licensing.api.sygic.com/online-maps-service/v1/online-maps

Loading OM version 2.0 from url: https://om.sygic.com/xxxx/

Next, a link from which the online maps are to be downloaded is requested and then obtained.

Loaded maps: [abw,1],[afg,1], ...

A long array of loaded maps is printed afterwards. The "1" means that it's an online map. If an offline map is loaded, the array will contain "0" after the ISO code.

Loaded maps: [svk,0],[wcl,0], ... 

Info

WCL stands for World Cartographic Layer. This is actually a resource map package that is downloaded with the first offline map. The data in this package is what you see on higher zoom levels.

Procedure calls

PROCEDURECALLvirtual RouteID::Handle Sygic::Router::RouteManagerImp::CalculateRouteWithStops(const
std::vector< WaypointPtr > &, const RouteComputeMode::Ptr &)# {
"NSt6__ndk16vectorINS_10shared_ptrIN5Sygic6Router8WaypointEEENS_9allocatorIS5_EEEE":
"Waypoints{[ lon,lat [14.477089,46.034074]][ lon,lat [14.593452,46.141985]]}",
"NSt6__ndk110shared_ptrIN5Sygic6Router16RouteComputeModeEEE": "RoutingMode{1614964829,Fastest,Car,Online,Disabled,
EnableAlternatives:1,MaxSpeed255,ShouldUseSpeedProfile:1,GenerateExtInfo:0}" }

Up here a PROCEDURECALL is logged. It contains several information about the arguments that have been passed into the procedure. For example a route compute has been requested here. You can see what waypoints and options have been passed.

PROCEDURECALLvoid Sygic::Router::RouteManagerImp::OnAlternativeComputeFinished(RouteID::Handle, Routing::IRoute::Ptr)#
{ "NSt6__ndk110shared_ptrIN5Sygic6Router7RouteIDEEE": "RouteInterfaceID{0}", "NSt6__ndk110shared_ptrIN7Routing6IRouteEEE":
"InterfaceRoute{PartCount:1{Waypoints{[lon, lat [1447715,4603412]],[lon, lat [1459344,4614196]]},Car}},25877,1733}" }

And after the compute finishes, you'll see the callbacks printed in the log.

MapView Procedure calls

PROCEDURECALLCreateMapViewCommand# { "view": { "type": "MapView", "id": 2 }, "policy": "AsyncAndFlush", "command":
{ "name": "CreateMapViewCommand", "nativeView": "0x2e26", "skins": [ "day", "default""], customRenderCall: 0 }" }
PROCEDURECALLSetLanguageCommand# { "view": { "type": "MapView", "id": 1 }, "policy": "Async", "command": { "name":
"SetLanguageCommand", "tag": "en-us" } }

For example, these are just some of the PROCEDURECALL message that are shown when creating a MapView.
You will also see the size of the MapView and more information.

Other online requests

HttpResponse(200) GET size 35651b / 35651b from: https://directions.api.sygic.com/v2/api/directions

This is a response that you get after requesting an online compute service. Also, if you suspect that something's wrong, pay attention to the response code.

Download FINISHED(200) of 0b in 354ms: https://om.sygic.com/xxxx//hrv/l2g/0

A lot of these might come up when downloading online maps as they are downloaded in small chunks.

Download FINISHED(200) of 0b in 763ms: https://licensing.api.sygic.com/offline-maps-service/v1/available

This is the request that's made when you request the available offline maps.

Customized error/info messages

Some custom logged messages indicating that something's wrong may be printed.

File /storage/emulated/0/Android/data/your.app.id/files/res/skin/skin_poi_custom.json cannot be opened!
Required file is probably missing!

Failed to extract 9-patch properties. Invalid image format!

There's much more, but we're not going to cover them all. It's just useful to know that the logs are available and may help you locate the problem even before contacting us.