logback-spring.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径--> <springProperty scope="context" name="LOG_HOME" source="logback.path"/> <!-- 控制台输出 --> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%t:%r]-[%p] %logger{50}:%L %X{requestId} - %msg%n</pattern> </encoder> </appender> <!-- 按照每天生成日志文件 --> <appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <File>${LOG_HOME}/file.log</File> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <!--日志文件输出的文件名--> <FileNamePattern>${LOG_HOME}/file-%d{yyyy-MM-dd}-%i.log</FileNamePattern> <!--日志文件保留天数--> <MaxHistory>280</MaxHistory> <!-- 超过500MB自动归档 --> <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"> <maxFileSize>500MB</maxFileSize> </timeBasedFileNamingAndTriggeringPolicy> </rollingPolicy> <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder"> <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符--> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS}[%t:%r]-[%p] %logger{50}:%L %X{requestId} - %msg%n</pattern> </encoder> </appender> <logger name="com.ucmed.unified.mapper" level="INFO"></logger> <!-- 日志输出级别 --> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="LOGFILE"/> </root> </configuration> |
View Details
Logback使用conversionRule自定义字符的坑 背景 想在logback输出的文件目录中加入ip,使用 <conversionRule conversionWord="ip" converterClass="com.test.config.LogIpConfig" />结果一直报错: There is no conversion class registered for conversion word [ip] [ip] is not a valid conversion word 原因 当需要在日志记录中添加自定义文本时,仅支持在<pattern>中添加ip或其他自定义的字段,不支持在目录或文件名<fileNamePattern>中使用。 可能是格式或类书写错误。如class路径错误,logger的name指向不存在的包名。 当使用失败时,建议使用删除大法,将各种配置都删除,只留下一个纯净的结构,如 http://logback.qos.ch/manual/layouts.html
1 2 3 4 5 6 7 8 |
public class MySampleConverter extends ClassicConverter { long start = System.nanoTime(); @Override public String convert(ILoggingEvent event) { long nowInNanos = System.nanoTime(); return Long.toString(nowInNanos-start); } } |
1 2 3 4 5 6 7 8 9 10 11 12 |
<configuration> <conversionRule conversionWord="nanos" converterClass="chapters.layouts.MySampleConverter" /> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%-6nanos [%thread] - %msg%n</pattern> </encoder> </appender> <root level="DEBUG"> <appender-ref ref="STDOUT" /> </root> </configuration> |
其他方法 如果想在文件目录或文件名中添加自定义字段,可以引入springboot中的参数<springProperty scope="context" name="LOG_HOME" source="logPath"/>,此处不展开。 如果需要使用springboot配置中不存在的参数,可以在logback-spring.xml中加入<define> 如
1 2 3 4 5 6 7 |
<define name="initIp" class="com.test.util.InitIpUtil"/> <springProperty scope="context" name="port" source="server.port" /> ... <fileNamePattern> /data/logs/java-${initIp}-${port} </fileNamePattern> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
@Component public class InitIpUtil extends PropertyDefinerBase { @Override public String getPropertyValue() { return initIpAndPort(); } public static String initIpAndPort() { String subIp = null; try{ InetAddress addr = InetAddress.getLocalHost(); String ip = addr.getHostAddress(); subIp = ip.substring(ip.lastIndexOf(".",ip.lastIndexOf(".")-1)+1); }catch (Exception e){ e.printStackTrace(); } return subIp; } } |
即可在目录或文件名中添加自己想要的参数。 from:https://blog.csdn.net/NNNathan/article/details/114667320
View Details @Bean
public MessageConverter messageConverter() {
return new Jackson2JsonMessageConverter();
}