ELK服务部署—企业级的日志分析系统

d7元组和字典

  返回  

日志处理框架

2021/7/21 0:36:42 浏览:

1. 常用的日志处理框架

对于一个应用程序来说日志记录是必不可少的一部分。线上问题追踪,错误排查,基于日志的业务逻辑统计分析等都离不日志。

日志的管理是系统很重要的一部分,千万不可忽略其重要性。完整的日志将会在系统维护中起着异常重要的作用。

在Java领域存在多种日志框架,目前常用的日志框架包括Log4j,Log4j2,Commons Logging,Slf4j,Logback,Jul。

2. Log4j简介

Log4j:Log For Java(Java的日志)是Apache提供的一个开源的Java主流的日志框架。

3. Log4j的日志级别

Log4j定义了8个日志级别(除去OFF和ALL,可以说分为6个级别),优先级从高到低依次为:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL。

在Log4j中建议只使用DEBUG、INFO、WARN、ERROR四个日志级别。

  • ALL 最低等级的,用于打开所有日志记录。
  • TRACE designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日志级别,一般不会使用。
  • DEBUG 指出细粒度信息事件对调试应用程序是非常有帮助的,主要用于开发过程中打
    印一些运行信息。
  • INFO 消息在粗粒度级别上突出强调应用程序的运行过程。打印一些你感兴趣的或者重
    要的信息,这个可以用于生产环境中输出程序运行的一些重要信息,但是不能滥用,避
    免打印过多的日志。
  • WARN 表明会出现潜在错误的情形,有些信息不是错误信息,但是也要给程序员的一
    些提示。
  • ERROR 指出虽然发生错误事件,但仍然不影响系统的继续运行。打印错误和异常信息,
    如果不想输出太多的日志,可以使用这个级别。
  • FATAL 指出每个严重的错误事件将会导致应用程序的退出。这个级别比较高了。重大错
    误,这种级别你可以直接停止程序了。
  • OFF 最高等级的,用于关闭所有日志记录。

4. Log4j配置文件详解

4.1 Log4j配置文件名

log4j 配置文件名:log4j.properties

Log4j 配值文件存放位置:项目的资源目录中

4.2 配置根Logger

log4j.rootLogger = [level],appenderName,appenderName2,…

level是日志记录的优先级,优先级从低到高分别是 DEBUG,INFO,WARN,ERROR。通过在这里定义的级别,可以控制到应用程序中相应级别的日志信息的开关,比如在这里定义了INFO级别,则应用程序中所有DEBUG级别的日志信息将不被打印出来。

appenderName 就是指定日志信息输出到哪个地方。可同时指定多个输出目的地。

4.3 Log4j中的 appender

  • org.apache.log4j.ConsoleAppender(输出到控制台)
  • org.apache.log4j.FileAppender(输出到文件)
  • org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
  • org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
  • org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
  • org.apache.log4j.jdbc.JDBCAppender(将日志信息添加数据库中)

4.4 向控制台输出的appender

### appender.console输出到控制台 ###
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=<%d> %5p (%F:%L) [%t] (%c) - %m%n
log4j.appender.console.Target=System.out

4.5 向文件输出的appender

### appender.logfile输出到日志文件 ###
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=SysLog.log
log4j.appender.logfile.MaxFileSize=500KB
log4j.appender.logfile.MaxBackupIndex=7
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=<%d> %p (%F:%L) [%t] %c - %m%n

4.6 向数据库输出的appender

log4j.appender.logDB=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.logDB.layout=org.apache.log4j.PatternLayout
log4j.appender.logDB.Driver=com.mysql.jdbc.Driver
log4j.appender.logDB.URL=jdbc:mysql://localhost:3306/bjsxt
log4j.appender.logDB.User=root
log4j.appender.logDB.Password=root
log4j.appender.logDB.Sql=INSERT INTO
logs(project_name,create_date,level,category,file_name,thread_name,line,all_category,message)values('logDemo','%d{yyyy-MM-ddHH:mm:ss}','%p','%c','%F','%t','%L','%l','%m')

4.7 通过包名控制日志输出级别

log4j.logger.org.apache=FATAL
log4j.logger.org.apache.commons=ERROR
log4j.logger.org.springframework=ERROR
log4j.logger.com.bjsxt=ERROR

4.8 Log4j 的输出格式

Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,打印参数如下:

%m 输出代码中指定的消息

%p 输出优先级,即 DEBUG,INFO,WARN,ERROR,FATAL

%r 输出自应用启动到输出该 log 信息耗费的毫秒数

%c 输出所属的类目,通常就是所在类的全名

%t 输出产生该日志事件的线程名

%n 输出一个回车换行符,Windows 平台为“\r\n”,Unix 平台为“\n”

%d 输出日志时间点的日期或时间,默认格式为 ISO8601,也可以在其后指定格式,如:%d{yyyy年MM月dd日 HH:mm:ss,SSS},输出类似:2020年05月01日22:10:28,921

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数 如:Testlog.main(TestLog.java:10)

%F 输出日志消息产生时所在的文件名称

%L 输出代码中的行号

%x 输出和当前线程相关联的 NDC(嵌套诊断环境),像 java servlets 多客户多线程的应用中

%% 输出一个"%"字符

可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:

%5c: 输出 category 名称,最小宽度是 5,category<5,默认的情况下右对齐

%-5c:输出 category 名称,最小宽度是 5,category<5,"-"号指定左对齐,会有空格

%.5c:输出 category 名称,最大宽度是 5,category>5,就会将左边多出的字符串,<5不会有空格

5. Log4j的使用方式

5.1 Log4j.jar

添加 jar 包:log4j.jar

添加配置文件:log4j.properties

log4j.rootLogger=debug,console,logfile

### appender.console输出到控制台 ###
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=<%d> %5p (%F:%L) [%t] (%c) - %m%n
log4j.appender.console.Target=System.out

### appender.logfile输出到日志文件 ###
log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=SysLog.log
log4j.appender.logfile.MaxFileSize=500KB
log4j.appender.logfile.MaxBackupIndex=7
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=<%d> %p (%F:%L) [%t] %c - %m%n

通过 Log4j 的 API 完成日志

package com.test.test;

import org.apache.log4j.Logger;

public class Log {
    public final static Logger logger = Logger.getLogger(Log.class);

    public static void main(String[] args) {
        logger.info("我爱学习,学习使我快乐");
        logger.debug("我不爱你了");
        try {
            String str = null;
            str.length();
        } catch (Exception e){
            logger.error(e);
        }
    }
}

5.2 commons-logging + log4j

commons-logging 是 Apache 的 Commons 项目中提供的一个高层的日志框架,是门面模式的典型应用。commons-logging 本身没有实现真正的日志能力。它可以挂接不同的日志系统,默认情况下,Commons Loggin 自动搜索并使用 Log4j,如果没有找到 Log4j,再使用 JDK Logging。

添加 jar 包:log4j.jar commons-loggin.jar

package com.test.test;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class CommonLog {
    public final static Log log = LogFactory.getLog(CommonLog.class);

    public static void main(String[] args) {
        log.info("嘿嘿嘿···");
    }
}

5.3 slf4j-api + slf4j-log4j + log4j

SLF4J的全称是Simple Logging Facade for Java,即简单日志门面应用。SLF4J并不是具体的日志框架,而是作为一个简单门面服务于各类日志框架,如java.util.logging, logback和log4j。

添加 jar 包:slf4j-api.jar slf4j-log4j.jar log4j.jar

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogDemo {
	private static final Logger logger = LoggerFactory.getLogger(LogDemo.class);
}

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号