(小结)日志框架

说明

开发spark相关项目的时候, 在日志框架的选用上踩了一些坑, 记录如下:

  1. 原本计划使用logback, slf4j提示异常.
  2. 尝试在maven设置exclusions, 以排除原有的log4j框架. 但是hadoop相关架构大多使用log4j框架, 排除起来很费精力, 而且大量设置exclusions降低了pom文件的可读性.
  3. 决定和原日志框架保持一致, 也就是沿用log4j框架
  4. log4j.rootCategory=WARN, console是老式写法, 效果等同于log4j.rootLogger, 使用后者即可
  5. 配置文件中指定的Appender对应同名的类, 可以在代码中查看以帮助理解
补充
  1. slf4j是门面模式的典型应用. 详细说明请参考: https://www.cnblogs.com/xrq730/p/8619156.html
  2. 可以通过slf4j调用的日志框架有: logback, log4j, log4j2. 如果环境依赖中存在多个可调用的日志框架, slf4j会声明异常.
# 提示了两个`Found binding`, 这就表示环境依赖中存在多个日志框架
# 也可发现找到的类都是`StaticLoggerBinder.class`, `slf4j`就是通过这个类, 和各种日志框架联系在一起
SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [jar:file:/slf4j-log4j12-1.7.16.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/log4j-slf4j-impl-2.4.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.

配置文件

log4j.properties输出日志格式的常见参数如下

标识 含义
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该日志讯息所耗费的毫秒数
%t 输出产生该日志事件的线程名
%f 输出日志讯息所属的类别的类别名
%c 输出日志讯息所属的类的全名
%d 输出日志时间点的日期或时间,指定格式的方式: %d{yyyy-MM-dd HH:mm:ss}
%l 输出日志事件的发生位置,即输出日志讯息的语句在他所在类别的第几行。
%m 输出代码中指定的讯息,如log(message)中的message
%n 输出一个换行符号

基本配置如下

### 日志显示格式 ###
### 详细记录, 用于记录磁盘
pattern4file = [%-5p] %d{yyyy-MM-dd HH:mm:ss.SSS} %c[%t]: %m%n
### 简略记录, 用于控制台调试
pattern4cons = [%-5p] %d{HH:mm:ss} %l: %m%n
# 指定输出信息的级别和目的地, 第一个参数是显示级别, 第二个参数是自定义appender的名字
# 显示级别由低到高为: ALL DEBUG INFO WARN ERROR FATAL
log4j.rootLogger = DEBUG, console, D, E

### 输出信息到控制台 ###
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold = INFO
log4j.appender.console.target=System.err
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=${pattern4cons}

### 输出DEBUG 级别以上的日志到磁盘 ###
# DailyRollingFileAppender, 以天为单位, 分文件记录日志
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
# 可以指定相对目录
log4j.appender.D.File = ./logs/debugDemo.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG 
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = ${pattern4file}

### 输出ERROR 级别以上的日志到磁盘 ###
log4j.appender.E = org.apache.log4j.DailyRollingFileAppender
log4j.appender.E.File = C://myDemo/logs/errorDemo.log
log4j.appender.E.Append = true
log4j.appender.E.Threshold = ERROR 
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern = ${pattern4file}

你可能感兴趣的:(使用说明)