in action/log/logadapter/local.go [17:71]
func (l *Local) QueryLogs(filter map[string]interface{}, currency *Currency, number int) error {
logLevel, ok := filter["logLevel"].(string)
if !ok {
return fmt.Errorf("logLevel is missing or invalid in the filter")
}
// Build the query URL using the filter and currency information
url := fmt.Sprintf("%s%s?application_id=%s&log_level=%s&limit=%d", currency.Address, LocalQueryPath, currency.Source, logLevel, number)
// Send a GET request to the /query endpoint
resp, err := http.Get(url)
if err != nil {
return fmt.Errorf("failed to make request to %s: %v", url, err)
}
defer func(Body io.ReadCloser) {
err := Body.Close()
if err != nil {
tool.Logger.Error("failed to close response body: %v", err)
}
}(resp.Body)
// Read the response body
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return fmt.Errorf("failed to read response body: %v", err)
}
// Check if the response status is OK (200)
if resp.StatusCode != http.StatusOK {
return fmt.Errorf("received non-200 response status: %d", resp.StatusCode)
}
// Parse the JSON response body into QueryResponse struct
var queryResponse QueryResponse
err = json.Unmarshal(body, &queryResponse)
if err != nil {
return fmt.Errorf("failed to parse JSON response: %v", err)
}
// Print the logs in a structured format
for _, value := range queryResponse.Logs {
res := fmt.Sprintf("[%s]: %s\n", value.Timestamp, value.LogMessage)
fmt.Println(value.LogMessage)
if strings.Contains(value.LogMessage, "INFO") {
tool.Logger.Info(fmt.Sprintf("%v", res))
}
if strings.Contains(value.LogMessage, "ERROR") {
tool.Logger.Error(fmt.Sprintf("%v", res))
}
if strings.Contains(value.LogMessage, "WARN") {
tool.Logger.Warn(fmt.Sprintf("%v", res))
}
}
return nil
}