Logback:为开发和生产环境添加不同级别的新日志

问题描述 投票:0回答:2

我想添加新的日志文件myNewLog.log,我不会在不同的环境中使用不同的记录器级别而不影响现有的日志。开发环境和生产环境的级别在下面的描述中提到:

  1. 对于开发环境
    • 液位错误已激活
    • 级别信息已激活
    • 级别调试处于活动状态(开发人员的默认级别)

我添加了一个新的附加程序 myNewLog,并将默认级别设置为 DEBUG,然后我创建了 3 个名为 myNewLog 的记录器,每个记录器都有不同的级别。

开发环境的

logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="2 seconds">
    <property resource="logback.properties" />

    <appender name="apiLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${APPL_FULL_PATH}/logs/mylog.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>${APPL_FULL_PATH}/logs/mylog.log.%d{yyyy.MM.dd}</fileNamePattern>

            <maxHistory>60</maxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d{yyyy.MM.dd HH:mm:ss} %p %m%n</Pattern>
        </encoder>
    </appender>

    <appender name="myNewLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${APPL_FULL_PATH}/logs/myNewLog.log</file>
        <append>true</append>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>${APPL_FULL_PATH}/logs/myNewLog%d{yyyy-MM-dd}.log</fileNamePattern>

            <maxHistory>60</maxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <charset>UTF-8</charset>
            <Pattern>%d{yyyy.MM.dd HH:mm:ss} %p %m%n</Pattern>
        </encoder>

        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>DEBUG</level>
        </filter>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <logger name="apiLog" level="INFO" additivity="false">
        <appender-ref ref="apiLog" />
    </logger>
    
    <logger name="myNewLog" level="DEBUG" additivity="true">
        <appender-ref ref="myNewLog" />
    </logger>
    <logger name="myNewLog" level="INFO" additivity="false">
        <appender-ref ref="myNewLog" />
    </logger>
    <logger name="myNewLog" level="ERROR" additivity="false">
        <appender-ref ref="myNewLog" />
    </logger>
    
    <root level="ERROR">
        <appender-ref ref="console" />
    </root>

</configuration>
  1. 对于产品环境
    • 级别错误处于活动状态(产品的默认级别)
    • 等级信息将在需要时激活
    • 级别调试已停用

我添加了一个新的附加程序 myNewLog,并将默认级别设置为 ERROR,然后我创建了 3 个名为 myNewLog 的记录器,每个记录器都有不同的级别。

生产环境的logback.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="2 seconds">
    <property resource="logback.properties" />

    <appender name="apiLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${APPL_FULL_PATH}/logs/mylog.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>${APPL_FULL_PATH}/logs/mylog.log.%d{yyyy.MM.dd}</fileNamePattern>

            <maxHistory>60</maxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d{yyyy.MM.dd HH:mm:ss} %p %m%n</Pattern>
        </encoder>
    </appender>

    <appender name="myNewLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${APPL_FULL_PATH}/logs/myNewLog.log</file>
        <append>true</append>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>${APPL_FULL_PATH}/logs/myNewLog%d{yyyy-MM-dd}.log</fileNamePattern>

            <maxHistory>60</maxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <charset>UTF-8</charset>
            <Pattern>%d{yyyy.MM.dd HH:mm:ss} %p %m%n</Pattern>
        </encoder>

        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>ERROR</level>
        </filter>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <logger name="apiLog" level="INFO" additivity="false">
        <appender-ref ref="apiLog" />
    </logger>
    
    <logger name="myNewLog" level="ERROR" additivity="true">
        <appender-ref ref="myNewLog" />
    </logger>
    <logger name="myNewLog" level="DEBUG" additivity="false">
        <appender-ref ref="myNewLog" />
    </logger>
    <logger name="myNewLog" level="INFO" additivity="false">
        <appender-ref ref="myNewLog" />
    </logger>
    
    <root level="ERROR">
        <appender-ref ref="console" />
    </root>
</configuration>

我的问题是:

  • 如何管理每个环境的日志级别?
  • 我可以在一个 logback 文件中管理 2 个环境的级别吗?
java spring log4j logback spring-logback
2个回答
0
投票
  1. 在 application.yml 中,为每个环境使用不同的配置文件。并定义级别 var my.log.level
logging:
  config: classpath:logback.xml

--- #dev
spring:
  profiles:
  - dev

my:
  log:
    level: DEBUG

--- #prod
spring:
  profiles:
  - prod

my:
  log:
    level: ERROR

  1. 在 logback.xml 中使用“”导入此变量。 如果logback.xml不起作用,请将其重命名为logback-spring.xml重试
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true" scan="true" scanPeriod="2 seconds">

    <!-- import var from application.yml -->
    <springProperty scope="context" name="logLevel" source="my.log.level" defaultValue="INFO"/>

    <property resource="logback.properties" />

    <appender name="apiLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${APPL_FULL_PATH}/logs/mylog.log</file>
        <append>true</append>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>${APPL_FULL_PATH}/logs/mylog.log.%d{yyyy.MM.dd}</fileNamePattern>

            <maxHistory>60</maxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d{yyyy.MM.dd HH:mm:ss} %p %m%n</Pattern>
        </encoder>
    </appender>

    <appender name="myNewLog" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${APPL_FULL_PATH}/logs/myNewLog.log</file>
        <append>true</append>

        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>${APPL_FULL_PATH}/logs/myNewLog%d{yyyy-MM-dd}.log</fileNamePattern>

            <maxHistory>60</maxHistory>
        </rollingPolicy>

        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <charset>UTF-8</charset>
            <Pattern>%d{yyyy.MM.dd HH:mm:ss} %p %m%n</Pattern>
        </encoder>

        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>${logLevel}</level>
        </filter>

        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <level>${logLevel}</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <logger name="apiLog" level="INFO" additivity="true">
        <appender-ref ref="apiLog" />
    </logger>
    <logger name="myNewLog" level="ERROR" additivity="false">
        <appender-ref ref="myNewLog" />
    </logger>
    <logger name="myNewLog" level="DEBUG" additivity="true">
        <appender-ref ref="myNewLog" />
    </logger>
    <logger name="myNewLog" level="INFO" additivity="true">
        <appender-ref ref="myNewLog" />
    </logger>
    <root level="ERROR">
        <appender-ref ref="console" />
    </root>



</configuration>

  1. 使用--spring.profiles.active来运行。例如,使用 dev 来运行
java -jar [mvn-created-jar-file-name] --spring.profiles.active=dev

0
投票

对我有用的是针对不同的环境覆盖 logkback.xml。我使用不同的虚拟机选项开始应用程序。比如说

对于开发者:

-Dlogging.config=file:my_path/dev/logback.xml

对于产品:

-Dlogging.config=file:my_path/prd/logback.xml
© www.soinside.com 2019 - 2024. All rights reserved.