[Java基础]-- jdk生成日志信息

第一个类: 

分析引擎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<String, String> data = new HashMap<String, String>();
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<String, String> data = new HashMap<String, String>();
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<String, String> data) throws UnsupportedEncodingException {
StringBuilder sb = new StringBuilder();
sb.append(accessUrl).append("?");
for (Map.Entry<String, String> 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<String> queue = new LinkedBlockingQueue<String>();
// 用于单列的一个类对象
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
发出的红包

打赏作者

oo寻梦in记

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值