[
https://issues.apache.org/jira/browse/LOG4J2-3046?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17303844#comment-17303844
]
Ralph Goers edited comment on LOG4J2-3046 at 3/18/21, 4:12 AM:
---------------------------------------------------------------
Using ${application} would require that you set the application name as a
property in your logging configuration. I suspect that isn't what you are after.
Using %X\{application} implies that you have stored a key named application in
the ThreadContext along with its value. From your question I suspect you
haven't done that.
If you look at the documentation for the Json Layout you will see this example.
{code:java}
<JsonLayout>
<KeyValuePair key="additionalField1" value="constant value"/>
<KeyValuePair key="additionalField2" value="$${ctx:key}"/>
</JsonLayout>
{code}
So you want to define a key value pair with a key of "application" and a value
of your application name. That will be sent in the Json message sent to the
server. Then you can parse the JSON into a MapMessage and then extract the
fields you want using the pattern layout.
Jira isn't really meant for these kinds of questions. In the future please ask
on StackOverflow and if you want send an email on the user's list asking us to
take a look at it there.
was (Author: [email protected]):
Using ${application} would require that you set the application name as a
property in your logging configuration. I suspect that isn't what you are after.
Using %X\{application} implies that you have stored a key named application in
the ThreadContext along with its value. From your question I suspect you
haven't done that.
If you look at the documentation for the Json Layout you will see this example.
{code:java}
<JsonLayout>
<KeyValuePair key="additionalField1" value="constant value"/>
<KeyValuePair key="additionalField2" value="$${ctx:key}"/>
</JsonLayout>
{code}
So you want to define a key value pair with a key of "application" and a value
of your application name. That will be sent in the Json message sent to the
server. Then you can parse the JSON into a MapMessage and then extract the
fields you want using the pattern layout.
> Socket Appender: retrieve variables from the client to the socket server
> ------------------------------------------------------------------------
>
> Key: LOG4J2-3046
> URL: https://issues.apache.org/jira/browse/LOG4J2-3046
> Project: Log4j 2
> Issue Type: Question
> Components: Appenders
> Environment: maven
> java 8
> Reporter: Mykola Holovach
> Priority: Major
>
> My listener log4j2.xml configuartion, in the PatternLayout section i'm tried
> %X\{application} and ${application}
> {code:java}
> <Configuration xmlns="http://logging.apache.org/log4j/2.0/config">
> <Appenders>
> <RollingRandomAccessFile name="ERROR_FILE" bufferSize="1024"
> bufferedIO="true" append="true"
> fileName="${LOGS_HOME}/logfinal-error-${HOST_NAME_SHORT}.log"
>
> filePattern="${LOGS_HOME}/logfinal-error-${HOST_NAME_SHORT}.log.%d{yyyy-MM-dd}">
> <ThresholdFilter level="warn" />
> <PatternLayout pattern="%d{DEFAULT} %-5p %t %c %X{application}
> %x - %m%n" />
> <Policies>
> <TimeBasedTriggeringPolicy interval="1"/>
> </Policies>
> </RollingRandomAccessFile> <RollingRandomAccessFile
> name="DEBUG_FILE" bufferSize="32768" bufferedIO="true" append="true"
> fileName="${LOGS_HOME}/logfinal-debug-${HOST_NAME_SHORT}.log"
>
> filePattern="${LOGS_HOME}/logfinal-debug-${HOST_NAME_SHORT}.log.%d{yyyy-MM-dd}">
> <ThresholdFilter level="debug" />
> <PatternLayout pattern="%d{DEFAULT} %-5p %t %c ${application}
> %x - %m%n" />
> <Policies>
> <TimeBasedTriggeringPolicy interval="1"/>
> </Policies>
> </RollingRandomAccessFile> <Async name="ASYNC" bufferSize="64">
> <AppenderRef ref="ERROR_FILE" />
> <AppenderRef ref="DEBUG_FILE" />
> </Async>
> </Appenders> <Loggers>
> <Logger name="ua" level="debug" />
> <Logger name="ua.cetelem.DossierAnalyser" level="info" />
> <Logger name="ua.cetelem.dbaccess.DbAccess" level="info" />
> <Logger name="com.usb" level="debug" />
> <Logger name="jacorb" level="info"/>
> <Logger name="org.owasp" level="trace"/>
> <Root level="info">
> <AppenderRef ref="ASYNC"/>
> </Root>
> </Loggers></Configuration>
> {code}
>
> My client log4j2.xml configuartion, in the <Loggers> section i'm added
> <Property name="application">app_name</Property>
> {code:java}
> <Configuration xmlns="http://logging.apache.org/log4j/2.0/config">
> <Appenders>
> <Socket name="logfinal" host="localhost" port="1101">
> <JSONLayout/>
> </Socket> <RollingFile name="ERROR_FILE"
>
> fileName="build/${sys:LOG4J_APP_NAME:-}-error-${HOST_NAME_SHORT}.log"
>
> filePattern="build/${sys:LOG4J_APP_NAME:-}-error-${HOST_NAME_SHORT}.log.%d{yyyy-MM-dd}">
> <ThresholdFilter level="warn" />
> <PatternLayout
> pattern="%d{DEFAULT} %-5p %t %c %x - %m%n" />
> <Policies>
> <TimeBasedTriggeringPolicy interval="1" />
> </Policies>
> </RollingFile> <RollingFile name="DEBUG_FILE"
>
> fileName="build/${sys:LOG4J_APP_NAME:-}-debug-${env:NAME_SHORT}.log"
>
> filePattern="build/${sys:LOG4J_APP_NAME:-}-debug-${env:NAME_SHORT}.log.%d{yyyy-MM-dd}">
> <ThresholdFilter level="debug" />
> <PatternLayout
> pattern="%d{DEFAULT} %-5p %t %c %x - %m%n" />
> <Policies>
> <TimeBasedTriggeringPolicy interval="1" />
> </Policies>
> </RollingFile>
>
> <Async name="ASYNC" bufferSize="64">
> <AppenderRef ref="ERROR_FILE" />
> <AppenderRef ref="DEBUG_FILE" />
> <AppenderRef ref="logfinal" />
> </Async>
>
> </Appenders> <Loggers>
> <Logger name="org.hibernate.tool.hbm2ddl" level="DEBUG" />
> <Logger name="org.hibernate.SQL" level="INFO" />
> <Logger name="ua.cetelem" level="debug" />
> <Root level="info">
> <Property name="application">app_name</Property>
> <AppenderRef ref="ASYNC" />
> </Root>
> </Loggers>
> </Configuration>
> {code}
> I'm trying to get application name of the client sending each event, but it's
> doesn't work for me, i'm tried different ways, no luck, please help me to
> resolve this problem. Thanks in advance!
>
>
>
--
This message was sent by Atlassian Jira
(v8.3.4#803005)