# ProtoLogTool

Code transformation tool and viewer for ProtoLog.

## What does it do?

ProtoLogTool incorporates three different modes of operation:

### Code transformation

Command: `protologtool transform-protolog-calls 
    --protolog-class <protolog class name> 
    --protolog-impl-class <protolog implementation class name>
    --loggroups-class <protolog groups class name>
    --loggroups-jar <config jar path>
    --output-srcjar <output.srcjar>
    [<input.java>]`

In this mode ProtoLogTool transforms every ProtoLog logging call in form of:
```java
ProtoLog.x(ProtoLogGroup.GROUP_NAME, "Format string %d %s", value1, value2);
```
into:
```java
if (ProtoLogImpl.isEnabled(GROUP_NAME)) {
    int protoLogParam0 = value1;
    String protoLogParam1 = String.valueOf(value2);
    ProtoLogImpl.x(ProtoLogGroup.GROUP_NAME, 123456, 0b0100, "Format string %d %s or null", protoLogParam0, protoLogParam1);
}
```
where `ProtoLog`, `ProtoLogImpl` and `ProtoLogGroup` are the classes provided as arguments
 (can be imported, static imported or full path, wildcard imports are not allowed) and, `x` is the
 logging method. The transformation is done on the source level. A hash is generated from the format
 string, log level and log group name and inserted after the `ProtoLogGroup` argument. After the hash
 we insert a bitmask specifying the types of logged parameters. The format string is replaced
 by `null` if `ProtoLogGroup.GROUP_NAME.isLogToLogcat()` returns false. If `ProtoLogGroup.GROUP_NAME.isEnabled()`
 returns false the log statement is removed entirely from the resultant code. The real generated code is inlined
 and a number of new line characters is added as to preserve line numbering in file.

Input is provided as a list of java source file names. Transformed source is saved to a single
source jar file. The ProtoLogGroup class with all dependencies should be provided as a compiled
jar file (config.jar).

### Viewer config generation

Command: `generate-viewer-config
    --protolog-class <protolog class name> 
    --loggroups-class <protolog groups class name>
    --loggroups-jar <config jar path>
    --viewer-conf <viewer.json>
    [<input.java>]`

This command is similar in it's syntax to the previous one, only instead of creating a processed source jar
it writes a viewer configuration file with following schema:
```json
{
  "version": "1.0.0",
  "messages": {
    "123456": {
      "message": "Format string %d %s",
      "level": "ERROR",
      "group": "GROUP_NAME",
      "at": "com\/android\/server\/example\/Class.java"
    }
  },
  "groups": {
    "GROUP_NAME": {
      "tag": "TestLog"
    }
  }
}

```

### Binary log viewing

Command: `read-log --viewer-conf <viewer.json> <wm_log.pb>`

Reads the binary ProtoLog log file and outputs a human-readable LogCat-like text log.

## What is ProtoLog?

ProtoLog is a generic logging system created for the WindowManager project. It allows both binary and text logging
and is tunable in runtime. It consists of 3 different submodules:
* logging system built-in the Android app,
* log viewer for reading binary logs,
* a code processing tool.

ProtoLog is designed to reduce both application size (and by that memory usage) and amount of resources needed
for logging. This is achieved by replacing log message strings with their hashes and only loading to memory/writing
full log messages when necessary.

### Text logging

For text-based logs Android LogCat is used as a backend. Message strings are loaded from a viewer config
located on the device when needed.

### Binary logging

Binary logs are saved as Protocol Buffers file. They can be read using the ProtoLog tool or specialised
viewer like Winscope.

## How to use ProtoLog?

### Adding a new logging group or log statement

To add a new ProtoLogGroup simple create a new enum ProtoLogGroup member with desired parameters.

To add a new logging statement just add a new call to ProtoLog.x where x is a log level.

After doing any changes to logging groups or statements you should build the project and follow instructions printed by the tool.

## How to change settings on device in runtime?
Use the `adb shell su root cmd window logging` command. To get help just type
`adb shell su root cmd window logging help`.




