Drools给日志打标签

一、定义日志模型

public class Logger {
    // 日志编号
    private String id;

    // 目标IP
    private String targetIp;

    // 目标端口
    private String targetPort;

    // 源IP
    private String sourceIp;

    // 源端口
    private String sourcePort;

    // 创建时间
    private long createTime;

    // 资产IP
    private String assetsId;

    public List<String> getTags() {
        return tags;
    }

    public void setTags(List<String> tags) {
        this.tags = tags;
    }

    private List<String> tags = new ArrayList<String>();

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getTargetIp() {
        return targetIp;
    }

    public void setTargetIp(String targetIp) {
        this.targetIp = targetIp;
    }

    public String getTargetPort() {
        return targetPort;
    }

    public void setTargetPort(String targetPort) {
        this.targetPort = targetPort;
    }

    public String getSourceIp() {
        return sourceIp;
    }

    public void setSourceIp(String sourceIp) {
        this.sourceIp = sourceIp;
    }

    public String getSourcePort() {
        return sourcePort;
    }

    public void setSourcePort(String sourcePort) {
        this.sourcePort = sourcePort;
    }

    public long getCreateTime() {
        return createTime;
    }

    public void setCreateTime(long createTime) {
        this.createTime = createTime;
    }

    public String getAssetsId() {
        return assetsId;
    }

    public void setAssetsId(String assetsId) {
        this.assetsId = assetsId;
    }
}

二、编写规则算法文件

import com.xxx.drools.logger.Logger;

rule "logger1"
    when
        $logger : Logger(targetIp=="192.168.26.108")
    then
        $logger.getTags().add("测试机");
        System.out.println("Logger:"+$logger.getTargetIp());
end

三、编写drools加载代码

import java.util.Collection;

import org.drools.core.event.DebugAgendaEventListener;
import org.drools.core.event.DebugRuleRuntimeEventListener;
import org.kie.api.KieServices;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.kie.internal.KnowledgeBase;
import org.kie.internal.KnowledgeBaseFactory;
import org.kie.internal.builder.KnowledgeBuilder;
import org.kie.internal.builder.KnowledgeBuilderFactory;
import org.kie.internal.definition.KnowledgePackage;
import org.kie.internal.io.ResourceFactory;
import org.kie.internal.runtime.StatefulKnowledgeSession;

public class LoggerTag {
    public void runRules(String[] rules, Object[] facts) throws Exception {

        KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
        KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
                .newKnowledgeBuilder();

        for (int i = 0; i < rules.length; i++) {
            String ruleFile = rules[i];
            System.out.println("Loading file: " + ruleFile);
            kbuilder.add(ResourceFactory.newClassPathResource(ruleFile,
                    LoggerTag.class), ResourceType.DRL);
        }

        Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();

        kbase.addKnowledgePackages(pkgs);

        StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();

        for (int i = 0; i < facts.length; i++) {
            Object fact = facts[i];
            System.out.println("Inserting fact: " + fact);
            ksession.insert(fact);
        }

        ksession.fireAllRules();
    }

}

四、测试代码

public class Example1 {
	public static void main(String[] args) throws Exception {
		List<Logger> loggerList = LoggerData.getLogger();
		new LoggerTag().runRules(new String[] { "logger1.drl" },
				loggerList.toArray());
		if (loggerList != null && loggerList.size() > 0) {
			for (Logger logger : loggerList) {
				for (String tag : logger.getTags()) {
					System.out.println("tag:"+tag);
				}
			}
		}
	}
}
时间: 2024-10-28 19:41:32

Drools给日志打标签的相关文章

Drools文档(八) 规则语言参考

规则语言参考 概述 Drools有一个"本地"的规则语言.这种格式在标点符号上非常轻,并且通过"扩展器"支持自然语言和领域特定的语言,使语言能够变形到您的问题领域.本章主要与本机规则格式一致.用于表示语法的图表被称为"铁路"图表,它们基本上是语言术语的流程图.技术上非常热衷的也可以参考DRL.g这是规则语言的Antlr3语法.如果您使用Rule Workbench,则可以通过内容帮助为您完成许多规则结构,例如,输入"ru"并按

Syslog-ng+Rsyslog收集日志:收集SSH用户命令(四)

有些时候需要用到堡垒机,但要知道用户都用那些命令操作过. rsyslog属性的名称中以$开头的是从本地系统获得的变量.不带$是从消息中获得变量 一.先配置系统变量记录SSH命令,并生成文件,位置/var/log/ssh.log. #vi /etc/profile.d/ssh.sh  //创建一个文件ssh.sh脚本去存放变量 export HISTORY_FILE=/var/log/ssh.log export PROMPT_COMMAND='{ date "+%Y-%m-%d %T #####

Nginx容器日志收集方案fluentd+elasticsearch+kilbana

容器技术在发展到今天已经是相当的成熟,但容器不同于虚拟机,我们在使用容器的同时也有很多相关的技术问题需要解决,比如:容器性能监控,数据持久化,日志监控与分析等.我们不能像平时使用虚拟机一样来管理容器,本文我将给大家带来fluentd+elasticsearch+kilbana容器日志收集方案. 我们将通过容器的fluentd日志驱动将系统内产生的日志发送给fluentd服务端,再过来fluentd服务端处理所有容器发送过来的日志,再转发到elasticsearch,最后通过kilbana来展示和

Ubuntu 下 使用 adb logcat 显示 Android 日志

作者 : 万境绝尘  转载请著名出处 eclipse 自带的 LogCat 工具太垃圾了, 开始用 adb logcat 在终端查看日志; 1. 解析 adb logcat 的帮助信息 在命令行中输入 adb logcat --help 命令, 就可以显示该命令的帮助信息; [email protected]:~$ adb logcat --help Usage: logcat [options] [filterspecs] options include: -s Set default fil

jvm的GC日志分析 [转]

jvm的GC日志分析 标签: jvm内存javagc 2015-06-22 16:37 1566人阅读 评论(1) 收藏 举报  分类: Java(4)  JVM的GC日志的主要参数包括如下几个: -XX:+PrintGC 输出GC日志 -XX:+PrintGCDetails 输出GC的详细日志 -XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式) -XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:5

【Android】ADB常用指令与logcat日志(转)

ADB命令简介 ADB是一个功能强大的命令行工具.通过它可以直接和模拟器或真机进行交互.它是一个具有客户端和服务器端的程序. 它主要由三个部分组成: 客户端,它运行在你的开发机上,你可以通过执行adb命令来唤起一个客户端.其他的工具例如:ADT插件以及DDMS也可以创建一个ADB客户端. 服务端,它运行在你的后台进程,这个服务管理客户端和运行在你模拟起或真机上的守护进程. 守护进程,它运行在每台模拟器或真机的后台进程. 当你启动一个adb客户端的时候,客户端会首先检测是否已经有adb服务进程运行

Syslog-ng+Rsyslog收集日志:RELP可靠传输,替代UDP、TCP(五)

在传输过程中TCP虽然比UDP可靠,但是是明文传输,Rsyslog提供了一个比TCP更可靠的传输,RELP.RELP传输,不会丢失信息,但只在rsyslogd 3.15.0及以上版本中可用. 使用RELP需要两部,开启omrelp模块,在传输时将TCP的@,替换成":omrelp:"(黄颜色部分) 用法: *.* :omrelp:server:port 例子: *.* :omrelp:192.168.0.1:514 vi /etc/rsyslog.d/ssh-log.conf # rs

随笔标签实验

本文测试,如何在Windows Live Write软件中为随笔添加便签. 首先点击图片中的查看全部按钮: 在弹出的日志属性窗口中的关键字中和数据域.摘要中分别输出Test1和Test2.Test3.然后发布这个日志. 最总生成的日志中标签为:Test1,说明要想随笔中添加标签需要在关键字中设置. 随笔标签实验

adb 命令抓取log日志方法

1.确保手机已连接电脑,并开启调试 2.输入指令:  adb logcat  *:E  >c:\log.txt 如图所示: "E"  表示log日志级别 adb log日志级别 : 每一个输出的Android日志信息都有一个标签和它的优先级. · 日志的标签是系统部件原始信息的一个简要的标志.(比如:"View"就是查看系统的标签). · 优先级有下列集中,是按照从低到高顺利排列的: V - Verbose (lowest priority) D - Debu