logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Joe Merten (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (LOG4J2-486) RollingFile Appender - add custom info at the start of each logfile
Date Tue, 07 Jan 2014 10:50:51 GMT

    [ https://issues.apache.org/jira/browse/LOG4J2-486?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13864089#comment-13864089
] 

Joe Merten commented on LOG4J2-486:
-----------------------------------

Yep, {{packages="eeo.toolbox"}} was the trick to get my factory method called :).
Now I'm able to write to the bottom of the old as well as to the top of the new logfile using
a simple FileWriter like this:
{code:borderStyle=solid}
    static class MyAction implements Action {
        final Action delegate;
        final String fileName;

        public MyAction(final Action delegate, final String fileName) {
            this.delegate = delegate;
            this.fileName = fileName;
        }

        @Override public void run() {
            delegate.run();
        }

        @Override public boolean execute() throws IOException {
            try {
                BufferedWriter writer = null;
                try {
                    writer = new BufferedWriter(new FileWriter(new File(fileName), true));
                    writer.write("****************************\n");
                    writer.write("*** Bye, bye old logfile ***\n");
                    writer.write("****************************\n");
                } finally {
                    if (writer != null)
                        writer.close();
                }
            } catch (Throwable e) {
                logger.error("Writing to bottom of old logfile \"" + fileName + "\" with",
e);
            }

            boolean ret = delegate.execute();

            try {
                BufferedWriter writer = null;
                try {
                    writer = new BufferedWriter(new FileWriter(new File(fileName), true));
                    writer.write("*************************\n");
                    writer.write("*** Hello new logfile ***\n");
                    writer.write("*************************\n");
                } finally {
                    if (writer != null)
                        writer.close();
                }
            } catch (Throwable e) {
                logger.error("Writing to top of new logfile \"" + fileName + "\" with", e);
            }

            return ret;
        }
{code}

{color:gray} ( … but I think my solution will not longer work as soon as [#239|LOG4J2-239]
is implemented, so I'll be happy if there was a appropriate callback provided in future versions
… ) {color}

Could you give me a hint how I can use the configured PatternLayout to write to the logfiles?

> RollingFile Appender - add custom info at the start of each logfile
> -------------------------------------------------------------------
>
>                 Key: LOG4J2-486
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-486
>             Project: Log4j 2
>          Issue Type: Question
>          Components: Appenders
>    Affects Versions: 2.0-beta9
>         Environment: Java 1.7, Linux
>            Reporter: Joe Merten
>         Attachments: MyRolloverStrategy.java, log4j2.xml
>
>
> I post this question here because of a hint of Remko Popma.
> See also:
> * http://apache-logging.6191.n7.nabble.com/log4j2-getting-started-amp-rolling-files-tt8406.html#a42402
> * http://stackoverflow.com/questions/20819376/log4j2-rollingfile-appender-add-custom-info-at-the-start-of-each-logfile
> I want to add some custom info at the top of each logfile, like the version string of
my application, the application uptime and the system uptime. And even writing some »bye,
bye / eof« to the bottom of the just closed logfile would also be fine.
> Because there is no appropriate hook or callback to get notified when the RollingFileAppander
is creating / has created a new file, so that I can put my things at first into these new
logfile, I tried to extend DefaultRolloverStrategy. But currently, I stuck at some points.
> Seems that I have to deal with {{@Plugin}} and {{@PluginFactory}}. My try with the attached
log4j2.xml and MyRolloverStrategy.java compiles without errors and warnings. But when I start
the application, I get this error message:
> {{2014-01-05 23:22:05,876 ERROR RollingFile contains an invalid element or attribute
"MyRolloverStrategy"}}
> And then the next step would be: "how to write to the logfiles within my rollover method?"
> log4j2.xml :
> {code}
> <?xml version="1.0" encoding="UTF-8"?>
> <Configuration>
>   <Properties>
>     <Property name="projectPrefix">Tts</Property>
>     <Property name="rawPattern">%d %-5p [%t] %C{2} (%F:%L) - %m%n</Property>
>     <Property name="coloredPattern">%d %highlight{%-5p}{FATAL=bright red, ERROR=red,
WARN=yellow, INFO=cyan, DEBUG=green, TRACE=bright blue} %style{[%t] %C{2} (%F:%L) -}{bright,black}
%m%n</Property>
>     <Property name="coloredShortPattern">%d %highlight{%-5p}{FATAL=bright red,
ERROR=red, WARN=yellow, INFO=cyan, DEBUG=green, TRACE=bright blue} %style{[%t] -}{bright,black}
%m%n</Property>
>     <Property name="fileName">Log/${projectPrefix}.log</Property>
>     <Property name="filePattern">Log/${projectPrefix}-%i.log</Property>
>   </Properties>
>   <Appenders>
>     <Console name="Stdout" target="SYSTEM_OUT">
>       <PatternLayout pattern="${coloredPattern}"/>
>     </Console>
>     <RollingFile name="Logfile" fileName="${fileName}" filePattern="${filePattern}">
>       <PatternLayout pattern="${rawPattern}"/>
>       <Policies>
>         <SizeBasedTriggeringPolicy size="16 MB"/>
>       </Policies>
>       <eeo.toolbox.MyRolloverStrategy fileIndex="min" max="16"/>
>     </RollingFile>
>   </Appenders>
>   <Loggers>
>     <Root level="info">
>       <AppenderRef ref="Stdout"/>
>       <AppenderRef ref="Logfile"/>
>     </Root>
>   </Loggers>
> </Configuration>
> {code}



--
This message was sent by Atlassian JIRA
(v6.1.5#6160)

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-dev-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-dev-help@logging.apache.org


Mime
View raw message