Java日誌打印要點

基本概念

  • log4j三大件
    logger、appender、layoutapache

  • log等級
    ALL<TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF安全

包及類的logger

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

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

appender

  • ConsoleAppender測試

  • FileAppender線程

    • RollingFileAppender日誌

    • RandomAccessFileAppendercode

  • Messagingxml

    • 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級別要肯定好

  • 打印上下文的值

  • 不打印用戶名密碼等安全保密信息

  • 注意系統磁盤空間+按期清理策略

相關文章
相關標籤/搜索