统一对象消息编程详解——日志模块

    一般情况我们无需特意设计日志系统, 有许多成熟的日志工具,例如用日志门面slf4j 、日志log4j等,在代码中直接使用即可。但为了灵活和方便,我们还是设计了日志模块——TLLog,模块是对这些工具的一个封装,主要是封装了slf4j,利用log4j2来记录日志。一般的日志工具只是对日志的级别可控,由TLLog来控制日志的输出更加的灵活,不仅可以控制日志输出的级别,还能对日志输出的类(模块)、日志输出点(tag)进行控制。例如一个模块里面有5个地方输出日志,我们可以做到是否允许这个模块输出,或者只允许某个点输出。下面看日志模块的配置文件来说明:

<moduleConfig>
    <params>
        <ifLog value="true" />
        <level value="info" />
        <logModules value=""/>
        <noLogModules value="httpClient;myserviceRegistTask;HttpJsonClientHandler;
            viewfindReceivers1;info_waiting_transmit_2;info_waiting_transmit_1;stream_receiver"/>
    </params>
    <moduleSetting>
        <module name="HSServer"  levels="info;warn;debug" tags=""  ></module>
        <module name="myTaskManger"  levels="info;warn;error" tags=""  ></module>
    </moduleSetting>
</moduleConfig>

params项中:

iflog :定义是否输出日志

level:定义全局输出级别

logModules:定义允许输出日志的模块

noLogModules ;定义禁止输出日志的模块

logModule  比noLogModules 优先,如果定义了logModule,则noLogModules无效。上面配置中logModule为空,则只检查禁止模块。

moduleSetting 项可单独定义某个模块的日志输出级别及输出点(tags配置项)。

在日志输出使用中,为了方便,在基本模块类TLBaseModule中定义了日志输出方法 putLog,因此任何继承类都可使用、方便的输出日志而不用考虑日志的配置。我们看putLog方法:

  protected void  putLog(String content , LogLevel logLevel, String tag){
        if(params!=null )
        {
            String ifLog=params.get("ifLog");
            if( ifLog!=null && ifLog.equals("false"))
                return ;
        }
        putMsg("log", createMsg().setAction("setLog")
                .setParam("module",name)
                .setParam("logLevel",logLevel)
                .setParam("tag",tag)
                .setParam("content",content)  );
    }

  如果该类的参数ifLog设置了false则不日志输出,也就是每个模块可自行决定日志是否输出。

tag 参数定义输出点,日志配置中可以对不同的tag点进行输出控制。

 方法里通过直接给日志模块log发送消息来输出日志。日志模块log在工厂配置中指向了TLlog,这意味着我们也可以通过更改工厂配置来更换日志模块。工厂配置中日志模块:

<module name="log" classfile="cn.tianlong.tlobjcet.modules.TLLog"  configfile="log_config.xml"/>

在android环境下就是通过工厂配置来更换了日志模块。

目前日志输出工具类使用log4j2,因此在入口程序中需首先指定log4j2的配置文件路径:

String configdir = "/person/";
String path =Main.class.getResource(configdir).getPath();
System.setProperty("log4j.configurationFile", path+"log4j2.xml");

由于框架的动态配置功能(启用配置文件监听模块),因此在运行中我们可以动态的更改日志配置文件来灵活日志控制。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值