java sdk日志在哪里_java的jdk生成日志信息

该博客介绍了一个Java SDK如何在服务器端收集数据并发送到指定服务器。主要涉及两个类:AnalyticsEngineSDK2负责生成事件数据并构建URL,SendDataMonitor2则作为一个单独的线程负责发送数据。当订单支付成功或退款时,SDK会触发相关事件,并将数据通过HTTP GET请求发送到日志服务器。
摘要由CSDN通过智能技术生成

第一个类:

分析引擎sdk java服务器端数据收集--AnalyticsEngineSDK2

package com.my.util;

import java.io.UnsupportedEncodingException;

import java.net.URLEncoder;

import java.util.HashMap;

import java.util.Map;

import java.util.logging.Level;

import java.util.logging.Logger;

/**

* 分析引擎sdk java服务器端数据收集

*

* @version 1.0

*

*/

public class AnalyticsEngineSDK2 {

// 日志打印对象

private static final Logger log = Logger.getGlobal();

// 请求url的主体部分

public static final String  accessUrl = "http://192.168.142.116/log.jpg";

private static final String platformName = "java_server";

private static final String sdkName = "jdk";

private static final String version = "1";

/**

* 触发订单支付成功事件,发送事件数据到服务器

*

* @param orderId

*            订单支付id

* @param memberId

*            订单支付会员id

* @return 如果发送数据成功(加入到发送队列中),那么返回true;否则返回false(参数异常&添加到发送队列失败).

*/

public static boolean onChargeSuccess(String orderId, String memberId) {

try {

if (isEmpty(orderId) || isEmpty(memberId)) {

// 订单id或者memberid为空

log.log(Level.WARNING, "订单id和会员id不能为空");

return false;

}

// 代码执行到这儿,表示订单id和会员id都不为空。

Map data = new HashMap();

data.put("u_mid", memberId);

data.put("oid", orderId);

data.put("c_time", String.valueOf(System.currentTimeMillis()));

data.put("ver", version);

data.put("en", "e_cs");

data.put("pl", platformName);

data.put("sdk", sdkName);

// 创建url

String url = buildUrl(data);

// 发送url&将url加入到队列

SendDataMonitor2.addSendUrl(url);

return true;

} catch (Throwable e) {

log.log(Level.WARNING, "发送数据异常", e);

}

return false;

}

/**

* 触发订单退款事件,发送退款数据到服务器

*

* @param orderId

*            退款订单id

* @param memberId

*            退款会员id

* @return 如果发送数据成功,返回true。否则返回false。

*/

public static boolean onChargeRefund(String orderId, String memberId) {

try {

if (isEmpty(orderId) || isEmpty(memberId)) {

// 订单id或者memberid为空

log.log(Level.WARNING, "订单id和会员id不能为空");

return false;

}

// 代码执行到这儿,表示订单id和会员id都不为空。

Map data = new HashMap();

data.put("u_mid", memberId);

data.put("oid", orderId);

data.put("c_time", String.valueOf(System.currentTimeMillis()));

data.put("ver", version);

data.put("en", "e_cr");

data.put("pl", platformName);

data.put("sdk", sdkName);

// 构建url

String url = buildUrl(data);

// 发送url&将url添加到队列中

SendDataMonitor2.addSendUrl(url);

return true;

} catch (Throwable e) {

log.log(Level.WARNING, "发送数据异常", e);

}

return false;

}

/**

* 根据传入的参数构建url

*

* @param data

* @return

* @throws UnsupportedEncodingException

*/

private static String buildUrl(Map data) throws UnsupportedEncodingException {

StringBuilder sb = new StringBuilder();

sb.append(accessUrl).append("?");

for (Map.Entry entry : data.entrySet()) {

if (isNotEmpty(entry.getKey()) && isNotEmpty(entry.getValue())) {

sb.append(entry.getKey().trim()).append("=").append(URLEncoder.encode(entry.getValue().trim(), "utf-8"))

.append("&");

}

}

return sb.substring(0, sb.length() - 1);//去掉最后&

}

/**

* 判断字符串是否为空,如果为空,返回true。否则返回false。

*

* @param value

* @return

*/

private static boolean isEmpty(String value) {

return value == null || value.trim().isEmpty();

}

/**

* 判断字符串是否非空,如果不是空,返回true。如果是空,返回false。

*

* @param value

* @return

*/

private static boolean isNotEmpty(String value) {

return !isEmpty(value);

}

}

第二个类:发送url数据的监控者,用于启动一个单独的线程来发送数据----SendDataMonitor2

package com.my.util;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

import java.util.concurrent.BlockingQueue;

import java.util.concurrent.LinkedBlockingQueue;

import java.util.logging.Level;

import java.util.logging.Logger;

/**

* 发送url数据的监控者,用于启动一个单独的线程来发送数据

*

*

*/

public class SendDataMonitor2 {

// 日志记录对象

private static final Logger log = Logger.getGlobal();

// 队列,用户存储发送url

private BlockingQueue queue = new LinkedBlockingQueue();

// 用于单列的一个类对象

private static SendDataMonitor2 monitor = null;

private SendDataMonitor2() {

// 私有构造方法,进行单列模式的创建

}

/**

* 获取单列的monitor对象实例

*

* @return

*/

public static SendDataMonitor2 getSendDataMonitor() {

if (monitor == null) {

synchronized (SendDataMonitor2.class) {

if (monitor == null) {

monitor = new SendDataMonitor2();

Thread thread = new Thread(new Runnable() {

@Override

public void run() {

// 线程中调用具体的处理方法

SendDataMonitor2.monitor.run();

}

});

// 测试的时候,不设置为守护模式

// thread.setDaemon(true);

thread.start();

}

}

}

return monitor;

}

/**

* 添加一个url到队列中去

*

* @param url

* @throws InterruptedException

*/

public static void addSendUrl(String url) throws InterruptedException {

getSendDataMonitor().queue.put(url);

}

/**

* 具体执行发送url的方法

*

*/

private void run() {

while (true) {

try {

String url = this.queue.take();

// 正式的发送url

HttpRequestUtil.sendData(url);

} catch (Throwable e) {

log.log(Level.WARNING, "发送url异常", e);

}

}

}

/**

* 内部类,用户发送数据的http工具类

*

*/

public static class HttpRequestUtil {

/**

* 具体发送url的方法

*

* @param url

* @throws IOException

*/

public static void sendData(String url) throws IOException {

HttpURLConnection con = null;

BufferedReader in = null;

try {

URL obj = new URL(url); // 创建url对象

con = (HttpURLConnection) obj.openConnection(); // 打开url连接

// 设置连接参数

con.setConnectTimeout(5000); // 连接过期时间

con.setReadTimeout(5000); // 读取数据过期时间

con.setRequestMethod("GET"); // 设置请求类型为get

System.out.println("发送url:" + url);

// 发送连接请求

in = new BufferedReader(new InputStreamReader(con.getInputStream()));

// TODO: 这里考虑是否可以

} finally {

try {

if (in != null) {

in.close();

}

} catch (Throwable e) {

// nothing

}

try {

con.disconnect();

} catch (Throwable e) {

// nothing

}

}

}

}

}

第三个类:测试类

package com.my.test; import com.my.util.AnalyticsEngineSDK2; public class Test2 { /** *  * @Title: main   * @Description: 测试本地连接nginx,访问nginx的资源:"http://192.168.142.116/log.jpg";然后生成日志信息 * @param @param args     * @return void    * @throws */ public static void main(String[] args) { AnalyticsEngineSDK2.onChargeSuccess("orderid123", "laoxiao123"); AnalyticsEngineSDK2.onChargeRefund("orderid456", "laoxiao456"); } }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值