简单的C++加载jvm实现--简单的日志输出--JAVA端程序
来源:互联网 发布:can总线控制伺服编程 编辑:程序博客网 时间:2024/06/05 19:23
前面做好了C++端程序的简单日志输出,接下来到启动的JAVA程序输出日志了。为了尽量的精简,所以不考虑使用log4j,使用java自带的IO流输出。
一,对原来的工程进行改造:
public class HelloWorld {public static void main(String[] args) {try {//可以设置系统参数改变日志输出位置String jvmStdFile = System.getProperty("jvmlog",".\\LoadJVMDemoJ.log");File file = new File(jvmStdFile);if(!file.exists()){file.getParentFile().mkdirs();file.createNewFile();}//采用流式输出,格式使用UTF-8格式,避免一些乱码FileOutputStream fos = new FileOutputStream(jvmStdFile);System.setOut(new PrintStream(new BufferedOutputStream(fos, 128), true, "UTF-8"));System.setErr(new PrintStream(new BufferedOutputStream(fos, 128), true, "UTF-8"));} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}LogFactory.log("Hello world");}}二,新建一个LogFactory类对输出的日志进行格式化:
public class LogFactory {/** * 输出日志,以后考虑设置日志级别 */public static String log(String log){String logout = setFormatLog(log);System.out.println(logout);return logout;}/** * 设置日志的格式:yyy-MM-dd hh-mm-ss SSS */public static String setFormatLog(String log){Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss.SSS]");String logDate = sdf.format(date);return logDate + ":" + log;}}
三,传入参数进行输出
1,首先定义传入的参数
//传入参数,如果有int nParamcount = 2;const char * params[2] = {"aaaaa","bbbbbb"};2,将传入对象转换成字符串数组
//定义穿入数组jobjectArray args;jclass strClass = env->FindClass("java/lang/String");if (env->ExceptionCheck() == JNI_TRUE || strClass == NULL) {env->ExceptionDescribe();env->ExceptionClear();outLog("查找字符串累失败", GetLastError());return false;}//转换传入对象成字符串数组args = env->NewObjectArray(nParamcount, strClass, NULL);if (args == 0) {jvm->DestroyJavaVM();return false;}//从参数中取出字符转化成java字符串对象jstring jstr = NULL;for (int i = 0; i < nParamcount; i++) {jstr = env->NewStringUTF(params[i]);if (jstr == 0) {jvm->DestroyJavaVM();return false;}//java字符串对象放入数组env->SetObjectArrayElement(args, i, jstr);if (env->ExceptionCheck() == JNI_TRUE) {jvm->DestroyJavaVM();return false;}}四,调用方法接收参数:
env->CallStaticVoidMethod(mainclass, methedID, args);
//如果C++端未传入参数,使用args会导致C++程序出错,如下处理可以避免报错LogFactory.log("Hello world" + (args == null||args.length == 0?"":Arrays.asList(args)));
0 0
- 简单的C++加载jvm实现--简单的日志输出--JAVA端程序
- 简单的C++加载jvm实现--简单的日志输出
- jvm原理--简单的程序加载分析
- 简单的C++加载jvm实现
- C语言实现简单的分级别写日志程序
- log日志:简单的log日志输出(C++)
- JVM的简单实现
- C语言实现简单的日志封装
- 程序日志输出(简单的重定向)
- 在java中实现调用简单的c程序
- 在java中实现调用简单的c程序
- JAVA 实现简单的日志工具
- C程序简单实现哈夫曼树的编码
- 简单的C语言实现程序
- Objective C 实现简单的小程序
- 一道关于jvm加载的简单题目
- 重定向输出流简单实现程序日志
- 简单的c程序
- 转 Java学习 — ArrayList详解
- 先进的区块链技术将会再次颠覆互联网领域
- webview中添加点击图片浏览事件
- 超星慕课尔雅中国历史人文地理(上)答案题库
- Redis Sentinel;Redis Sentinel配置;redis集群;redis故障转移[原创]
- 简单的C++加载jvm实现--简单的日志输出--JAVA端程序
- RecyclerView再学习
- 永不止步
- 再见,2016(本兮)
- Mybatis续、Mapper映射器接口规则
- JavaScript:直接写入 HTML 输出流
- android兼容低版本Fragment
- 【求助】android 用布局界面 button布局 按下响应系统按键事件
- Android Studio的一个问题