4.11. Süreç Adımlarını Loglama#
BPMN uygulaması, Logger uygulaması ile entegre çalışarak istenilen süreç adımlarının loglanmasını sağlar. Başlatılan süreç oluşumları için tarihçe kaydı tutulması gibi bir ihtiyaç olması durumunda kullanılacak yapıdır.
Loglama yapısının çalışma mimarisi için dokümanı inceleyebilirsiniz.
Mimaride de görldüğü gibi; bu yapının kullanılabilmesi için aşağıdaki servisler ayaklandırılmalıdır;
Logların işlenebilmesi için; Hvl Logger Processor Bpmn Server, Elasticsearch, Fluentd, Kafka
Logların sorgulanabilmesi için; Hvl Logger Instances -> LogSearch
Loglar ilk olarak veritabanında "log_producer_task" tablosuna yazılır. Ardından "Hvl Logger Processor Bpmn Server" uygulaması tarafından Kafka'ya aktarılır ve aktarılan kayıtlar veritabanından temizlenir. Son olarak Fluentd Kafka'dan okur, Elasticsearch'e yazar.
Kullanım adımları şu şekildedir:
-
BPMN_LOG_ENABLED parametresi true olmalıdır.
-
LOGGER_PRODUCER_ENABLED parametresi true olmalıdır.
-
Aşağıda görüldüğü şekilde
HvlBpmnLogProvider
paketi, dependency olarak eklenmelidir.
- Ardından aşağıda görüldüğü gibi; loglanması istenen süreç adımının çalıştığı aşamada log metodu çağırılır.
import tr.com.havelsan.javarch.bpmn.log.producer.service.HvlBpmnLogProviderService;
...
private final HvlBpmnLogProviderService bpmnLogProducerProvider;
...
final HvlBpmnProcessInstanceModel processInstance =
runtimeService.startProcessInstanceByKey("process_key", startProcessInstanceModel);
final String processInstanceId = processInstance.getProcessInstanceId();
final HvlBpmnExecutionVariableQueryModel variableQueryModel = new HvlBpmnExecutionVariableQueryModel();
variableQueryModel.setExecutionId(processInstanceId);
variableQueryModel.setVariableName("process_payload");
final Map<String, Object> payload = runtimeService.getVariable(variableQueryModel, Map.class);
payload.put("process_instance_id", processInstanceId);
runtimeService.setVariable(processInstanceId, "process_payload", payload, false);
bpmnLogProducerProvider.log(HvlBpmnLogModelBuilder.create(businessKey,
processInstanceId,
"message",
HvlBpmnLogLevel.INFO).build());
Önemli Not
Örnekte süreç başlatma adımında (startProcessInstanceByKey
) loglama yapılmıştır. İhtiyaca göre complete metodunun (süreç adımı ilerletme) ardından da aynı şekilde log metodu çağırılabilir.