logback基础知识 DBAppend重写

本文详细介绍了Logback的基础知识,包括配置文件logback.xml的结构和功能,如设置日志输出路径、控制台输出、日志文件滚动策略等。特别讨论了DBAppender的使用,如何将日志异步写入数据库,并通过实例展示了不同配置方式下的日志打印效果。
摘要由CSDN通过智能技术生成
 问题:logback的DBAppender只能写入4个参数,而且参数名字固定,保存数据的表名固定,因此解决以上问题,需要重写DBAppender;
而且还自己从数据库定义各种类型的日志级别

方案:除logback的三张表外,其它再增加2张表,分别为分类表和需要定义的package或class,logback的表名可以进行修改
1、修改表名和列名:logback的表名可以修改成你需要的表名,只需要在AppDBNameResolver里面修改getTableName方法的返回值;
列名也是一样的,只需要修改getColumnName的返回值;
如下:
public  class  MyDBNameResolver  implements  DBNameResolver {

   private  String  tableNamePrefix  =  "s_"  ;

   private  String  tableNameSuffix  =  ""  ;

   private  String  columnNamePrefix  =  ""  ;

   private  String  columnNameSuffix  =  ""  ;

   //修改表名
   public  <N  extends  Enum<?>> String getTableName(N  tableName ) {
    System. out .println(  " getTableName "  +  tableName  );
     return  tableNamePrefix  +  tableName  .name().toLowerCase() +  tableNameSuffix ;
  }

  //修改列名
   public  <N  extends  Enum<?>> String getColumnName(N  columnName ) {
    System. out .println(  " getColumnName "  +  columnName  +  " "  +  columnName .name().toLowerCase() );
     if ( "arg0" .equals(  columnName .name().toLowerCase())){
       return  "log_type" ;
    } else
     return  columnNamePrefix  +  columnName  .name().toLowerCase() +  columnNameSuffix ;
  }
logback.xml中增加如下:
<  dbNameResolver  class = "com.javacodegeeks.examples.logbackmdcexample.MyDBNameResolver" />增加到 <  appender>中

2、增加参数
需要重写DBAppender,主要在以下地方:
  static  final  int  TIMESTMP_INDEX  = 1;
   static  final  int     FORMATTED_MESSAGE_INDEX   = 2;
   static  final  int     LOGGER_NAME_INDEX  = 3;
   static  final  int     LEVEL_STRING_INDEX  = 4;
   static  final  int     THREAD_NAME_INDEX  = 5;
   static  final  int     REFERENCE_FLAG_INDEX  = 6;
   static  final  int     ARG0_INDEX  = 7;
   static  final  int     ARG1_INDEX  = 8;
   static  final  int     ARG2_INDEX  = 9;
   static  final  int     ARG3_INDEX  = 10;
   static  final  int     ARG4_INDEX  = 11;//增加的一个参数

bindLoggingEventArgumentsWithPreparedStatement方法中修改:对应的数字4改成你增加到的数字
void  bindLoggingEventArgumentsWithPreparedStatement (PreparedStatement  stmt  ,
      Object[]  argArray )  throws  SQLException {

     int  arrayLen  =  argArray  !=  null  ?  argArray  . length  : 0;

     for ( int  i  = 0;  i  <  arrayLen  &&  i  < 5;  i ++) {
       stmt .setString(  ARG0_INDEX + i  , asStringTruncatedTo254( argArray [ i ]));
    }
     if ( arrayLen  < 5) {
       for ( int  i  =  arrayLen ;  i  < 5;  i ++) {
         stmt .setString(  ARG0_INDEX + i  ,  null );
      }
    }
  }

如果还增加了其它字段到数据库且,可以修改 bindCallerDataWithPreparedStatement 方法
void  bindCallerDataWithPreparedStatement(PreparedStatement  stmt ,
      StackTraceElement[]  callerDataArray )</
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值