Ana içeriğe geç

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.

compile (
        [group: 'tr.com.havelsan.framework.bpmn', name: 'hvl-bpmn-log-provider']
)
  • 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.