This repo contains examples of filters (writers and formatters) and their builders for the ABL Logging component, in support of the ABL Logging: From Files to Cloud, with No Code Changes talk first given at the 2019 SA PUG. The slides are also available in this repo.
The main folders are
| Folder | Contents |
|---|---|
| bin/ | Contains r-code built form the ABL source |
| src/ | Contains the ABL sources for filters, builders, test code and the logging.config configurations |
This code can run on any AVM, as of OpenEdge 11.6.0 (due to the use of enum types).
For the translation and elastic search filters, make sure that $DLC/tty/netlib/OpenEdge.Net.pl is on PROPATH.
To use the filter(s), update the configuration file as per the filter. The checked-in configuration file has examples of all the filters in it.
Run the test procedure, src/logging_with_filters.p. The /src folder is really all that needs to be on PROPATH.
The session demos 3 filters.
This format filter reverses the order of the log message's words.
| Component type | Class name |
|---|---|
| Filter | Example.Filters.ReverseWordsFormat |
| Builder |
Add a REVERSED_WORDS_FILTER to the filter property
"filter": {
"REVERSED_WORDS_FILTER": "Example.Filters.ReverseWordsFormat"
}
To use, add a reference into individual loggers' filters array.
"filters": [
<filter-1>,
"REVERSED_WORDS_FILTER",
<filter-n>
]
This format filter uses Microsoft Azure's Translation API to translate log messages to a specified language. Doc at (https://docs.microsoft.com/en-us/azure/cognitive-services/Translator/quickstart-csharp-translate). You'll need an account to use this service; free tiers are available.
| Component type | Class name |
|---|---|
| Filter | Example.Filters.TranslatedMessageFormat |
| Builder | Example.Builders.TranslatedMessageFormatBuilder |
Add a TRANSLATION_FILTER to the filter property
"filter": {
"TRANSLATION_FILTER": {
"type": "Example.Filters.TranslatedMessageFormat",
"builder": "Example.Builders.TranslatedMessageFormatBuilder"
}
To use, add a reference into individual loggers' filters array
"filters": [
<filter-1>,
{
"name": "TRANSLATION_FILTER",
"toLang": "af",
"serviceURI": "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0",
"apiKey": "<your-api-key-here>"
},
<filter-n>
]
This writer filter writes log messages to a (local) Elastic Search instance. Elastic Search (and other ELK-stack products) can be downloaded and installed from (https://www.elastic.co/start) .
| Component type | Class name |
|---|---|
| Filter | Example.Filters.ElasticSearchWriter |
| Builder | Example.Builders.ElasticSearchWriterBuilder |
Add ELASTIC_SEARCH_FILTER to the filter property
"filter": {
"ELASTIC_SEARCH_WRITER": {
"type": "Example.Filters.ElasticSearchWriter",
"builder": "Example.Builders.ElasticSearchWriterBuilder"
}
To use, add a reference into individual loggers' filters array
"filters": [
<filter-1>,
{
"name": "ELASTIC_SEARCH_WRITER",
"serviceURI": "http://localhost:9200/",
"indexName": "<an-index-name>"
}
<filter-n>
]