Koala业务日志系统手动集成

4 手动集成

1. 添加依赖

application层添加业务日志接口模块依赖

<dependency>

<groupId>org.openkoala.businesslog</groupId>

<artifactId>koala-businesslog-api</artifactId>

<version>4.0.0</version>

</dependency>

web层添加业务日志实现模块依赖

<dependency>

<groupId>org.openkoala.businesslog</groupId>

<artifactId>koala-businesslog-impl</artifactId>

<version>4.0.0</version>

</dependency>

2. 创建LogFilter类

例如com.xiaokaceng.demo.web.controller.businesslog.LogFilter.java

package com.xiaokaceng.demo.web.controller.businesslog;

import org.openkoala.businesslog.utils.BusinessLogServletFilter;
import javax.servlet.*;

public class LogFilter extends BusinessLogServletFilter {

    /**
     * 将需要用到的信息放入日志上下文
     * @param req
     * @param resp
     * @param chain
     */
    @Override
    public void beforeFilter(ServletRequest req, ServletResponse resp, FilterChain chain) {
        addIpContext(getIp(req));
        // TODO 需要自己实现获取用户名
        addUserContext("xxx");
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        //To change body of implemented methods use File | Settings | File Templates.
    }

    public void destroy() {
        //To change body of implemented methods use File | Settings | File Templates.
    }

}

注意:当前用户需根据系统实现来获取

3. 创建DefaultBusinessLogController类

package com.xiaokaceng.demo.web.controller.businesslog; import java.util.HashMap;
import java.util.Map;
import org.dayatang.domain.InstanceFactory;
import org.dayatang.utils.Page;
import org.openkoala.businesslog.application.BusinessLogApplication;
import org.openkoala.businesslog.model.DefaultBusinessLogDTO;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/log")
public class DefaultBusinessLogController {

private BusinessLogApplication businessLogApplication;

@ResponseBody
@RequestMapping("/list")
public Page pageJson(DefaultBusinessLogDTO defaultBusinessLogDTO,

@RequestParam int page, @RequestParam int pagesize) {

Page<DefaultBusinessLogDTO> all = getBusinessLogApplication()

.pageQueryDefaultBusinessLog(defaultBusinessLogDTO, page,

pagesize);

return all;

}

@ResponseBody

@RequestMapping("/delete")

public Map<String, Object> delete(@RequestParam String ids) {

Map<String, Object> result = new HashMap<String, Object>();

String[] value = ids.split(",");

Long[] idArrs = new Long[value.length];

for (int i = 0; i < value.length; i++) {

idArrs[i] = Long.parseLong(value[i]);

}

getBusinessLogApplication().removeDefaultBusinessLogs(idArrs);

result.put("result", "success");

return result;

}

@ResponseBody

@RequestMapping("/get/{id}")

public Map<String, Object> get(@PathVariable Long id) {

Map<String, Object> result = new HashMap<String, Object>();

result.put("data", getBusinessLogApplication()

.getDefaultBusinessLog(id));

return result;

}

public BusinessLogApplication getBusinessLogApplication() {

if (null == businessLogApplication) {

businessLogApplication = InstanceFactory

.getInstance(BusinessLogApplication.class);

}

return businessLogApplication;

}

}

4. 配置web.xml

<filter>
   <filter-name>LogFilter</filter-name>
   <filter-class>com.xiaokaceng.demo.web.controller.businesslog.LogFilter</filter-class>
</filter>
<filter-mapping>
   <filter-name>LogFilter</filter-name>
   <url-pattern>/*</url-pattern>
</filter-mapping>

5. 类路径下创建koala-businesslog.properties


pointcut=execution(* org.openkoala.example.application.impl.*.*(..))

#日志开关

kaola.businesslog.enable=true

#日志导出器

businessLogExporter=org.openkoala.businesslog.utils.BusinessLogExporterImpl

#数据库设置

log.db.jdbc.driver=${db.jdbcDriver}

log.db.jdbc.connection.url=${db.connectionURL}

log.db.jdbc.username=${db.username}

log.db.jdbc.password=${db.password}

log.db.jdbc.dialect=${hibernate.dialect}

log.hibernate.hbm2ddl.auto=${hibernate.hbm2ddl.auto}

log.hibernate.show_sql=${hibernate.show_sql}

log.db.Type=${db.Type}

db.generateDdl=${generateDdl}

log.maximumConnectionCount=3000

log.minimumConnectionCount=100

#线程池配置

#核心线程数

log.threadPool.corePoolSize=100

#最大线程数

log.threadPool.maxPoolSize=3000

#队列最大长度

log.threadPool.queueCapacity=2000

#线程池维护线程所允许的空闲时间

log.threadPool.keepAliveSeconds=300

#线程池对拒绝任务(无线程可用)的处理策略

log.threadPool.rejectedExecutionHandler=java.util.concurrent.ThreadPoolExecutor$CallerRunsPolicy

6. 添加扫描包路径

persistence-context.xml的packagesToScan节点添加:

<value>org.openkoala.businesslog.model</value>

7. 引入Spring配置

db-context.xml添加配置:

<import resource="classpath*:koala-businesslog-shared-persistence.xml"></import>

root.xml添加配置:

<import resource="classpath*:koala-businesslog-aop.xml"></import>

8. 剩余集成请参考使用教程

说明:

  • 以后插件会提供一键集成功能,无需手动集成
  • 第三方项目集成较为复杂,有较多技术约束
时间: 2024-10-24 15:28:19

Koala业务日志系统手动集成的相关文章

Koala业务日志系统设计说明

源代码:http://git.oschina.net/openkoala/koala koala-business子模块 模块划分 模块名 作用 koala-businesslog-api 业务日志系统的核心api koala-businesslog-impl 业务日志系统的koala的默认实现 koala-businesslog-web 业务日志系统web模块 koala-businesslog-acceptance-test 业务日志系统的集成测试,也是业务日志系统的 **范例**,实际使用

Koala业务日志系统使用教程

2 使用教程 前提 成功创建Koala Project,并且勾选集成业务日志子系统. 步骤 1. 业务方法标注@MethodAlias 格式: @MethodAlias("业务方法别名") 业务方法 示例: @MethodAlias("savePersonInfo") public PersonInfo savePersonInfo(PersonInfo personInfo) { personInfo.save(); return personInfo; } 要求

项目集成koala业务日志子系统

Koala平台的业务日志子系统是基于Maven的项目模块,最方便的集成是项目也使用Maven,war项目集成请自行下载jar包 前提 依赖spring 添加仓库 <repositories> <repository> <id>koala-releases</id> <url>http://nexus.openkoala.org/content/repositories/public-releases/</url> <releas

使用Slf4j集成Log4j2构建项目日志系统的完美解决方案

一.背景 最近因为公司项目性能需要,我们考虑把以前基于的log4j的日志系统重构成基于Slf4j和log4j2的日志系统,因为,使用slf4j可以很好的保证我们的日志系统具有良好的兼容性,兼容当前常见几种日志系统,而使用log4j2而不是log4j是因为Log4j 1.x 在高并发情况下出现死锁导致cpu使用率异常飙升,而Log4j2.0基于LMAX Disruptor的异步日志在多线程环境下性能会远远优于Log4j 1.x和logback(官方数据是10倍以上). 关于slf4j的原理以及优点

DNS的视图功能以及日志系统

实验环境:RHEL5.8 32Bit DNS的视图功能以及日志系统详解 DNS的主配置文件中的allow-recursion参数用来定义能够和DNS服务器进行递归的客户端来源,allow-query参数用来定义允许到DNS服务器上面发起查询请求的客户端,allow-transfer参数用来定义允许和DNS服务器进行区域传送的客户端,区域传送主要有两种方式,axfr和ixfr,使用dig命令也可以模拟实现区域传送: 如果我们的DNS服务器允许进行递归.发起查询请求以及进行区域传送的客户端比较多的话

日志系统之基于Zookeeper的分布式协同设计

最近这段时间在设计和实现日志系统,在整个日志系统系统中Zookeeper的作用非常重要--它用于协调各个分布式组件并提供必要的配置信息和元数据.这篇文章主要分享一下Zookeeper的使用场景.这里主要涉及到Zookeeper在日志系统中的使用,但其实它在我们的消息总线和搜索模块中也同样非常重要. 日志元数据 日志的类型和日志的字段这里我们统称为日志的元数据.我们构建日志系统的目的最终主要是为了:日志搜索,日志分析.这两大块我们很大程度上依赖于--ElasticSearch(关于什么是Elast

日志系统之定时任务执行引擎

概述 最近这段时间在强化日志系统自身的稳定性和可靠性,一个稳定可靠的系统离不开监控,我们这里谈及的监控除了服务是否存活还有这些组件的核心metrics采集与抓取,为此我们将这些任务做成了定时任务来执行.由于大致的思路以及设计已经成型,所以今天来分享一下日志系统在定时任务这块的选型与设计. 组件运行时监控 从我之前分享的文章中不难看出我们日志系统的各个组件的选型: 采集agent : Flume-NG 消息系统 : Kafka 实时流处理 : Storm 分布式搜索/日志存储(暂时) : Elas

使用SharePoint Designer定制开发员工工作日志系统实例!

昨天已介绍了一篇<使用SharePoint Designer定制开发专家库系统实例!>,今天继续来介绍使用SharePoint Designer定制开发员工工作日志系统实例,主要功能包括填写日报.查看日报及点评日报等,这个是今年7月份的时候设计开发的一个实验系统,仅供学习参考.很多人可能并不清楚Sharepoint Designer究竟是啥东东?实际上Sharepoint Designer是Sharepoint自带的设计开发和管理工具,从Sharepoint 2007开始已有这个工具,但需要单

分布式框架-日志系统思路及实现

转自:https://www.jianshu.com/p/ce30c31111ca 背景 随着互联网时代数据规模的爆发式增长,传统的单机系统在性能和可用性上已经无法胜任,分布式应用和服务化应用开始走进大家的视野,但是分布式的部署也会带来另外的问题,日志分散在各个应用服务节点中,出现问题不方便及时排查,尤其是服务化的应用中,分析问题时可能需要查看多个日志文件才能定位问题,如果相关项目不是一个团队维护时沟通成本更是直线上升,怎么将日志文件归集,怎么将日志文件呈现成了很多公司需要面对的问题,因此日志系