Составление logback.xml

 
0
 
Java
ava
Felixx | 21.01.2013, 21:12
Привет всем, может кто то помоч, с составлением logback.xml ?
Вроде составил, но всеравно не так как надо бы...
Вот что у меня получилось:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <charset>cp866</charset>
            <pattern>[%logger{0}] %msg%n</pattern>
        </encoder>
    </appender>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/console.log</file>
        <!--<append>true</append>-->
        <!--<prudent>true</prudent>-->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/backup/console/%d{dd-MM-yyyy}/console-time-%d{HH-mm}.log-%i.zip</fileNamePattern>
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>1KB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
        </rollingPolicy>
        <encoder>
            <charset>utf-8</charset>
            <pattern>[%logger{0}] %msg%n</pattern>
        </encoder>
    </appender> 

    <appender name="FILEERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>logs/errors.log</file>
        <!--<append>true</append>-->
        <!--<prudent>true</prudent>-->
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
           <level>ERROR</level>
           <onMatch>ACCEPT</onMatch>
           <onMismatch>DENY</onMismatch>
     </filter>
     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
           <fileNamePattern>logs/backup/errors/%d{dd-MM-yyyy}/errors-time-%d{HH-mm}.log-%i.zip</fileNamePattern>
            <maxHistory>30</maxHistory>
         <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
             <maxFileSize>1KB</maxFileSize>
         </timeBasedFileNamingAndTriggeringPolicy>    
     </rollingPolicy>
     <encoder>
           <pattern>%d{HH:mm:ss.SSS} [%-5level] %logger{0} - %msg%n</pattern>
     </encoder>
    </appender>             

    <root level="INFO">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
        <appender-ref ref="FILEERROR" />
    </root>
</configuration>


Щейчас получается что он логи пишет в один файл, и если он больше чем 1 килобайт, разбивает его на части, и каждый день свой лог файл, Хранится все это в отдельной папочке backup/console/%d{dd-MM-yyyy}/..... всего хранить логи за 30 дней... Если я конечно ничего не перепутал, и нигде не накосячил..
Но хотелось бы еще одно, если приложение перезапускается тоже так делать бекап того что было, под другим %i уже например.. тоесть надо бы хранить логи только одного запуска приложения а не куччу запусков в день..

Можно ли так сделать как то? Или придется писать свой аппендер, или ещо что то?
Может у кого уже есть, поделитесь плз?
Ответы (1)
ava
Felixx | 22.01.2013, 12:41 #
Хз, может кому понадобится когда - либо....
Правда теперь xml что выше, не актуальна.


private static void initalizeLoggger() {
        File dir = new File("cache");
        deleteDirectory(dir);
        File[] files = new File("log").listFiles(new FilenameFilter() {

            @Override
            public boolean accept(File dir, String name) {
                return name.endsWith(".log");
            }
        });

        if (files != null) {
            byte[] buf = new byte[1024];
            try {
                File file = new File("log/backup");
                file.mkdirs();
                String outFilename = "./log/backup/" + new SimpleDateFormat("yyyy-MM-dd HHmmss").format(new Date()) + ".zip";
                ZipOutputStream out = new ZipOutputStream(new FileOutputStream(outFilename));
                out.setMethod(ZipOutputStream.DEFLATED);
                out.setLevel(Deflater.BEST_COMPRESSION);

                for (File logFile : files) {
                    FileInputStream in = new FileInputStream(logFile);
                    out.putNextEntry(new ZipEntry(logFile.getName()));
                    int len;
                    while ((len = in.read(buf)) > 0) {
                        out.write(buf, 0, len);
                    }
                    out.closeEntry();
                    in.close();
                    logFile.delete();
                }
                out.close();
            } catch (IOException e) {
            }
        }
        LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();
        try {
            JoranConfigurator configurator = new JoranConfigurator();
            configurator.setContext(lc);
            lc.reset();
            configurator.doConfigure("config/slf4j-logback.xml");
        } catch (JoranException je) {
            throw new RuntimeException("Failed to configure loggers, shutting down...", je);
        }

    }
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
  Felixx
advanced
Отправить