You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@logging.apache.org by "Ralph Goers (Jira)" <ji...@apache.org> on 2021/03/18 04:13:00 UTC

[jira] [Comment Edited] (LOG4J2-3046) Socket Appender: retrieve variables from the client to the socket server

    [ 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: ralph.goers@dslextreme.com):
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)