标签:回滚 /tmp manual etl 变量 tps 基本 hot fast
参考Spring Boot官方文档 日志部分
Spring Boot默认情况下,当使用"Starters" 使用Logback输出日志
, 还包括适当的Logback路由, 确保其他的日志框架(Java Util Logging, Commons Logging, Log4j, SLF4J)都能正常使用
Sping Boot文档的 26.5 Custom Log Configuration 章节,说明了自定义日志配置方法
多样的日志系统可以通过
loggin.config
配置指定配置文件依赖于开发者选择的日志框架. 这些对应的配置文件会被加载
日志框架 | 配置文件 |
---|---|
Logback | logback-spring.xml , logback-spring.groovy , logback.xml , logback.groovy |
Log4j2 | log4j2-spring.xml , log4j2.xml |
JDK(JAVA Util Logging) | logging.properties |
Log4j2为何物就不介绍了. Log4j2官网
配置的方案 在官方文档 77.2 Configure Log4j for Logging
pom.xml
中去掉Logback, 引入log4j2
<!-- 节选 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
使用xml格式配置文件, 无需添加额外的依赖库.
使用 yaml/yml格式配置文件. 需要额外引入依赖库
<!-- 解析yml配置 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
</dependency>
使用 json 格式配置文件, 需要额外引入依赖库
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
指定spring boot配置文件
application.yaml
文件配置如下
logging:
config: classpath:log4j2.xml
如需了解Log4j2详尽的配置, 可访问官方文档
大概介绍一下Log4j2的基本信息
日志的Level分为:
这里介绍一下博主经常使用的一种日志方式 RollingFileAppender
以一个具体的配置为例
<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="trace" strict="true" name="LogConfig">
<Properties>
<Property name="filepath">/tmp/log4j2</Property>
</Properties>
<Appenders>
<Console name="STDOUT" target="SYSTEM_OUT">
<PatternLayout>
<Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern>
</PatternLayout>
</Console>
<RollingFile name="logService"
fileName="${filepath}/logService.log"
filePattern="${filepath}/bak/logService-%d{yy-MM-dd HH:mm:ss}.log.gz">
<PatternLayout>
<Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern>
</PatternLayout>
<Policies>
<CronTriggeringPolicy schedule="1 * * * * ?" evaluateOnStartup="true"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="fileLogger" level="debug" additivity="false">
<AppenderRef ref="logService"/>
<AppenderRef ref="STDOUT"/>
</Logger>
<Root level="trace">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
</Configuration>
status
: Level枚举型, 控制输出Log4j事件信息, 默认 errorname
: 配置名称strict
: 是否使用严格的XML格式. 推荐使用, 规范开发者的配置编写, 不支持jsonp配置设置配置文件全局的参数变量. 用于减少自定义配置信息的重复编码.
<Properties>
<Property name="filepath">/tmp/log4j2</Property>
</Properties>
配置下文中, 可以使用 ${filepath}
来代替 /tmp/log4j2
Log4j2提供了丰富的Appender
项目中比较常用的是 ConsoleAppender
和 RollingFileAppender
.
接下来对上述的Appender配置参数的说明
<Appenders>
<!-- ConsoleAppender -->
<!-- name Appender名称 -->
<!-- target 枚举型(SYSTEM_OUT, SYSTEM_ERR). 默认 SYSTEM_OUT -->
<Console name="STDOUT" target="SYSTEM_OUT">
<!-- 输出格式 详细配置见下文 -->
<PatternLayout>
<Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern>
</PatternLayout>
</Console>
<!-- RollingFileAppender -->
<!-- fileName 输出的问题名称, 使用绝对路径确保日志位置的正确性, 并且确保目录有进程用户可写权限 -->
<!-- filePattern 日志回滚的文件命名规则 -->
<RollingFile name="logService"
fileName="${filepath}/logService.log"
filePattern="${filepath}/bak/logService-%d{yy-MM-dd HH:mm:ss}.log.gz">
<PatternLayout>
<Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern>
</PatternLayout>
<Policies>
<!-- 按Cron定时任务回滚文件-->
<!-- schedule Cron表达式 -->
<!-- evaluateOnStartup (规则: 启动时,检查判断目标文件最后的修改时间, 如果cron规则判断该文件需要回滚,则直接回滚文件.) 是否开启该规则操作 -->
<CronTriggeringPolicy schedule="1 * * * * ?" evaluateOnStartup="true"/>
</Policies>
</RollingFile>
</Appenders>
Layout有多种格式输出
项目中一般使用Pattern 按行输出逐条信息, 配置如下:
<!-- 节选配置 -->
<PatternLayout>
<Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern>
</PatternLayout>
%
+ char/word
代表一种输出的信息或者格式
格式 | 输出 |
---|---|
%d, %d{DEFAULT} | 2012-11-02 14:34:02,781 |
%d{UNIX} | 1351866842 |
%d{UNIX_MILLIS} | 1351866842781 |
%d{yyyy-MM-dd HH:mm:ss,SSS} | 2012-11-02 14:34:02,781 |
输出调用的类名
%c{number} , 控制类型的长度
输出等级 TRACE, DEBUG, INFO, WARN, ERROR, FATAL
%heighlight{xxx}
xxx将会带有颜色样式, 并且和Level相关, 一般用于debug调试信息使用
可添加文本样式
根据操作系统的输出不同的换行标识符用户日志换行, 最好别使用 \n
, \r\n
等换行符号
其他还有很多标识符号, 参考 官方文档
Root
元素, 不设置 Root
元素, 将会默认使用类似如下的配置<Root level="error">
<AppenderRef ref="Console" />
</Root>
Logger
<Loggers>
<!-- name 必填且唯一 -->
<!-- level 设置输出最低级别 默认error -->
<!-- additivity 是否在父Logger输出, 默认 true -->
<Logger name="fileLogger" level="debug" additivity="false">
<!-- 上文中定义的Appender name -->
<AppenderRef ref="logService"/>
<AppenderRef ref="STDOUT"/>
</Logger>
<Root level="ERROR">
<AppenderRef ref="STDOUT"/>
</Root>
</Loggers>
以demo为例
package info.chiwm.log4j2.service;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;
/**
* @author chiwm@kuyumall.com
* @ClassName: Log4j2ServiceImpl
* @Description:
* @date 2018/1/4 上午11:10
*/
@Service
public class Log4j2ServiceImpl implements Log4j2Service {
// 使用LogManager获取配置Logger
private static Logger logger = LogManager.getLogger("fileLogger");
@Override
public void info(String msg) {
// 输出日志
// 特别注意 不要使用 `+` 去拼接信息, 这样在控制输出级别之后, 有些日志操作不会打印, 但是它去操作了新字符串创建, 使用 `{}` 去代替 `+`
logger.info("info {}", msg);
}
@Override
public void error() {
logger.error("error");
}
@Override
public void warn() {
logger.warn("warn");
}
@Override
public void debug() {
logger.debug("debug");
}
@Override
public void trace() {
logger.trace("trace");
}
}
前面的配置步骤,配置,使用步骤,大概描述了Log4j2的使用.
欢迎评论区指出错误或者探讨相关的问题
Spring Boot + Log4j2 日志框架配置 (Maven)
标签:回滚 /tmp manual etl 变量 tps 基本 hot fast
原文地址:http://blog.51cto.com/11931236/2058708