zoukankan      html  css  js  c++  java
  • 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);
    				}
    			}
    		}
    	}
    }
    
  • 相关阅读:
    leetcode 673. 最长递增子序列的个数 java
    leetcode 148. 排序链表 java
    leetcode 98. 验证二叉搜索树 java
    leetcode 29. 两数相除 java
    leetcode 234. 回文链表 java
    Valid Palindrome LeetCode Java
    Single Number II LeetCode Java
    Single Number LeetCode java
    Search in Rotated Sorted Array II LeetCode Java
    Search in Rotated Sorted Array leetcode java
  • 原文地址:https://www.cnblogs.com/qq27271609/p/4686713.html
Copyright © 2011-2022 走看看