На основании информации из руководства log4j2 я смог получить имя потока, добавив threadName
к additionalFieldTypes
и используя спецификатор шаблона %t
, например:
<Gelf name="gelf" host="10.13.10.192" port="12201" version="1.1" extractStackTrace="true" filterStackTrace="true"
mdcProfiling="true" includeFullMdc="true" maximumMessageSize="8192" originHost="swarm"
additionalFieldTypes="environment=String,application=String,threadName=String,fbHost=String">
...
<Field name="threadName" pattern="%t" />
Однако, когда я попытался использовать синтаксис, предоставленный на странице, для получения значения переменной среды, например, так:
<Field name="fbHost" pattern="$${env:LB_COOKIE_VALUE}" />
Я не получил значение LB_COOKIE_VALUE
значение среды в GrayLog. Вместо этого я получил буквальную строку - "$ {env: LB_COOKIE_VALUE}". Этот StackOverflow post дал достаточно информации для устранения проблемы. Когда я предоставил значение по умолчанию,
<Field name="fbHost" pattern="$${env:LB_COOKIE_VALUE:-unset_env_LB_COOKIE_VALUE}" />
я получил "unset_env_LB_COOKIE_VALUE" в выводе, указывая, что переменная среды не была установлена. Однако системное свойство Java было установлено, поэтому
<Field name="fbHost" pattern="$${sys:LB_COOKIE_VALUE:-unset_sys_LB_COOKIE_VALUE}" />
предоставило искомое значение.