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

Java Logback:为Dev和Prod环境添加不同级别的新日志,java,spring,log4j,logback,spring-logback,Java,Spring,Log4j,Logback,Spring Logback,我想添加新的日志文件myNewLog.log,我不会在不同的环境中使用不同的日志级别,而不会影响现有的日志。dev环境和prod环境的级别在下面的描述中提到: 开发环境部 级别错误处于活动状态 级别信息处于活动状态 级别调试处于活动状态(开发人员的默认级别) 我添加了一个新的appender myNewLog,并将默认级别设置为DEBUG,然后创建了3个名为myNewLog的记录器,每个记录器具有不同的级别 开发者环境的logback.xml: <?xml version="

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

  • 开发环境部
    • 级别错误处于活动状态
    • 级别信息处于活动状态
    • 级别调试处于活动状态(开发人员的默认级别)
  • 我添加了一个新的appender 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>
    
    <?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>
    
    
    ${APPL\u FULL\u PATH}/logs/mylog.log
    真的
    ${APPL\u FULL\u PATH}/logs/mylog.log.%d{yyyy.MM.dd}
    60
    %d{yyyy.MM.dd HH:MM:ss}%p%m%n
    ${APPL_FULL_PATH}/logs/myNewLog.log
    真的
    ${APPL_FULL_PATH}/logs/myNewLog%d{yyyy-MM-dd}.log
    60
    UTF-8
    %d{yyyy.MM.dd HH:MM:ss}%p%m%n
    调试
    调试
    接受
    否认
    
  • 产品环境
    • 级别错误处于活动状态(产品的默认级别)
    • 级别信息将在需要时激活
    • 级别调试已停用
  • 我添加了一个新的appender 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>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>
    
    <?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>
    
    
    ${APPL\u FULL\u PATH}/logs/mylog.log
    真的
    ${APPL\u FULL\u PATH}/logs/mylog.log.%d{yyyy.MM.dd}
    60
    %d{yyyy.MM.dd HH:MM:ss}%p%m%n
    ${APPL_FULL_PATH}/logs/myNewLog.log
    真的
    ${APPL_FULL_PATH}/logs/myNewLog%d{yyyy-MM-dd}.log
    60
    UTF-8
    %d{yyyy.MM.dd HH:MM:ss}%p%m%n
    错误
    错误
    接受
    否认
    
    我的问题是:

    <?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>
    
    <?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>
    
    • 如何管理每个环境的日志级别
    • 我可以在一个日志文件中管理两个环境的级别吗
  • 在application.yml中,为每个环境使用不同的配置文件。并定义级别var my.log.level
  • 日志记录:
    config:classpath:logback.xml
    ---#dev
    春天:
    简介:
    -发展
    我的:
    日志:
    级别:调试
    ---#prod
    春天:
    简介:
    -刺激
    我的:
    日志:
    级别:错误
    
  • 在logback.xml中,使用“”导入此变量。 如果logback.xml无效,请将其重命名为logback-spring.xml以重试

  • 感谢您的建议,这不是spring boot项目,我没有application.yml,我也不能将logback.xml更改为logback-spring.xml如果不使用spring boot,请使用env变量定义“my.log.level”。在logback.xml中,${my.log.level:-INFO.INFO是默认值。应用程序的启动方式如下:java-Dmy.log.level=DEBUG-jar[Your jar]