当前位置: 首页 > 知识库问答 >
问题:

Logback:为Dev、Prod环境添加不同级别的新日志

拓拔意
2023-03-14

我想添加新的日志文件MyNewLog.log,我不想在不影响现有日志的情况下,在不同的环境中使用不同的日志级别。dev环境和prod环境的级别在下面的描述中提到:

  • 用于开发环境
    • 级别错误处于活动状态
    • 级别信息处于活动状态
    • 级别调试处于活动状态(开发人员的默认级别)

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

    dev环境的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>
    
    • 级别错误处于活动状态(prod的默认级别)
    • 级别信息将在需要时激活
    • 级别调试已停用
    <?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>
    

    我的问题是:

    • 如何管理每个环境的日志级别?
    • 可以在一个日志文件中管理两个环境的级别吗?

共有1个答案

徐晔
2023-03-14
  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

<?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>

java -jar [mvn-created-jar-file-name] --spring.profiles.active=dev
 类似资料:
  • 问题内容: 我想创建一个Dockerfile,它将能够构建三个不同的映像(此刻一个)。这些映像仅在配置文件中有所不同。 我正在尝试: 创建三个不同的Docker文件(不起作用,因为dockerfile需要命名为Dockerfile并且位于上下文根目录中 寻找一种将参数传递给docker build命令的方法-找不到 使用ONBUILD命令-我创建了一个主文件和三个特定的文件,它们将特定的conf文

  • 我使用的是WebLogic10.3.6,我不能用给定的logback.xml为2个不同的追加器(com.my&root)控制不同的日志级别,我只希望文件追加器有跟踪级别,而在Weblogic终端下没有任何跟踪级别。问题是我在这两个方面得到相同的输出。

  • 我最近将应用程序从log4j更改为logback/slf4j。一切都工作得很好,但我想实现一些具体的东西。 我正在开发的应用程序是一个web应用程序。在我们的生产环境中,日志级别是on info。不时有票进来让我们的服务团队处理。如果我们的服务团队在复制票据时,他们可以将日志级别放在跟踪上,只用于他们的测试请求,那就太好了。这样,日志文件就不会随着当时所有其他请求的到来而被修改。 我们已经使用标头

  • 我正在研究HELM图表,但我无法加入我们如何使用模板/deployment.yaml、values.yaml和a deployment.yaml来建立相同的图表。 注: 它是同一个环境变量,将根据部署环境保存不同的值。

  • 本文向大家介绍springboot多环境(dev、test、prod)配置详解,包括了springboot多环境(dev、test、prod)配置详解的使用技巧和注意事项,需要的朋友参考一下 我们在开发应用的时候,通常同一套程序会被应用和安装到几个不同的环境中,比如开发、测试、生产等。 其中每个环境的数据库地址、服务器端口等配置都不同。如果在为不同环境打包时都要频繁的修改配置文件,那必将是个非常繁

  • 我希望文件记录器以这样的方式配置日志类别'X' 记录器one在信息级别上记录“X”,在调试级别上记录其他东西 记录器在调试级别上有两个日志“x”