【spring boot logback】spring boot中logback日志乱码问题

在初次使用logback的自定义配置文件完整的控制spring boot日志后,发现了一个无法忍受的问题,就是日志乱码。

 

控制台看到打印日志乱码如下:

 

而日志文件打开:

记事本打开

sublime打开

 

 

关于这个问题,分析如下:

1.打印的“进入Controller日志控制中心----》》》”字样可以看出,至少代码本身和IDE环境的编码方式没有任何的关系;

2.打印出来的日志是logback-spring.xml文件起作用之后,显示在控制台的,而日志文件打开后,看到 不同的文本编辑器打开是不一样的。

 

结论:

1.可以肯定,这个是logback-spring.xml自定义配置起作用之后导致的

2.日志文件中并不是不乱码,而是不同的编辑软件的默认编码方式是不一样的。所以才会有的乱码,有的并不乱码。

 

 

 观察logback-spring.xml文件。可以看到:

 

解决办法:

所以,我们只需要将<charset>中的值设置为自己想要的编码方式即可

 

基本的完整的logback-spring.xml文件代码:【注意,file部分的charset依旧为GBK】

<?xml version="1.0" encoding="UTF-8"?>

<configuration scan="true" scanPeriod="60 seconds" debug="false">

    <contextName>logback</contextName>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="log.path" value="E:\\log\\logback.log" />

    <!--输出到控制台-->
    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>INFO</level>
        </filter>
        <encoder>
            <!--<pattern>%d %p (%file:%line\)- %m%n</pattern>-->
            <!--格式化输出:%d:表示日期    %thread:表示线程名     %-5level:级别从左显示5个字符宽度  %msg:日志消息    %n:是换行符-->
            <pattern>控制台-%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger - %msg%n</pattern>
            <charset>UTF-8</charset>
        </encoder>
    </appender>

    <!--输出到文件-->
    <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${log.path}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logback.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <!--格式化输出:%d:表示日期    %thread:表示线程名     %-5level:级别从左显示5个字符宽度  %msg:日志消息    %n:是换行符-->
            <pattern>文件记录-%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <charset>GBK</charset>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="console" />
        <appender-ref ref="file" />
    </root>

    <logger name="com.sxd.controller"/>
    <logger name="com.sxd.util.LogTestController" level="WARN" additivity="false">
        <appender-ref ref="console" />
    </logger>

</configuration>

View Code

 

运行结果:

 

时间: 2024-09-17 04:16:15

【spring boot logback】spring boot中logback日志乱码问题的相关文章

【spring boot logback】日志使用自定义的logback-spring.xml文件后,application.properties中关于日志的相关配置还会起作用么

本篇 将针对[日志使用自定义的logback-spring.xml文件后,application.properties中关于日志的相关配置还会起作用么]这一个主题进行探索. 这个测试项目是根据[spring boot]8.spring boot的日志框架logback使用中建立的项目进行测试的 在配置了logback-spring.xml 这个logback自定义的配置文件之后: <?xml version="1.0" encoding="UTF-8"?>

使用Spring Boot日志框架在已有的微服务代码中添加日志功能

引言:我们需要在已有的微服务代码中添加日志功能,用于输出需要关注的内容,这是最平常的技术需求了.由于我们的微服务代码是基于SpringBoot开发的,那么问题就转换为如何在Spring Boot应用程序中输出相应的日志. 在传统Java应用程序中,我们一般会使用类似Log4j这样的日志框架来输出日志,而不是直接在代码中通过System.out.println()来输出日志.为什么要这么做呢?原因有两点.其一,我们希望日志能输出到文件中,而不是输出到应用程序的控制台中,这样更加容易收集和分析.其二

【spring Boot】Spring中@Controller和@RestController之间的区别

spring Boot入手的第一天,看到例子中的@RestController ............. 相同点:都是用来表示Spring某个类的是否可以接收HTTP请求 不同点:@Controller标识一个Spring类是Spring MVC controller处理器 @RestController:  a convenience annotation that does nothing more than adding the@Controller and @ResponseBody 

使用Spring Session实现Spring Boot水平扩展

本文使用Spring Session实现了Spring Boot水平扩展,每个Spring Boot应用与其他水平扩展的Spring Boot一样,都能处理用户请求.如果宕机,Nginx会将请求反向代理到其他运行的Spring Boot应用上,如果系统需要增加吞吐量,只需要再启动更多的Spring Boot应用即可. Spring Boot应用通常会部署在多个Web服务器上同时提供服务,这样做有很多好处: 单个应用宕机不会停止服务,升级应用可以逐个升级而不必停止服务. 提高了应用整体的吞吐量.

使用JWT保护你的Spring Boot应用 - Spring Security实战

作者 freewolf 原创文章转载请标明出处 关键词 Spring Boot.OAuth 2.0.JWT.Spring Security.SSO.UAA 写在前面 最近安静下来,重新学习一些东西,最近一年几乎没写过代码.整天疲于奔命的日子终于结束了.坐下来,弄杯咖啡,思考一些问题,挺好.这几天有人问我Spring Boot结合Spring Security实现OAuth认证的问题,写了个Demo,顺便分享下.Spring 2之后就没再用过Java,主要是xml太麻烦,就投入了Node.js的怀

Spring.Net在Mvc4.0中应用的说明

案例Demo:http://yunpan.cn/cJ5aZrm7Uybi3 访问密码 414b Spring.Net在Mvc4.0中应用的说明 1.引用dll       2.修改Global文件 (SpringMvcApplication)       3.控制器添加属性     4.WebConfig配置   <!--必须紧跟着configuration之后-->   <configSections>     <sectionGroup name="spring

spring事务-spring如何在只读事务中提交数据

问题描述 spring如何在只读事务中提交数据 现在有个需求,我现在要去查询一个对象,如果这个对象不存在在,就初始创建一个,但这个查询是只读事务,没办法提交.有什么解决方案? 一种方法就是将这个查询方法加读写事务,这个不是我希望的,因为这个方法大部分时候都是查询的.大家有什么解决方案可以在只读事务中转换为读写事务? 解决方案 只读事务中创建不合适.是不是可以在只读事务中通过消息等方式发送给读写事务进行数据添加. 关键添加后的数据是否在只读事务中要使用.如果需要使用那就得吧只读事务改成读写事务了.

spring框架,有些类中没有无参构造放方法,但是spring还是可以构造出该实例,它是怎么做到的?

问题描述 spring框架,有些类中没有无参构造放方法,但是spring还是可以构造出该实例,它是怎么做到的? spring的基础是反射,反射是依靠无参构造方法的,但是我的类中没有无参构造放方法,Spring还是给我构造出了实例,Spring是怎么做到的? 解决方案 反射也可以调用有参构造函数甚至私有构造函数的. 没有无参构造函数,你说的是没有写构造函数吧,那么java会产生一个默认的无参数共有构造函数的. 解决方案二: 不写构造器的话,java会默认生成一个无参构造器.写了的话,就不会生成了.

spring +springmvc+mybatis,service中调用dao接口报空

问题描述 spring +springmvc+mybatis,service中调用dao接口报空 搭建ssm,启动项目没问题,但是在service实现类中调用dao接口时,对象loginDao对象是空的,错误信息如下 log4j:ERROR Error occured while converting date. java.lang.NullPointerException at java.lang.System.arraycopy(Native Method) at java.lang.Abs