Java: Logging with FileHandler, rotation












1















I use FileHandler for logging.



Logger l = Logger.getLogger ("mylogger");
FileHandler fh = new FileHandler ("log", 1000000, 2, true);
l.addHandler (fh);


That would always log to log.0. If that reaches 1MB it gets moved to log.1.
Logging continues at the empty log.0.



log.0
log.1


As far I see the numbers start always with 0. Is there a way to have no number at the current log and start he rotated log with 1?



log  
log.1









share|improve this question























  • Are you using a logging framework like slf4j?

    – Jabari Dash
    Nov 21 '18 at 17:34











  • Its Javas own java.util.logging.Logger. So now external framework used.

    – chris01
    Nov 21 '18 at 17:47


















1















I use FileHandler for logging.



Logger l = Logger.getLogger ("mylogger");
FileHandler fh = new FileHandler ("log", 1000000, 2, true);
l.addHandler (fh);


That would always log to log.0. If that reaches 1MB it gets moved to log.1.
Logging continues at the empty log.0.



log.0
log.1


As far I see the numbers start always with 0. Is there a way to have no number at the current log and start he rotated log with 1?



log  
log.1









share|improve this question























  • Are you using a logging framework like slf4j?

    – Jabari Dash
    Nov 21 '18 at 17:34











  • Its Javas own java.util.logging.Logger. So now external framework used.

    – chris01
    Nov 21 '18 at 17:47
















1












1








1








I use FileHandler for logging.



Logger l = Logger.getLogger ("mylogger");
FileHandler fh = new FileHandler ("log", 1000000, 2, true);
l.addHandler (fh);


That would always log to log.0. If that reaches 1MB it gets moved to log.1.
Logging continues at the empty log.0.



log.0
log.1


As far I see the numbers start always with 0. Is there a way to have no number at the current log and start he rotated log with 1?



log  
log.1









share|improve this question














I use FileHandler for logging.



Logger l = Logger.getLogger ("mylogger");
FileHandler fh = new FileHandler ("log", 1000000, 2, true);
l.addHandler (fh);


That would always log to log.0. If that reaches 1MB it gets moved to log.1.
Logging continues at the empty log.0.



log.0
log.1


As far I see the numbers start always with 0. Is there a way to have no number at the current log and start he rotated log with 1?



log  
log.1






java logging






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 21 '18 at 16:36









chris01chris01

3,76821733




3,76821733













  • Are you using a logging framework like slf4j?

    – Jabari Dash
    Nov 21 '18 at 17:34











  • Its Javas own java.util.logging.Logger. So now external framework used.

    – chris01
    Nov 21 '18 at 17:47





















  • Are you using a logging framework like slf4j?

    – Jabari Dash
    Nov 21 '18 at 17:34











  • Its Javas own java.util.logging.Logger. So now external framework used.

    – chris01
    Nov 21 '18 at 17:47



















Are you using a logging framework like slf4j?

– Jabari Dash
Nov 21 '18 at 17:34





Are you using a logging framework like slf4j?

– Jabari Dash
Nov 21 '18 at 17:34













Its Javas own java.util.logging.Logger. So now external framework used.

– chris01
Nov 21 '18 at 17:47







Its Javas own java.util.logging.Logger. So now external framework used.

– chris01
Nov 21 '18 at 17:47














1 Answer
1






active

oldest

votes


















1














Short answer: Not using the default FileHandler



That said, there is nothing stopping you from writing your own StreamHandler.
This is OpenJDK's FileHandler implementation. It's actually only a couple lines of modifications to achieve your desired behaviour.



FileHandler actually generates all the filenames upfront in an array. You simply want to tweak the generation code such that the first element does not contain the '0'. It is extremely unfortunate that it's a private method, so you have to re-implement the whole class rather than simply extending it.



NOTE: If you are going to base your implementation on OpenJDK's, please respect the license under which it is distributed. I am not a lawyer, so you may want to ask other people of the legalities of using a modified OpenJDK source.



Now that that's out of the way, look inside the generate() method. There are two spots that use the generation parameter, which is the index of your logfile.



} else if (ch2 == 'g') {
word = word.append(generation); // this line
// ...and...
if (count > 1 && !sawg) {
word = word.append('.').append(generation); // this line


You want them to be guarded by if (generation > 0)



That should stop the log files from showing the 0th index on the filename.






share|improve this answer

























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53416679%2fjava-logging-with-filehandler-rotation%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    Short answer: Not using the default FileHandler



    That said, there is nothing stopping you from writing your own StreamHandler.
    This is OpenJDK's FileHandler implementation. It's actually only a couple lines of modifications to achieve your desired behaviour.



    FileHandler actually generates all the filenames upfront in an array. You simply want to tweak the generation code such that the first element does not contain the '0'. It is extremely unfortunate that it's a private method, so you have to re-implement the whole class rather than simply extending it.



    NOTE: If you are going to base your implementation on OpenJDK's, please respect the license under which it is distributed. I am not a lawyer, so you may want to ask other people of the legalities of using a modified OpenJDK source.



    Now that that's out of the way, look inside the generate() method. There are two spots that use the generation parameter, which is the index of your logfile.



    } else if (ch2 == 'g') {
    word = word.append(generation); // this line
    // ...and...
    if (count > 1 && !sawg) {
    word = word.append('.').append(generation); // this line


    You want them to be guarded by if (generation > 0)



    That should stop the log files from showing the 0th index on the filename.






    share|improve this answer






























      1














      Short answer: Not using the default FileHandler



      That said, there is nothing stopping you from writing your own StreamHandler.
      This is OpenJDK's FileHandler implementation. It's actually only a couple lines of modifications to achieve your desired behaviour.



      FileHandler actually generates all the filenames upfront in an array. You simply want to tweak the generation code such that the first element does not contain the '0'. It is extremely unfortunate that it's a private method, so you have to re-implement the whole class rather than simply extending it.



      NOTE: If you are going to base your implementation on OpenJDK's, please respect the license under which it is distributed. I am not a lawyer, so you may want to ask other people of the legalities of using a modified OpenJDK source.



      Now that that's out of the way, look inside the generate() method. There are two spots that use the generation parameter, which is the index of your logfile.



      } else if (ch2 == 'g') {
      word = word.append(generation); // this line
      // ...and...
      if (count > 1 && !sawg) {
      word = word.append('.').append(generation); // this line


      You want them to be guarded by if (generation > 0)



      That should stop the log files from showing the 0th index on the filename.






      share|improve this answer




























        1












        1








        1







        Short answer: Not using the default FileHandler



        That said, there is nothing stopping you from writing your own StreamHandler.
        This is OpenJDK's FileHandler implementation. It's actually only a couple lines of modifications to achieve your desired behaviour.



        FileHandler actually generates all the filenames upfront in an array. You simply want to tweak the generation code such that the first element does not contain the '0'. It is extremely unfortunate that it's a private method, so you have to re-implement the whole class rather than simply extending it.



        NOTE: If you are going to base your implementation on OpenJDK's, please respect the license under which it is distributed. I am not a lawyer, so you may want to ask other people of the legalities of using a modified OpenJDK source.



        Now that that's out of the way, look inside the generate() method. There are two spots that use the generation parameter, which is the index of your logfile.



        } else if (ch2 == 'g') {
        word = word.append(generation); // this line
        // ...and...
        if (count > 1 && !sawg) {
        word = word.append('.').append(generation); // this line


        You want them to be guarded by if (generation > 0)



        That should stop the log files from showing the 0th index on the filename.






        share|improve this answer















        Short answer: Not using the default FileHandler



        That said, there is nothing stopping you from writing your own StreamHandler.
        This is OpenJDK's FileHandler implementation. It's actually only a couple lines of modifications to achieve your desired behaviour.



        FileHandler actually generates all the filenames upfront in an array. You simply want to tweak the generation code such that the first element does not contain the '0'. It is extremely unfortunate that it's a private method, so you have to re-implement the whole class rather than simply extending it.



        NOTE: If you are going to base your implementation on OpenJDK's, please respect the license under which it is distributed. I am not a lawyer, so you may want to ask other people of the legalities of using a modified OpenJDK source.



        Now that that's out of the way, look inside the generate() method. There are two spots that use the generation parameter, which is the index of your logfile.



        } else if (ch2 == 'g') {
        word = word.append(generation); // this line
        // ...and...
        if (count > 1 && !sawg) {
        word = word.append('.').append(generation); // this line


        You want them to be guarded by if (generation > 0)



        That should stop the log files from showing the 0th index on the filename.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Nov 29 '18 at 23:23

























        answered Nov 22 '18 at 7:35









        NPrasNPras

        1,101718




        1,101718






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53416679%2fjava-logging-with-filehandler-rotation%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Wiesbaden

            Marschland

            Dieringhausen