### Example URLs for Tjahzi Connection Source: https://github.com/tkowalcz/tjahzi/blob/master/reload4j-appender/README.md Demonstrates various valid URL formats for configuring Tjahzi connections, including different protocols, ports, and paths. ```xml ``` ```xml ``` ```xml ``` ```xml ``` -------------------------------- ### Advanced Logback Configuration with Loki Appender Source: https://github.com/tkowalcz/tjahzi/blob/master/logback-appender/README.md This example demonstrates an advanced configuration for the Loki appender, including custom headers, metadata, and log level labels. ```xml ${loki.host} ${loki.port} %-4relative [%thread] %-5level %logger{35} - %msg%n
X-Org-Id Codewise
environment production log_level
``` -------------------------------- ### Setup Standard Monitoring for Log4j2 Source: https://context7.com/tkowalcz/tjahzi/llms.txt Configures Log4j2's Loki appender to use a standard monitoring module for tracking metrics like dropped puts and sent requests. Access metrics programmatically after setup. ```java import com.codahale.metrics.MetricRegistry; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.LoggerContext; import pl.tkowalcz.tjahzi.log4j2.LokiAppender; import pl.tkowalcz.tjahzi.stats.DropwizardMonitoringModule; import pl.tkowalcz.tjahzi.stats.StandardMonitoringModule; public class TjahziMonitoring { public static void setupStandardMonitoring() { // Get the Loki appender from Log4j2 LoggerContext context = (LoggerContext) LogManager.getContext(false); LokiAppender loki = context.getConfiguration().getAppender("Loki"); // Use standard monitoring module StandardMonitoringModule monitoringModule = new StandardMonitoringModule(); loki.setMonitoringModule(monitoringModule); // Access metrics programmatically System.out.println("Dropped puts: " + monitoringModule.getDroppedPuts()); System.out.println("Sent requests: " + monitoringModule.getSentHttpRequests()); System.out.println("Failed requests: " + monitoringModule.getFailedHttpRequests()); } public static void setupDropwizardMonitoring(MetricRegistry metricRegistry) { LoggerContext context = (LoggerContext) LogManager.getContext(false); LokiAppender loki = context.getConfiguration().getAppender("Loki"); // Integrate with Dropwizard metrics loki.setMonitoringModule( new DropwizardMonitoringModule(metricRegistry, "appender.loki") ); // Metrics available: // - appender.loki.droppedPuts (counter) // - appender.loki.sentHttpRequests (counter) // - appender.loki.sentBytes (meter) // - appender.loki.failedHttpRequests (counter) // - appender.loki.retriedHttpRequests (counter) // - appender.loki.httpResponses (counter) // - appender.loki.responseTimes (timer) // - appender.loki.agentErrors (counter) } } ``` -------------------------------- ### Java Example Using MDC with Log4j2 Source: https://context7.com/tkowalcz/tjahzi/llms.txt Demonstrates how to use Log4j2's ThreadContext to add contextual information (like request and user IDs) to logs, which Tjahzi can then use as labels. ```java // Using MDC with Log4j2 import org.apache.logging.log4j.ThreadContext; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class MDCExample { private static final Logger logger = LogManager.getLogger(MDCExample.class); public void handleRequest(String requestId, String userId) { // Set MDC values - these will appear as labels in Loki ThreadContext.put("request_id", requestId); ThreadContext.put("user_id", userId); ThreadContext.put("trace_id", generateTraceId()); try { logger.info("Processing request"); // ... business logic logger.info("Request completed successfully"); } finally { ThreadContext.clearAll(); } } } ``` -------------------------------- ### Tjahzi Logback Appender Configuration with MDC Source: https://github.com/tkowalcz/tjahzi/blob/master/logback-appender/README.md Example Logback configuration for TjahziAppender, demonstrating variable substitution for host/port and MDC support for dynamic labels like trace_id and span_id. ```xml ${loki.host} ${loki.port} %-4relative [%thread] %-5level %logger{35} - %msg%n trace_id span_id ``` -------------------------------- ### Configure LokiAppender with Custom Truststore (Host/Port) Source: https://github.com/tkowalcz/tjahzi/blob/master/logback-appender/README.md Example of configuring the LokiAppender with a custom truststore for HTTPS connections using host and port. Specify truststore path, password, and type. ```xml logs.example.internal 8443 true /path/to/ca-or-truststore.p12 changeit PKCS12 ``` -------------------------------- ### Configure Loki Host, Port, and Log Endpoint Source: https://github.com/tkowalcz/tjahzi/blob/master/log4j2-appender/README.md Set connection details and override the default log endpoint, useful for reverse proxy setups. ```xml example.com 3100 /monitoring/loki/api/v1/push ``` -------------------------------- ### Set StandardMonitoringModule for Log4j Source: https://github.com/tkowalcz/tjahzi/wiki/Monitoring Installs a StandardMonitoringModule to track events in available counters. This is a simple implementation for basic monitoring. ```java StandardMonitoringModule monitoringModule = new StandardMonitoringModule() loki.setMonitoringModule(monitoringModule) ``` -------------------------------- ### Setup Dropwizard Monitoring for Logback Source: https://context7.com/tkowalcz/tjahzi/llms.txt Integrates Logback's Loki appender with Dropwizard metrics, using a helper method to find the appender. Metrics are registered under a specified name prefix. ```java import ch.qos.logback.classic.LoggerContext; import com.codahale.metrics.MetricRegistry; import org.slf4j.LoggerFactory; import pl.tkowalcz.tjahzi.logback.LokiAppender; import pl.tkowalcz.tjahzi.stats.DropwizardMonitoringModule; import java.util.Spliterators; import java.util.stream.StreamSupport; public class LogbackMonitoring { public static LokiAppender getLokiAppender() { LoggerContext context = (LoggerContext)LoggerFactory.getILoggerFactory(); return (LokiAppender) context.getLoggerList() .stream() .flatMap(logger -> StreamSupport.stream( Spliterators.spliteratorUnknownSize(logger.iteratorForAppenders(), 0), false )) .filter(appender -> appender instanceof LokiAppender) .findAny() .orElseThrow(() -> new RuntimeException("Loki appender not found")); } public static void setupDropwizardMonitoring(MetricRegistry metricRegistry) { LokiAppender loki = getLokiAppender(); loki.setMonitoringModule( new DropwizardMonitoringModule(metricRegistry, "logback.loki") ); } } ``` -------------------------------- ### Configure LokiAppender with Custom Truststore (URL) Source: https://github.com/tkowalcz/tjahzi/blob/master/logback-appender/README.md Example of configuring the LokiAppender with a custom truststore for HTTPS connections using a URL. Truststore details can be provided via properties. ```xml https://logs.example.internal:8443/monitoring/loki/api/v1/push ${loki.truststore.path} ${loki.truststore.password} ${loki.truststore.type} ``` -------------------------------- ### Valid Loki Connection URLs Source: https://github.com/tkowalcz/tjahzi/blob/master/log4j2-appender/README.md Examples of correctly formatted URLs for Tjahzi to connect to Loki, demonstrating various combinations of protocol, host, port, and path. ```xml http://example.com ``` ```xml https://example.com:56654 ``` ```xml http://example.com/monitoring/loki/api/v1/push ``` ```xml https://example.com:3100/monitoring/foo/bar ``` -------------------------------- ### Advanced Log4j2 Configuration with Loki Appender Source: https://github.com/tkowalcz/tjahzi/blob/master/log4j2-appender/README.md An advanced configuration example for the root logger with a Loki appender, including buffer size, custom headers, metadata, and log level labels. Ensure the 'packages' attribute is set. ```xml ${sys:loki.host} ${sys:loki.port} %X{tid} [%t] %d{MM-dd HH:mm:ss.SSS} %5p %c{1} - %m%n%exception{full}