You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by "Remko Popma (JIRA)" <ji...@apache.org> on 2015/10/18 17:07:05 UTC
[jira] [Updated] (LOG4J2-671) Property using ${date:} is evaluated
multiple times across appenders
[ https://issues.apache.org/jira/browse/LOG4J2-671?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Remko Popma updated LOG4J2-671:
-------------------------------
Description:
At the top of my log4j2.xml config I have the following properties:
{code}
<Properties>
<Property name="log_date">${date:yyyy-MM-dd'T'HHmmssSSS></Property>
<Property name="log_path">log/${log_date}</Property>
</Properties>
{code}
I would like to use the "log_path" property as the root log directory for all my appenders. By including a timestamp in "log_path" I can distinguish between multiple runs of my application. My appenders refer to "log_path" in the following way:
{code}
<RollingRandomAccessFile name="ApplicationLog" append="true"
fileName="${log_path}/application.log"
filePattern="${log_path}/application.log-$${date:yyyy-MM-dd'T'HHmmssSSS}.gz">
..snip..
</RollingRandomAccessFile>
{code}
I have several such appenders, and I'd like them to all refer to the same "log_path" value. Unfortunately, it seems that the property gets re-evaluated for each appender, so I end up with multiple log directories on a given run of my application. Below is an example:
ls -al log/
total 20
drwxr-xr-x 5 rveitch rveitch 4096 Jun 16 14:12 .
drwxrwxr-x 6 rveitch rveitch 4096 Jun 16 13:18 ..
drwxrwxr-x 2 rveitch rveitch 4096 Jun 16 14:12 2014-06-16T141225420
drwxrwxr-x 2 rveitch rveitch 4096 Jun 16 14:12 2014-06-16T141225462
drwxrwxr-x 2 rveitch rveitch 4096 Jun 16 14:12 2014-06-16T141225501
Is there anyway to evaluate a property once, such that the value is frozen for re-use across appenders? Is there an alternative approach to generate a timestamp which I can use as a part of a common log directory path?
was:
At the top of my log4j2.xml config I have the following properties:
<Properties>
<Property name="log_date">${date:yyyy-MM-dd'T'HHmmssSSS}</Property>
<Property name="log_path">log/${log_date}</Property>
</Properties>
I would like to use the "log_path" property as the root log directory for all my appenders. By including a timestamp in "log_path" I can distinguish between multiple runs of my application. My appenders refer to "log_path" in the following way:
<RollingRandomAccessFile name="ApplicationLog" append="true"
fileName="${log_path}/application.log"
filePattern="${log_path}/application.log-$${date:yyyy-MM-dd'T'HHmmssSSS}.gz">
..snip..
</RollingRandomAccessFile>
I have several such appenders, and I'd like them to all refer to the same "log_path" value. Unfortunately, it seems that the property gets re-evaluated for each appender, so I end up with multiple log directories on a given run of my application. Below is an example:
ls -al log/
total 20
drwxr-xr-x 5 rveitch rveitch 4096 Jun 16 14:12 .
drwxrwxr-x 6 rveitch rveitch 4096 Jun 16 13:18 ..
drwxrwxr-x 2 rveitch rveitch 4096 Jun 16 14:12 2014-06-16T141225420
drwxrwxr-x 2 rveitch rveitch 4096 Jun 16 14:12 2014-06-16T141225462
drwxrwxr-x 2 rveitch rveitch 4096 Jun 16 14:12 2014-06-16T141225501
Is there anyway to evaluate a property once, such that the value is frozen for re-use across appenders? Is there an alternative approach to generate a timestamp which I can use as a part of a common log directory path?
> Property using ${date:} is evaluated multiple times across appenders
> --------------------------------------------------------------------
>
> Key: LOG4J2-671
> URL: https://issues.apache.org/jira/browse/LOG4J2-671
> Project: Log4j 2
> Issue Type: Bug
> Components: Configurators
> Affects Versions: 2.0-rc1
> Environment: OS: Ubuntu 12.04
> Reporter: Robert Veitch
>
> At the top of my log4j2.xml config I have the following properties:
> {code}
> <Properties>
> <Property name="log_date">${date:yyyy-MM-dd'T'HHmmssSSS></Property>
> <Property name="log_path">log/${log_date}</Property>
> </Properties>
> {code}
> I would like to use the "log_path" property as the root log directory for all my appenders. By including a timestamp in "log_path" I can distinguish between multiple runs of my application. My appenders refer to "log_path" in the following way:
> {code}
> <RollingRandomAccessFile name="ApplicationLog" append="true"
> fileName="${log_path}/application.log"
> filePattern="${log_path}/application.log-$${date:yyyy-MM-dd'T'HHmmssSSS}.gz">
> ..snip..
> </RollingRandomAccessFile>
> {code}
> I have several such appenders, and I'd like them to all refer to the same "log_path" value. Unfortunately, it seems that the property gets re-evaluated for each appender, so I end up with multiple log directories on a given run of my application. Below is an example:
> ls -al log/
> total 20
> drwxr-xr-x 5 rveitch rveitch 4096 Jun 16 14:12 .
> drwxrwxr-x 6 rveitch rveitch 4096 Jun 16 13:18 ..
> drwxrwxr-x 2 rveitch rveitch 4096 Jun 16 14:12 2014-06-16T141225420
> drwxrwxr-x 2 rveitch rveitch 4096 Jun 16 14:12 2014-06-16T141225462
> drwxrwxr-x 2 rveitch rveitch 4096 Jun 16 14:12 2014-06-16T141225501
> Is there anyway to evaluate a property once, such that the value is frozen for re-use across appenders? Is there an alternative approach to generate a timestamp which I can use as a part of a common log directory path?
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org