logback.xml不同日志打印到不同文件中,自定义类日志输出到自定义的日志文件中

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false">
    <!--为了防止进程退出时,内存中的数据丢失,请加上此选项-->
    <shutdownHook class="ch.qos.logback.core.hook.DelayingShutdownHook"/>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="E:/code/logs/springboot_temple" />
    <property name="LOG_NAME_BEGIN" value="springboot_temple" />
    <property name="moduleName" value="springboot-temple" />
    <property name="maxFileSize" value="100MB" />
    <property name="totalSizeCap" value="2GB" />
    <property name="MaxHistory" value="30" />
    <!-- 彩色日志格式 -->
    <property name="COLOUR_LOG_PATTERN"
              value="%magenta(%d{yyyy-MM-dd HH:mm:ss.SSS}) %cyan([TRACE_ID:%X{TRACE_ID}])  %blue([%thread]) %highlight(%-5level) %green(%logger) - %msg%n"/>
    <!-- Console 输出设置 -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>${COLOUR_LOG_PATTERN}</pattern>-->
            <charset>utf8</charset>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <!-- 所有级别日志 appender  -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--按大小+时间的策略保存日志-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-all-%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <!--每100m分一个文件-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--总大小不超过2G-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <!--日志文件保留天数-->
            <MaxHistory>${MaxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${COLOUR_LOG_PATTERN}</pattern>
        </encoder>
    </appender>


    <!-- warn日志 appender  -->
    <appender name="INFO" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-info-%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <!--每100m分一个文件-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--总大小不超过2G-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <!--日志文件保留天数-->
            <MaxHistory>${MaxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${COLOUR_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印info日志 -->
            <level>INFO</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>
    <!-- debug日志 appender  -->
    <appender name="DEBUG" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-debug-%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <!--每100m分一个文件-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--总大小不超过2G-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <!--日志文件保留天数-->
            <MaxHistory>${MaxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${COLOUR_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印debug日志 -->
            <level>DEBUG</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- error日志 appender  -->
    <appender name="ERROR" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-error-%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <!--每100m分一个文件-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--总大小不超过2G-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <!--日志文件保留天数-->
            <MaxHistory>${MaxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${COLOUR_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印error日志 -->
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

    <!-- warn日志 appender  -->
    <appender name="WARN" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-warn-%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <!--每100m分一个文件-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--总大小不超过2G-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <!--日志文件保留天数-->
            <MaxHistory>${MaxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${COLOUR_LOG_PATTERN}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter"><!-- 只打印warn日志 -->
            <level>WARN</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>



<!--    类级别日志输出-->
    <appender name="CLASS1_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--按大小+时间的策略保存日志-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-class1-%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <!--每100m分一个文件-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--总大小不超过2G-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <!--日志文件保留天数-->
            <MaxHistory>${MaxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${COLOUR_LOG_PATTERN}</pattern>
        </encoder>
    </appender>


    <appender name="CLASS2_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--按大小+时间的策略保存日志-->
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <fileNamePattern>${LOG_HOME}/${LOG_NAME_BEGIN}-class2-%d{yyyy-MM-dd}_%i.log</fileNamePattern>
            <!--每100m分一个文件-->
            <maxFileSize>${maxFileSize}</maxFileSize>
            <!--总大小不超过2G-->
            <totalSizeCap>${totalSizeCap}</totalSizeCap>
            <!--日志文件保留天数-->
            <MaxHistory>${MaxHistory}</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>${COLOUR_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!--自定义类日志输出到自定义的日志文件中  --> 
    <logger name="com.example.demo_wwxx_dep.service.ClassLog1" level="info" additivity="true">
        <appender-ref ref="CLASS1_FILE" />
    </logger>
    <!--自定义类日志输出到自定义的日志文件中  --> 
    <logger name="com.example.demo_wwxx_dep.service.ClassLog2" level="info" additivity="false">
        <appender-ref ref="CLASS2_FILE" />
    </logger>



    <!-- 日志输出级别  level="DEBUG"没有任何作用了 --> 
    <root level="DEBUG">
        <appender-ref ref="STDOUT" />
        <appender-ref ref="FILE" />
        <appender-ref ref="ERROR" />
        <appender-ref ref="DEBUG" />
        <appender-ref ref="INFO" />
        <appender-ref ref="WARN" />
    </root>
</configuration>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过在logback.xml文件添加一个Appender,将日志输出到JTextArea。以下是一个示例logback.xml配置: ```xml <?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <appender name="jtextArea" class="com.example.logback.JTextAreaAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern> </layout> </appender> <root level="info"> <appender-ref ref="console" /> <appender-ref ref="jtextArea" /> </root> </configuration> ``` 其,`class`为`com.example.logback.JTextAreaAppender`的`jtextArea`是自定义的Appender,用于将日志输出到JTextArea。可以通过以下代码实现: ```java public class JTextAreaAppender extends AppenderBase<ILoggingEvent> { private static final Map<String, JTextArea> jTextAreaMap = new ConcurrentHashMap<>(); private String loggerName; public void setLoggerName(String loggerName) { this.loggerName = loggerName; } public static void addJTextArea(String name, JTextArea jTextArea) { jTextAreaMap.put(name, jTextArea); } public static void removeJTextArea(String name) { jTextAreaMap.remove(name); } @Override protected void append(ILoggingEvent event) { if (event.getLoggerName().equals(loggerName)) { for (JTextArea jTextArea : jTextAreaMap.values()) { SwingUtilities.invokeLater(() -> jTextArea.append(event.getFormattedMessage() + "\n")); } } } } ``` 在Swing应用程序,可以在JTextArea上调用`setDocument()`方法,将其传递给`JTextAreaAppender`,并将Appender添加到logback.xml配置文件: ```java public class MyApp extends JFrame { public MyApp() { JTextArea jTextArea = new JTextArea(); JScrollPane scrollPane = new JScrollPane(jTextArea); JTextAreaAppender.addJTextArea("myapp", jTextArea); Logger logger = (Logger) LoggerFactory.getLogger("myapp"); logger.addAppender(JTextAreaAppender.getInstance("myapp")); // ... } // ... } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值