Инструменты пользователя

Инструменты сайта


develop:java:logging

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
develop:java:logging [2023/05/06 08:20]
admin
develop:java:logging [2024/03/02 11:40] (текущий)
admin
Строка 369: Строка 369:
  
  
 +<details>
 +<summary>:!: Еще пример</summary>
 +<code xml>
 +<appender name="Commands" class="ch.qos.logback.core.rolling.RollingFileAppender">
 +    <file>./logs/commands/commands.log</file>
 +    <append>true</append>
 +    <encoder>
 +        <pattern>%d{yyyy-MM-dd} %d{HH:mm:ss.SSS} %-5level - %msg%n</pattern>
 +    </encoder>
 +    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 +        <!-- daily rollover -->
 +        <fileNamePattern>./logs/commands/commands-%d{yyyy-MM-dd}.log.zip</fileNamePattern>
 +        <maxHistory>50</maxHistory>
 +    </rollingPolicy>
 +</appender>
 +(...)
 +<logger name="com.gmware.lib.commands" level="INFO" additivity="false">
 +    <appender-ref ref="Commands"/>
 +</logger>
 +</code>
 +</details>
  
  
 +<details>
 +<summary>:!: Рабочий пример, есть Json</summary>
 +<code xml>
 +<?xml version="1.0" encoding="UTF-8" ?>
 +<configuration scan="false" scanPeriod="1 seconds" debug="false">
  
 +    <appender name="ConsoleAppender" class="ch.qos.logback.core.ConsoleAppender">
 +        <target>System.out</target>
 +        <encoder>
 +            <pattern>%d{yyyy-MM-dd} %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
 +            </pattern>
 +        </encoder>
 +    </appender>
  
 +    <appender name="FileMultiplicatorDefaultAppender"
 +              class="ch.qos.logback.core.rolling.RollingFileAppender">
 +        <file>./log/FileMultiplicator.log</file>
 +        <append>true</append>
 +        <encoder>
 +            <pattern>%d{yyyy-MM-dd} %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
 +            </pattern>
 +        </encoder>
 +        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
 +            <!-- rollover daily -->
 +            <fileNamePattern>log/FileMultiplicator-%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
 +            <!-- each file should be at most 100MB, keep 7 days worth of history, but at most 20GB -->
 +            <maxFileSize>100MB</maxFileSize>
 +            <maxHistory>7</maxHistory>
 +            <totalSizeCap>20GB</totalSizeCap>
 +        </rollingPolicy>
 +    </appender>
 +
 +    <appender name="FileMultiplicatorJsonAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
 +        <file>log/json/FileMultiplicator.log</file>
 +        <append>true</append>
 +        <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
 +            <providers>
 +                <pattern>
 +                    <!-- the pattern that defines what to include -->
 +                    <pattern>
 +                        {
 +                        "timestamp": "%date{yyyy-MM-dd'T'HH:mm:ss}",
 +                        "logger": "%logger{36}",
 +                        "message": "%message",
 +                        "level": "%level"
 +                        }
 +                    </pattern>
 +                </pattern>
 +                <arguments/>
 +                <logstashMarkers/>
 +                <stackTrace>
 +                    <throwableConverter class="net.logstash.logback.stacktrace.ShortenedThrowableConverter">
 +                        <maxDepthPerThrowable>30</maxDepthPerThrowable>
 +                        <maxLength>2048</maxLength>
 +                        <shortenedClassNameLength>20</shortenedClassNameLength>
 +                        <exclude>^sun\.reflect\..*\.invoke</exclude>
 +                        <exclude>^net\.sf\.cglib\.proxy\.MethodProxy\.invoke</exclude>
 +                        <rootCauseFirst>true</rootCauseFirst>
 +                    </throwableConverter>
 +                </stackTrace>
 +            </providers>
 +        </encoder>
 +        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
 +            <!-- rollover daily -->
 +            <fileNamePattern>log/json/FileMultiplicator-%d{yyyy-MM-dd}.%i.zip</fileNamePattern>
 +            <!-- each file should be at most 100MB, keep 60 days worth of history, but at most 20GB -->
 +            <maxFileSize>100MB</maxFileSize>
 +            <maxHistory>7</maxHistory>
 +            <totalSizeCap>20GB</totalSizeCap>
 +        </rollingPolicy>
 +        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
 +            <level>INFO</level>
 +        </filter>
 +    </appender>
  
 +
 +    <appender name="Commands" class="ch.qos.logback.core.rolling.RollingFileAppender">
 +        <file>./log/commands/commands.log</file>
 +        <append>true</append>
 +        <encoder>
 +            <pattern>%d{yyyy-MM-dd} %d{HH:mm:ss.SSS} %-5level - %msg%n</pattern>
 +        </encoder>
 +        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 +            <!-- daily rollover -->
 +            <fileNamePattern>./log/commands/commands-%d{yyyy-MM-dd}.log.zip</fileNamePattern>
 +            <maxHistory>50</maxHistory>
 +        </rollingPolicy>
 +    </appender>
 +
 +    <root level="INFO">
 +<!--        <appender-ref ref="ConsoleAppender"/>-->
 +        <appender-ref ref="FileMultiplicatorDefaultAppender"/>
 + <appender-ref ref="FileMultiplicatorJsonAppender"/>
 +    </root>
 +
 +    <logger name="com.gmware.lib.commands" level="INFO" additivity="false">
 +        <appender-ref ref="Commands"/>
 +    </logger>
 +</configuration>
 +</code>
 +</details>
 +
 +
 +
 +
 +===== Ротирование логов =====
 +Аппендер класса **"RollingFileAppender"** расширяет класс **"FileAppender"**, добавляя возможность ротирования файлов\\
 +
 +Два важных подкомпонента: **RollingPolicy** ("что делать") и **TriggeringPolicy** ("когда это делать")\\
 +Первый может реализовать интерфейс для второго, тогда достаточно указать только его\\
 +
 +
 +==== RollingPolicy ====
 +Внутри аппендера создается xml компонент политики, имеются разные классы, определяющие поведение\\
 +
 +<details>
 +<summary>:!: Примеры классов для RollingPolicy</summary>
 +
 +**TimeBasedRollingPolicy** - На основе времени, один обязательный аргумент "fileNamePattern", так же есть "MaxHistory"\\
 +Шаблон имени должен сдержать спецификатор "%d", тот может содержать шаблон даты/времени, по умолчанию "гггг-ММ-дд". **Период ротирования выводится из значения в fileNamePattern**\\
 +т.е. в данном случае в полночь, если время не указано\\
 +
 +**Сжатие** - для этого нужно добавить расширение "gz/zip" к имени файла\\
 +
 +**SizeAndTimeBaseRollingPolicy** - собсна по дате и размеру. Здесь добавляется еще один обязательный токен именования - "%i", обозначающий порядковый номер\\
 +
 +Пример конфигурации
 +<code xml>
 +<configuration>
 +  <appender name="ROLLING" class="ch.qos.logback.core.rolling.RollingFileAppender">
 +    <file>mylog.txt</file>
 +    <append>true</append>
 +
 + <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
 +      <!-- rollover daily -->
 +      <fileNamePattern>mylog-%d{yyyy-MM-dd}.%i.txt</fileNamePattern>
 +       <maxFileSize>100MB</maxFileSize>    
 +       <maxHistory>60</maxHistory>
 +       <totalSizeCap>20GB</totalSizeCap>
 +    </rollingPolicy>
 +
 +    <encoder>
 +      <pattern>%d{yyyy-MM-dd} %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
 +      </pattern>
 +    </encoder>
 +  </appender>
 +
 +
 +  <root level="DEBUG">
 +    <appender-ref ref="ROLLING" />
 +  </root>
 +
 +</configuration>
 +</code>
 +
 +</details>
  
  
  
  
develop/java/logging.1683361235.txt.gz · Последнее изменение: 2023/05/06 08:20 — admin