2

基本概念

  • log4j三大件
    logger、appender、layout

  • log等级
    ALL<TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF

包及类的logger

  • log4j.logger.<PACKAGE_NAME>=<LEVEL>

  • log4j.logger.<PACKAGE_NAME>.<CLASS_NAME>=<LEVEL>, <LOGGER_NAME>

appender

  • ConsoleAppender

  • FileAppender

    • RollingFileAppender

    • RandomAccessFileAppender

  • Messaging

    • JMSAppender

    • SMTPAppender

  • DB

    • JDBCAppender

    • JPAAppender

    • NoSQLAppender

  • Remote

    • SocketAppender

    • SyslogAppender

layout

  • PatternLayout

  • HTMLLayout

  • XMLLayout

  • JSONLayout

  • SerializedLayout

rolling file设置保留文件大小(可以用在测试环境,避免log堆积占用磁盘空间)

# Root logger option 
log4j.rootLogger=INFO, file   
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender   
#Redirect to Tomcat logs folder #log4j.appender.file.File=${catalina.home}/logs/logging.log   
log4j.appender.file.File=C:\\logigng.log 
log4j.appender.file.MaxFileSize=10MB 
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

pattern layout参数说明

  • %d{ABSOLUTE}
    打印时间; ABSOLUTE即使用HH:mm:ss,SSS格式

  • %5p
    打印日志级别(ERROR, DEBUG, INFO, etc.); 不满5个字符的以空格填充

  • %t
    打印线程名

  • %c{1}
    打印类及包名(只展示第一层);

  • %M
    打印方法名

  • %L
    打印行号

  • %m
    要打印的消息

  • %n
    换行

  • %highlight{pattern}{style}
    给符合指定格式的添加ANSI颜色

反模式

  • 重复log,比如dao层的exception抛出去了,还log

  • log的时候还是用换行

  • log东西太多、太长

  • test当中使用log,应该使用assert更合适

  • 异常没有log出来

  • 使用###之类的不统一的格式

  • 打印账户与密码等保密信息

最佳实践

  • 打印时间戳、线程名、类名、流水号、用户id

  • 使用rolling appender+maxFileSize和maxBackupIndex

  • 打印exception记得打印堆栈

  • 生产环境不要打印多余东西

  • 使用参数化,避免字符串拼接

  • logback或log4j2去掉enabled判断

  • static final 修饰

  • log级别要确定好

  • 打印上下文的值

  • 不打印用户名密码等安全保密信息

  • 注意系统磁盘空间+定期清理策略


codecraft
11.9k 声望2k 粉丝

当一个代码的工匠回首往事时,不因虚度年华而悔恨,也不因碌碌无为而羞愧,这样,当他老的时候,可以很自豪告诉世人,我曾经将代码注入生命去打造互联网的浪潮之巅,那是个很疯狂的时代,我在一波波的浪潮上留下...


引用和评论

0 条评论