RollingFileAppender not working consistently

classic Classic list List threaded Threaded
16 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

RollingFileAppender not working consistently

Robinson, Brian L. (Mission Systems)
I have a project in several environments (development, integration test,
system test, ect.) and I'm using the RollingFileAppender.  Unfortunately
it is not working consistently across the environments.   In some of the
environments only a single log file is created and it grows very large.
I've attached my log4j.properties file (with some names being changed to
protect the identity of employer and project).  The log levels are
slightly different in the different environments and the location of the
log file changes from d: to c: for some environments (I know the
environments should all be the same - talk to my bosses).

The application is a web application and is multi-threaded with at least
one thread that in some cases will run separately for 10 to 20 minutes
generating large amounts of log messages.

Has anyone had trouble with RollingFileAppender using only one large log
file?



# This file is copied to the WEB-INF/classes directory.
# For JBoss: Avoid to setup Log4J outside
$JBOSS_HOME/server/default/deploy/log4j.xml!
# For all other servers: Comment out the Log4J listener in web.xml to
activate Log4J.
log4j.rootLogger=INFO, stdout, logfile


log4j.category.com.lpcs=INFO
log4j.category.org.springframework=INFO
log4j.category.com.lpcs.ethelross.flower.service.external=INFO
log4j.category.com.lpcs.ethelross.scheduledjobs.notifications=DEBUG
log4j.category.com.lpcs.ethelross.flower.dao=INFO
log4j.category.com.lpcs.ethelross.flower.service=DEBUG
log4j.category.com.lpcs.ethelross.flower.web=INFO
log4j.category.com.lpcs.ethelross.flower.service.external.FlowerExternal
AdapterFLAMWebService=INFO
log4j.category.com.lpcs.ethelross.flower.service.external.FlowerExternal
FacadeFLAMService=INFO
#log4j.category.com.lpcs.ethelross.flower.security.filter=DEBUG
#log4j.category.com.lpcs.ethelross.flower.service.external.FlowerExterna
lAdapterMOTHRAWWebService=DEBUG
log4j.category.com.lpcs.ethelross.flower.service.external.FlowerExternal
FacadeMOTHRAWService=INFO
#log4j.category.com.lpcs.ethelross.flower.service.external=DEBUG

log4j.category.com.lpcs.ethelross.scheduledjobs.notifications.NotifyUser
sJob=INFO

log4j.category.com.lpcs.ethelross.flower.dao.RoleManagementListQueryBuil
der=DEBUG

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c{1}] - <%m>%n
log4j.appender.stdout.BufferSize=1KB
log4j.appender.stdout.BufferedIO=true

log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=d:/opt/logs/flower.log
log4j.appender.logfile.MaxFileSize=512KB
log4j.appender.logfile.BufferSize=1KB
#log4j.appender.logfile.BufferedIO=true

# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=10
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c{1}] - %m%n

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: RollingFileAppender not working consistently

carnold-3
You did not mention your platform, but I believe that behavior has been observed on Windows platforms when the file is open by another process which will result in any attempt to rename the file to fail.  Since renaming never takes place, the file can never successfully roll.
---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

RE: RollingFileAppender not working consistently

DOUTCH GARETH-GDO003
In reply to this post by Robinson, Brian L. (Mission Systems)
Yes. It happens to me (on Windows). I have several machines running my
application and occasionally I will get a very large log file with
RollingFileAppender.


-----Original Message-----
From: Robinson, Brian L (IS) [mailto:[hidden email]]
Sent: 30 March 2010 20:25
To: [hidden email]
Subject: RollingFileAppender not working consistently

I have a project in several environments (development, integration test,
system test, ect.) and I'm using the RollingFileAppender.  Unfortunately
it is not working consistently across the environments.   In some of the
environments only a single log file is created and it grows very large.
I've attached my log4j.properties file (with some names being changed to
protect the identity of employer and project).  The log levels are
slightly different in the different environments and the location of the
log file changes from d: to c: for some environments (I know the
environments should all be the same - talk to my bosses).

The application is a web application and is multi-threaded with at least
one thread that in some cases will run separately for 10 to 20 minutes
generating large amounts of log messages.

Has anyone had trouble with RollingFileAppender using only one large log
file?



# This file is copied to the WEB-INF/classes directory.
# For JBoss: Avoid to setup Log4J outside
$JBOSS_HOME/server/default/deploy/log4j.xml!
# For all other servers: Comment out the Log4J listener in web.xml to
activate Log4J.
log4j.rootLogger=INFO, stdout, logfile


log4j.category.com.lpcs=INFO
log4j.category.org.springframework=INFO
log4j.category.com.lpcs.ethelross.flower.service.external=INFO
log4j.category.com.lpcs.ethelross.scheduledjobs.notifications=DEBUG
log4j.category.com.lpcs.ethelross.flower.dao=INFO
log4j.category.com.lpcs.ethelross.flower.service=DEBUG
log4j.category.com.lpcs.ethelross.flower.web=INFO
log4j.category.com.lpcs.ethelross.flower.service.external.FlowerExternal
AdapterFLAMWebService=INFO
log4j.category.com.lpcs.ethelross.flower.service.external.FlowerExternal
FacadeFLAMService=INFO
#log4j.category.com.lpcs.ethelross.flower.security.filter=DEBUG
#log4j.category.com.lpcs.ethelross.flower.service.external.FlowerExterna
lAdapterMOTHRAWWebService=DEBUG
log4j.category.com.lpcs.ethelross.flower.service.external.FlowerExternal
FacadeMOTHRAWService=INFO
#log4j.category.com.lpcs.ethelross.flower.service.external=DEBUG

log4j.category.com.lpcs.ethelross.scheduledjobs.notifications.NotifyUser
sJob=INFO

log4j.category.com.lpcs.ethelross.flower.dao.RoleManagementListQueryBuil
der=DEBUG

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c{1}] - <%m>%n
log4j.appender.stdout.BufferSize=1KB
log4j.appender.stdout.BufferedIO=true

log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=d:/opt/logs/flower.log
log4j.appender.logfile.MaxFileSize=512KB
log4j.appender.logfile.BufferSize=1KB
#log4j.appender.logfile.BufferedIO=true

# Keep three backup files.
log4j.appender.logfile.MaxBackupIndex=10
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c{1}] - %m%n


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

RE: RollingFileAppender not working consistently

Robinson, Brian L. (Mission Systems)
In reply to this post by carnold-3
Thanks.

Would this also apply to a situation where another thread within the
same process is writing to the file?  I'm pretty sure we don't have any
other processes looking at any of the files, but the program is
multithreaded and there is a thread that sometimes runs long (5 or 10
minutes) a while writing a lot of data to the log file.

If that is the case, any thoughts on how I might work around it?

-----Original Message-----
From: Curt Arnold [mailto:[hidden email]] On Behalf Of Curt Arnold
Sent: Wednesday, March 31, 2010 1:14 AM
To: Log4J Users List
Subject: Re: RollingFileAppender not working consistently

You did not mention your platform, but I believe that behavior has been
observed on Windows platforms when the file is open by another process
which will result in any attempt to rename the file to fail.  Since
renaming never takes place, the file can never successfully roll.
---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]


---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

RE: RollingFileAppender not working consistently

Mohan.Radhakrishnan
We see the same problem. Sometimes several successive attempts to rename fail.

Actually we also have multithreaded application and we think that one of the threads could be writing when the file is being renamed.

We are thinking of using the DailyRollingAppender. Is that an alternative ?
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

RE: RollingFileAppender not working consistently

Mohan.Radhakrishnan
Don't mean to hijack this thread.

We have a pressing need to move to DailyRollingFileAppender due to the same problems mentioned in this thread.

Since midnight is not suitable due to heavy logging we want to use DailyRollingFileAppender at midday or some other time. Is that possible ?

I refer http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/DailyRollingFileAppender.html
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

RE: RollingFileAppender not working consistently

Mohan.Radhakrishnan
I have looked at the source here and I have a question.


Since the log4j extras has other methods of rolling over that are time based I thought if we schedule the rename for a lean period when there is not much log file updates then there would be no problem. Am I on the right track ?

What about appenders that don't roll over but create a file the first time with a timestamp ? Does this solve the roll over issue ?

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: RollingFileAppender not working consistently

Maarten Bosteels
On Fri, Apr 9, 2010 at 7:15 AM, Mohan.Radhakrishnan <[hidden email]>wrote:

>
> I have looked at the source here and I have a question.
>
>
> Since the log4j extras has other methods of rolling over that are time
> based
> I thought if we schedule the rename for a lean period when there is not
> much
> log file updates then there would be no problem. Am I on the right track ?
>
> What about appenders that don't roll over but create a file the first time
> with a timestamp ? Does this solve the roll over issue ?
>
>
yes.
That's what we do. Our appender's decision to roll is based on fileSize, the
name of the file is based on timestamp. No renaming needed.

Maarten


>
> --
> View this message in context:
> http://old.nabble.com/RollingFileAppender-not-working-consistently-tp28087307p28187724.html
> Sent from the Log4j - Users mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

RE: RollingFileAppender not working consistently

Robinson, Brian L. (Mission Systems)
That sounds like it could work.

Is there an existing appender that does that or did you write your own?  Did it require modifying the log4j source code or were you able to extend using the existing binaries?

-----Original Message-----
From: Maarten Bosteels [mailto:[hidden email]]
Sent: Saturday, April 10, 2010 7:01 AM
To: Log4J Users List
Subject: Re: RollingFileAppender not working consistently

On Fri, Apr 9, 2010 at 7:15 AM, Mohan.Radhakrishnan <[hidden email]>wrote:

>
> I have looked at the source here and I have a question.
>
>
> Since the log4j extras has other methods of rolling over that are time
> based
> I thought if we schedule the rename for a lean period when there is not
> much
> log file updates then there would be no problem. Am I on the right track ?
>
> What about appenders that don't roll over but create a file the first time
> with a timestamp ? Does this solve the roll over issue ?
>
>
yes.
That's what we do. Our appender's decision to roll is based on fileSize, the
name of the file is based on timestamp. No renaming needed.

Maarten


>
> --
> View this message in context:
> http://old.nabble.com/RollingFileAppender-not-working-consistently-tp28087307p28187724.html
> Sent from the Log4j - Users mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

RE: RollingFileAppender not working consistently

Mohan.Radhakrishnan
TimeBasedRollingPolicy seems to be the solution. Correct me if I am wrong.

Extract from the doc.

During November 23rd, 2004, logging output will go to
 *       the file <code>/wombat/foo.2004-11-23</code>. At midnight and for
 *       the rest of the 24th, logging output will be directed to
 *       <code>/wombat/foo.2004-11-24
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

RE: RollingFileAppender not working consistently

Mohan.Radhakrishnan
This seems to be working now. There is no need for renaming a file unless I am missing something !

I get one timestamped file for a day.

Now the next step could to combine with a SizeBasedTriggeringPolicy


Mohan.Radhakrishnan wrote
TimeBasedRollingPolicy seems to be the solution. Correct me if I am wrong.

Extract from the doc.

During November 23rd, 2004, logging output will go to
 *       the file <code>/wombat/foo.2004-11-23</code>. At midnight and for
 *       the rest of the 24th, logging output will be directed to
 *       <code>/wombat/foo.2004-11-24
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

RE: RollingFileAppender not working consistently

Mohan.Radhakrishnan
1. I had to copy the newer DTD from the Apache extras JAR to the log4j JAR. 'rollingPolicy' was not recognized by the older DTD. Is this right ?

2. Put both JARS in the classpath.

This warning is shown though.

log4j:WARN Continuable parsing error 182 and column 23
log4j:WARN The content of element type "log4j:configuration" must match "(renderer*,appender*,plugin*,(category|logger)*,root?,(categoryFactory|loggerFactory)?)".
Activating options
Activating options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: RollingFileAppender not working consistently

carnold-3

On Apr 13, 2010, at 2:25 AM, Mohan.Radhakrishnan wrote:

>
> 1. I had to copy the newer DTD from the Apache extras JAR to the log4j JAR.
> 'rollingPolicy' was not recognized by the older DTD. Is this right ?

rollingPolicy is in the DTD in log4j 1.2.16 which can be downloaded from http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.16/apache-log4j-1.2.16.tar.gz (doesn't work with Safari as it does not respect the content type of text/html and thinks it is the tarball itself and not an HTML page describing mirrors).  http://logging.apache.org/log4j/1.2/download.html should be updated shortly.

>
> 2. Put both JARS in the classpath.
>
> This warning is shown though.
>
> log4j:WARN Continuable parsing error 182 and column 23
> log4j:WARN The content of element type "log4j:configuration" must match
> "(renderer*,appender*,plugin*,(category|logger)*,root?,(categoryFactory|loggerFactory)?)".

log4j.dtd specifies a specific order for the children of log4j:configuration however log4j is more permissive.  This warning indicates that configuration doesn't list appenders first, loggers next and then the root logger.
---------------------------------------------------------------------
To unsubscribe, e-mail: [hidden email]
For additional commands, e-mail: [hidden email]

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: RollingFileAppender not working consistently

Maarten Bosteels
Just re-checked our code, and it wasn't exactly behaving as described above.

I said "no renaming necessary" but our log-files are renamed exactly once:
a timestamp is added to the filename when rolling over.

The advantage is that the name of the 'current' log-file is predictable, so
you can do "tail -F  mylogfile.log"

We created these two classes:

===================================
import org.apache.log4j.rolling.RollingPolicy;
import org.apache.log4j.rolling.RolloverDescription;
import org.apache.log4j.rolling.TimeBasedRollingPolicy;

/**
 * Same as org.apache.log4j.rolling.TimeBasedRollingPolicy but acts only as
 * RollingPolicy and NOT as TriggeringPolicy.
 *
 * This allows us to combine this class with a size-based triggering policy
 * (decision to roll based on size, name of rolled files based on time)
 *
 */
public class MyTimeBasedRollingPolicy implements RollingPolicy {

  TimeBasedRollingPolicy timeBasedRollingPolicy = new
TimeBasedRollingPolicy();

  /**
   * Set file name pattern.
   * @param fnp file name pattern.
   */
  public void setFileNamePattern(String fnp) {
    timeBasedRollingPolicy.setFileNamePattern(fnp);
  }

  /**
   * Get file name pattern.
   * @return file name pattern.
   */
  public String getFileNamePattern() {
    return timeBasedRollingPolicy.getFileNamePattern();
  }

  public RolloverDescription initialize(String file, boolean append) throws
SecurityException {
    return timeBasedRollingPolicy.initialize(file, append);
  }

  public RolloverDescription rollover(String activeFile) throws
SecurityException {
    return timeBasedRollingPolicy.rollover(activeFile);
  }

  public void activateOptions() {
    timeBasedRollingPolicy.activateOptions();
  }

}
===================================

import org.apache.log4j.helpers.OptionConverter;
import org.apache.log4j.Appender;
import org.apache.log4j.rolling.TriggeringPolicy;
import org.apache.log4j.spi.LoggingEvent;
import org.apache.log4j.spi.OptionHandler;

/**
 * Copy of org.apache.log4j.rolling.SizeBasedTriggeringPolicy
 * but able to accept a human-friendly value for maximumFileSize, eg. "10MB"
 *
 * Note that sub-classing SizeBasedTriggeringPolicy is not possible because
that class is final
 */
public class MySizeBasedTriggeringPolicy implements TriggeringPolicy,
OptionHandler {

  /**
   * Rollover threshold size in bytes.
   */
  private long maximumFileSize = 10 * 1024 * 1024; // let 10 MB the default
max size

  /**
     Set the maximum size that the output file is allowed to reach
     before being rolled over to backup files.

     <p>In configuration files, the <b>MaxFileSize</b> option takes an
     long integer in the range 0 - 2^63. You can specify the value
     with the suffixes "KB", "MB" or "GB" so that the integer is
     interpreted being expressed respectively in kilobytes, megabytes
     or gigabytes. For example, the value "10KB" will be interpreted
     as 10240.
   * @param value the maximum size that the output file is allowed to reach
   */
  public void setMaxFileSize(String value) {
    maximumFileSize = OptionConverter.toFileSize(value, maximumFileSize +
1);
  }

  public long getMaximumFileSize() {
    return maximumFileSize;
  }

  public void setMaximumFileSize(long maximumFileSize) {
    this.maximumFileSize = maximumFileSize;
  }

  public void activateOptions() {
  }

  public boolean isTriggeringEvent(Appender appender, LoggingEvent event,
String filename,  long fileLength) {
    return  (fileLength >= maximumFileSize);
  }

}

===================================
And use it like this:

  <appender class="org.apache.log4j.rolling.RollingFileAppender"
name="RollingFileAppender">
    <param name="File" value="/home/app/log/mylogfile.log"/>
    <param name="Append" value="true"/>
    <rollingPolicy class="some.package.log4j.MyTimeBasedRollingPolicy">
      <param name="FileNamePattern"
value="/home/app/log/mylogfile-%d{yyyy-MM-dd-HH_mm_ss}.log"/>
    </rollingPolicy>
    <triggeringPolicy
class="some.package.log4j.MySizeBasedTriggeringPolicy">
      <param name="MaxFileSize" value="6MB"/>
    </triggeringPolicy>
    <layout class="org.apache.log4j.PatternLayout">
      <param name="ConversionPattern" value="%d [%t] %30X{ip} %8X{agent}
%-5p %50.50c - %m%n"/>
    </layout>
  </appender>



Maarten

On Tue, Apr 13, 2010 at 2:45 PM, Curt Arnold <[hidden email]> wrote:

>
> On Apr 13, 2010, at 2:25 AM, Mohan.Radhakrishnan wrote:
>
> >
> > 1. I had to copy the newer DTD from the Apache extras JAR to the log4j
> JAR.
> > 'rollingPolicy' was not recognized by the older DTD. Is this right ?
>
> rollingPolicy is in the DTD in log4j 1.2.16 which can be downloaded from
> http://www.apache.org/dyn/closer.cgi/logging/log4j/1.2.16/apache-log4j-1.2.16.tar.gz(doesn't work with Safari as it does not respect the content type of
> text/html and thinks it is the tarball itself and not an HTML page
> describing mirrors).  http://logging.apache.org/log4j/1.2/download.htmlshould be updated shortly.
>
> >
> > 2. Put both JARS in the classpath.
> >
> > This warning is shown though.
> >
> > log4j:WARN Continuable parsing error 182 and column 23
> > log4j:WARN The content of element type "log4j:configuration" must match
> >
> "(renderer*,appender*,plugin*,(category|logger)*,root?,(categoryFactory|loggerFactory)?)".
>
> log4j.dtd specifies a specific order for the children of
> log4j:configuration however log4j is more permissive.  This warning
> indicates that configuration doesn't list appenders first, loggers next and
> then the root logger.
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: RollingFileAppender not working consistently

AlexD
In reply to this post by Robinson, Brian L. (Mission Systems)
I'm using log4j-extras
<dependency>
  <groupId>log4j</groupId>
  <artifactId>apache-log4j-extras</artifactId>
  <version>${log4j.version}</version>
</dependency>

and following configuration

log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=C:/logs/app.log
log4j.appender.file.Append=true
log4j.appender.file.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.file.RollingPolicy.FileNamePattern=C:/logs/app-%d{yyyy-MM-dd-HH_mm_ss}.log

log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

on my Windows machine.
Expectation is to see new file created every second, but it doesnt. All logs appended to app.log initially created.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: RollingFileAppender not working consistently

Ralph Goers
Please see https://blogs.apache.org/foundation/entry/apache_logging_services_project_announces <https://blogs.apache.org/foundation/entry/apache_logging_services_project_announces>. We recommend you upgrade to Log4j 2. Log4j 1 has not been supported for years.

Ralph

> On May 25, 2017, at 9:55 AM, AlexD <[hidden email]> wrote:
>
> I'm using log4j-extras
> <dependency>
>  <groupId>log4j</groupId>
>  <artifactId>apache-log4j-extras</artifactId>
>  <version>${log4j.version}</version>
> </dependency>
>
> and following configuration
>
> log4j.appender.file=org.apache.log4j.RollingFileAppender
> log4j.appender.file.File=C:/logs/app.log
> log4j.appender.file.Append=true
> log4j.appender.file.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
> log4j.appender.file.RollingPolicy.FileNamePattern=C:/logs/app-%d{yyyy-MM-dd-HH_mm_ss}.log
>
> log4j.appender.file.layout=org.apache.log4j.PatternLayout
> log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p
> %c{1}:%L - %m%n
>
> on my Windows machine.
> Expectation is to see new file created every second, but it doesnt. All logs
> appended to app.log initially created.
>
>
>
> --
> View this message in context: http://apache-logging.6191.n7.nabble.com/RollingFileAppender-not-working-consistently-tp8582p75831.html
> Sent from the Log4j - Users mailing list archive at Nabble.com.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [hidden email]
> For additional commands, e-mail: [hidden email]
>
>

Loading...