• 将日志写入数据库


    之前做的一个项目有这么个要求,在日志管理系统里,需要将某些日志信息存储到数据库里,供用户、管理员查看分析。因此我就花了点时间搞了一下这一功能,各位请看。

    摘要:我们知道log4j能提供强大的可配置的记日志功能,有写文件的、打印到控制台的等等,但有时我们需要它把日志输出到后台数据库中,log4j的强大的可扩展性支持了这一点,以下就是具体的实现
    关键词:log,log4j,日志,Java,DB,数据库,slf4j
    前提:已经配置好slf4j、log4j,能正常的往文件或控制台写日志
    需求:将日志写入到数据库中
    说明:使用log4j-1.2.17.jar,slf4j-api-1.7.5.jar,slf4j-log4j12-1.6.6.jar。

     

    步骤一:

    你得先能写入数据库,编写一个能往数据库日志表中写数据的接口,无论是WebService还是什么,这里假如是一个Java接口。
    Log是定义的一个日志类,使用LogService对象调用logBll.add(Log log)方法即能够向数据库中添加一条日志信息。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Log {
        private Long id;
        private String logNum;
        private String userId;
        private Calendar time;
        private int type;
        private String content;
        ...
    }

    步骤二:

    编写一个继承自AppenderSkeleton类的类,并重写它的append方法。在append方法里面,即调用了上一步定义的Java接口,logBll.add(log),向数据库中写入一条日志信息。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public class DBAppender extends AppenderSkeleton {
     
        private LogService logBLL = new LogService();
     
        @Override
        protected void append(LoggingEvent arg0) {
            if (!arg0.getLoggerName().startsWith(Constants.ProjetNS))
                return;
            Log log = new Log();
            log.setType(arg0.getLevel().toInt());
            log.setTime(Calendar.getInstance());
            log.setUserId("system");
            log.setContent(arg0.getRenderedMessage());
            logBll.add(log);
        }
    }

     

    步骤三:

    改新log4j.properties配置文件,类似如下所示。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # Root logger option
    log4j.rootLogger=WARN, stdout, file, db
     
    # Direct log messages to stdout
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
     
    log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
    log4j.appender.file.File = logs/log.log
    log4j.appender.file.Append = true
    log4j.appender.file.Threshold = ERROR
    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
     
    log4j.appender.db = com.aitanjupt.angel.log.DBAppender 
    以上文件主要增加配置了一个日志输出方向,向数据库输出,并指定了具体的处理类。
    在需要输出日志的地方,正常的使用:
    private Logger logger = LoggerFactory.getLogger(SpringServiceSupport.class);
    logger.error(ex);...即可。</span
  • 相关阅读:
    一篇关于兼容问题的基础总结
    js数组遍历some,foreach,map,filter,every对比
    webpack笔记1
    前段集成解决方案grunt+yeoman初步认识
    简单的Linq笔记
    .net 使用Json(),maxJsonLength属性设置的值问题
    .net using使用小结
    根据某个字段的长度,且不包含”,“,作为条件查询
    JS Replace() 全部替换字符的用法
    SQL分页查询,纯Top方式和row_number()解析函数的使用及区别
  • 原文地址:https://www.cnblogs.com/mingf123/p/3845030.html
Copyright © 2020-2023  润新知