meituan-dianping / logan Goto Github PK
View Code? Open in Web Editor NEWLogan is a lightweight case logging system based on mobile platform.
Home Page: https://tech.meituan.com/logan_open_source.html
License: MIT License
Logan is a lightweight case logging system based on mobile platform.
Home Page: https://tech.meituan.com/logan_open_source.html
License: MIT License
@jiangteng in server demo the decode log is: {"c":"clogan header","f":1,"l":1539321701072,"n":"clogan","i":1,"m":true} �{"c":"1\tclick button 0\t","f":1,"l":1539321701061,"n":"","i":1,"m":true}
But it doesn't include function name, line, file name so it's not particularly convenient to find out which function triggered the log.
eg:
//printf("123"),printf("456");
#define TRACE_CMH_1 (printf("%s(%d)-<%s>: ",__FILE__, __LINE__, __FUNCTION__), printf)
//printf("%d""%d", 1, 2);
#define TRACE_CMH_2(fmt,...) \
printf("%s(%d)-<%s>: "##fmt, __FILE__, __LINE__, __FUNCTION__, ##__VA_ARGS__)
集成了Logan后,如何看数据?后台没有开源,可以看吗?
java代码
com.dianping.logan.CLoganProtocol类里面
private native int clogan_init(String cache_path, String dir_path, int max_file,
String encrypt_key_16, String encrypt_iv_16);
private native int clogan_open(String file_name);
private native void clogan_debug(boolean is_debug);
private native int clogan_write(int flag, String log, long local_time, String thread_name, long thread_id, int is_main);
private native void clogan_flush();
这些函数对应的c文件里的代码(clogan_protocol.c clogan_protocol.h)是
Java_com_dianping_logan_CLoganProtocol_clogan_1write(...)
Java_com_dianping_logan_CLoganProtocol_clogan_1init(...)
Java_com_dianping_logan_CLoganProtocol_clogan_1open(...)
Java_com_dianping_logan_CLoganProtocol_clogan_1flush(...)
Java_com_dianping_logan_CLoganProtocol_clogan_1debug(...)
我发现函数中间多了一个1,不对应呀,我的理解应该会报错,但现实是我试了,可以编译并且成功运行正常,当我去掉那个1反而调用失败,说找不到相应实现,心中非常不解,还望大家帮忙解答,谢谢
有基于Logan的无痕埋点相关的demo吗
platform :ios, '8.0'
inhibit_all_warnings!
use_frameworks!
target 'xxxx' do
pod 'Logan', '~> 1.1.1'
end
hi, @Richard-Cao,我现在在安卓下面做测试,开子线程,循环打印日志10000次,每次间隔1毫秒,在循环过程中手动杀死进程,这种情况下生成的文件最后一条日志是不完整的,如图:
我觉得这种情况会时有发生,惯用安卓的用户,很多都会通过清理进程来让手机跑的快一点
在dmeo中跑的时候正常,但是我把同样的代码引入项目的时候就抛异常了,初始化方法、调用方法都是一样的,但是在项目中会报无效路径,不知道什么原因,为什么会导致文件创建失败呢!
10-18 16:48:34.325 14505-15773/pacageName D/LoganTestActivity: times : 0
10-18 16:48:34.326 14505-15358/pacageName D/LoganThread: Logan write start
10-18 16:48:34.328 14505-15358/pacageName W/System.err: java.lang.IllegalArgumentException: Invalid path: /storage/emulated/0/Android/data/packageName/files/logan_v1
10-18 16:48:34.329 14505-15358/pacageName W/System.err: at android.os.StatFs.doStat(StatFs.java:46)
10-18 16:48:34.329 14505-15358/pacageName W/System.err: at android.os.StatFs.(StatFs.java:39)
10-18 16:48:34.329 14505-15358/pacageName W/System.err: at com.dianping.logan.d.d(Unknown Source)
10-18 16:48:34.329 14505-15358/pacageName W/System.err: at com.dianping.logan.d.a(Unknown Source)
10-18 16:48:34.329 14505-15358/pacageName W/System.err: at com.dianping.logan.d.a(Unknown Source)
10-18 16:48:34.330 14505-15358/pacageName W/System.err: at com.dianping.logan.d.run(Unknown Source)
10-18 16:48:34.330 14505-15358/pacageName W/System.err: Caused by: android.system.ErrnoException: statvfs failed: ENOENT (No such file or directory)
10-18 16:48:34.330 14505-15358/pacageName W/System.err: at libcore.io.Posix.statvfs(Native Method)
10-18 16:48:34.330 14505-15358/pacageName W/System.err: at libcore.io.BlockGuardOs.statvfs(BlockGuardOs.java:298)
10-18 16:48:34.331 14505-15358/pacageName W/System.err: at android.system.Os.statvfs(Os.java:500)
10-18 16:48:34.331 14505-15358/pacageName W/System.err: at android.os.StatFs.doStat(StatFs.java:44)
10-18 16:48:34.331 14505-15358/pacageName W/System.err: ... 5 more
10-18 16:48:34.332 14505-15773/pacageName D/LoganTestActivity: times : 1
10-18 16:48:34.333 14505-15358/pacageName D/LoganThread: Logan write start
10-18 16:48:34.338 14505-15773/pacageName D/LoganTestActivity: times : 2
10-18 16:48:34.339 14505-15358/pacageName D/LoganThread: Logan write start
10-18 16:48:34.344 14505-15773/pacageName D/LoganTestActivity: times : 3
10-18 16:48:34.344 14505-15358/pacageName D/LoganThread: Logan write start
10-18 16:48:34.349 14505-15773/pacageName D/LoganTestActivity: times : 4
10-18 16:48:34.350 14505-15358/pacageName D/LoganThread: Logan write start
10-18 16:48:34.360 14505-15773/pacageName D/LoganTestActivity: times : 5
10-18 16:48:34.361 14505-15358/pacageName D/LoganThread: Logan write start
10-18 16:48:34.366 14505-15773/pacageName D/LoganTestActivity: times : 6
10-18 16:48:34.366 14505-15358/pacageName D/LoganThread: Logan write start
10-18 16:48:34.371 14505-15773/pacageName D/LoganTestActivity: times : 7
10-18 16:48:34.372 14505-15358/pacageName D/LoganThread: Logan write start
10-18 16:48:34.377 14505-15773/pacageName D/LoganTestActivity: times : 8
10-18 16:48:34.377 14505-15358/pacageName D/LoganThread: Logan write start
10-18 16:48:34.382 14505-15773/pacageName D/LoganTestActivity: write log end
Android Studio 3.2RC3
NDK r15c
gradle 3.5.1
macOS 10.14
#gradle-3.5.1/bin/gradle assembleDebug --debug --stacktrace
报错信息
20:22:08.567 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Error while executing process /Users/xx/androidsdk/cmake/3.10.2.4988404/bin/cmake with arguments {-H/Users/xx/projects/app/Logan/Example/Logan-Android/logan -B/Users/xx/projects/app/Logan/Example/Logan-Android/logan/.externalNativeBuild/cmake/release/armeabi -GAndroid Gradle - Ninja -DANDROID_ABI=armeabi -DANDROID_NDK=/Users/xx/android-ndk-r15c -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=/Users/xx/projects/app/Logan/Example/Logan-Android/logan/build/intermediates/cmake/release/obj/armeabi -DCMAKE_BUILD_TYPE=Release -DCMAKE_MAKE_PROGRAM=/Users/xx/androidsdk/cmake/3.10.2.4988404/bin/ninja -DCMAKE_TOOLCHAIN_FILE=/Users/xx/android-ndk-r15c/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=android-14 -DCMAKE_C_FLAGS=-std=c11 -DBUILD_TESTING=OFF -DANDROID_TOOLCHAIN=gcc}
20:22:08.567 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] CMake Error: Could not create named generator Android Gradle - Ninja
20:22:08.567 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
20:22:08.567 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Generators
20:22:08.567 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Unix Makefiles = Generates standard UNIX makefiles.
20:22:08.567 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Ninja = Generates build.ninja files.
20:22:08.567 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Xcode = Generate Xcode project files.
20:22:08.567 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] CodeBlocks - Ninja = Generates CodeBlocks project files.
20:22:08.567 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] CodeBlocks - Unix Makefiles = Generates CodeBlocks project files.
20:22:08.567 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] CodeLite - Ninja = Generates CodeLite project files.
20:22:08.567 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] CodeLite - Unix Makefiles = Generates CodeLite project files.
20:22:08.567 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Sublime Text 2 - Ninja = Generates Sublime Text 2 project files.
20:22:08.568 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Sublime Text 2 - Unix Makefiles
20:22:08.568 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] = Generates Sublime Text 2 project files.
20:22:08.568 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Kate - Ninja = Generates Kate project files.
20:22:08.568 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Kate - Unix Makefiles = Generates Kate project files.
20:22:08.568 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Eclipse CDT4 - Ninja = Generates Eclipse CDT 4.0 project files.
20:22:08.568 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] Eclipse CDT4 - Unix Makefiles= Generates Eclipse CDT 4.0 project files.
20:22:08.568 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] KDevelop3 = Generates KDevelop 3 project files.
20:22:08.568 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] KDevelop3 - Unix Makefiles = Generates KDevelop 3 project files.
20:22:08.568 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
20:22:08.568 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
20:22:08.568 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at com.android.build.gradle.tasks.ExternalNativeBuildTaskUtils.executeBuildProcessAndLogError(ExternalNativeBuildTaskUtils.java:241)
20:22:08.568 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at com.android.build.gradle.tasks.CmakeExternalNativeJsonGenerator.executeProcess(CmakeExternalNativeJsonGenerator.java:142)
20:22:08.568 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at com.android.build.gradle.tasks.ExternalNativeJsonGenerator.buildAndPropagateException(ExternalNativeJsonGenerator.java:272)
20:22:08.569 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at com.android.build.gradle.tasks.ExternalNativeJsonGenerator.build(ExternalNativeJsonGenerator.java:178)
20:22:08.569 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at com.android.build.gradle.tasks.ExternalNativeBuildJsonTask.build(ExternalNativeBuildJsonTask.java:39)
20:22:08.569 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
20:22:08.569 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter] ... 32 more
20:22:08.569 [ERROR] [org.gradle.internal.buildevents.BuildExceptionReporter]
20:22:08.569 [LIFECYCLE] [org.gradle.internal.buildevents.BuildResultLogger]
20:22:08.569 [LIFECYCLE] [org.gradle.internal.buildevents.BuildResultLogger] BUILD FAILED
我最近试着自己使用win7 版的android studio 3.0 beta 5 的cmake编译c/c++部分(CLogan和mbedtls),要么就是编译通过,但是不生成so,要么就是报错CMake Error at D:/test/demos/testloglib/app/src/main/cpp/mbedtls/library/CMakeLists.txt:161 (install):
install TARGETS given no LIBRARY DESTINATION for shared library target
"mbedtls".
所以我想请问一下,使用这样的环境和工具,能否编译成功?或者有没有相应的教程可以让我们参考,谢谢
看了下 Logan.h 的接口,发现没有删除单一文件的接口,虽然也可以找到指定文件删除,还是想了解下是出于什么原因没有粒度更细的删除接口设计
测试上传日志文件的时候报错了,接收到了部分日志信息,求解
{ Error: unexpected end of file
at Zlib.zlibOnError [as onerror] (zlib.js:153:17) errno: -5, code: 'Z_BUF_ERROR' }
write finish
fs.js:113
throw err;
^
Error: ENOENT: no such file or directory, unlink './log-demo.gz'
at Object.unlinkSync (fs.js:916:3)
at WriteStream.inp.pipe.on.pipe.on (/Users/yangkai/development/git/Logan/Example/Logan-Server/server.js:113:14)
at WriteStream.emit (events.js:187:15)
at finishMaybe (_stream_writable.js:641:14)
at stream._final (_stream_writable.js:619:5)
at WriteStream._final (internal/fs/streams.js:264:3)
at callFinal (_stream_writable.js:612:10)
at process._tickCallback (internal/process/next_tick.js:63:19)
Xcode 9.4.1
The log didn't contain the file name, path, function name and line in the Xcode console. And the log file is not easy to review. I just copy the log file from the simulator.
Showing All Messages
/Users/ran/Code/GBSWorkSpace/tgl-poc-ios/ios/Pods/Logan/Logan/mbedtls/library/aes.c:29:10: 'mbedtls/config.h' file not found
...
读了下android的代码有以下几个问题想咨询作者,望不吝赐教
某些企业应用每天的日志量很大
简单的想法是再次做文件分包,上传后由后端解析合并。
目前Android的Logan提供的api没有quit操作,如果有几个Action.SEND就没法终止上传。
看到LoganThread里有quit方法,但其实并没有暴露出来,而且内部也无调用,
是否应该考虑增加Logan#quit()的api
public void logan_init(String cache_path, String dir_path, int max_file, String encrypt_key_16,
String encrypt_iv_16) {
if (CLoganProtocol.isCloganSuccess()) {
mCurProtocol = CLoganProtocol.newInstance();
} else {
mCurProtocol = null;
}
}
原日志文件
mark.txt.zip
部分Log:
start decode log file
decrypt complete
remove padding complete
{ Error: unexpected end of file
at Zlib._handle.onerror (zlib.js:355:17) errno: -5, code: 'Z_BUF_ERROR' }
start decode log file
decrypt complete
remove padding complete
write finish
start decode log file
decrypt complete
remove padding complete
write finish
start decode log file
decrypt complete
remove padding complete
write finish
start decode log file
decrypt complete
remove padding complete
write finish
start decode log file
decrypt complete
remove padding complete
{ Error: unexpected end of file
at Zlib._handle.onerror (zlib.js:355:17) errno: -5, code: 'Z_BUF_ERROR' }
start decode log file
decrypt complete
remove padding complete
write finish
可以创建log-demo.txt文件,并且有日志内容
W/System.err: java.util.zip.ZipException: Not in GZIP format
at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:166)
at java.util.zip.GZIPInputStream.(GZIPInputStream.java:80)
W/System.err: at java.util.zip.GZIPInputStream.(GZIPInputStream.java:92)
at com.gzhi.neatreader.r2.utils.LoganParser.parse(LoganParser.java:85)
at com.gzhi.neatreader.r2.main.SplashActivity.onCreate(SplashActivity.java:94)
at android.app.Activity.performCreate(Activity.java:7372)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1218)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3147)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3302)
at android.app.ActivityThread.-wrap12(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1891)
at android.os.Handler.dispatchMessage(Handler.java:108)
at android.os.Looper.loop(Looper.java:166)
at android.app.ActivityThread.main(ActivityThread.java:7425)
at java.lang.reflect.Method.invoke(Native Method)
试了一下没有crash日志
日志文件不能无限大,目前Logan日志文件最大限制为10M,遇到大于10M的情况,应该如何处理最佳?是丢掉前面的日志,还是丢掉追加的日志,还是做分片处理呢?
ndk r12
gradle-3.3
Build command failed.
Error while executing process D:\android\android_sdk\cmake\3.6.4111459\bin\cmake.exe with arguments {--build D:\demo\Logan\Example\Logan-Android\logan.externalNativeBuild\cmake\release\x86 --target logan}
[1/4] Building C object clogan.out/CMakeFiles/clogan.dir/mmap_util.c.o
FAILED: D:\android\android_sdk\android-ndk-r12b\toolchains\x86-4.9\prebuilt\windows-x86_64\bin\i686-linux-android-gcc.exe --sysroot=D:/android/android_sdk/android-ndk-r12b/platforms/android-14/arch-x86 -ID:/demo/Logan/Logan/Clogan/../mbedtls/include -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -Wa,--noexecstack -Wformat -Werror=format-security -std=c11 -O2 -DNDEBUG -MD -MT clogan.out/CMakeFiles/clogan.dir/mmap_util.c.o -MF clogan.out\CMakeFiles\clogan.dir\mmap_util.c.o.d -o clogan.out/CMakeFiles/clogan.dir/mmap_util.c.o -c D:\demo\Logan\Logan\Clogan\mmap_util.c
D:\demo\Logan\Logan\Clogan\mmap_util.c: In function 'open_mmap_file_clogan':
D:\demo\Logan\Logan\Clogan\mmap_util.c:37:52: error: 'S_IRUSR' undeclared (first use in this function)
int fd = open(_filepath, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); //后两个添加权限
^
D:\demo\Logan\Logan\Clogan\mmap_util.c:37:52: note: each undeclared identifier is reported only once for each function it appears in
D:\demo\Logan\Logan\Clogan\mmap_util.c:37:62: error: 'S_IWUSR' undeclared (first use in this function)
int fd = open(_filepath, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); //后两个添加权限
^
D:\demo\Logan\Logan\Clogan\mmap_util.c:37:72: error: 'S_IRGRP' undeclared (first use in this function)
int fd = open(_filepath, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); //后两个添加权限
^
D:\demo\Logan\Logan\Clogan\mmap_util.c:37:82: error: 'S_IWGRP' undeclared (first use in this function)
int fd = open(_filepath, O_RDWR | O_CREAT, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP); //后两个添加权限
^
ninja: build stopped: subcommand failed.
每次app切掉的时候,会flush,也就是把mmap的数据写入文件。而系统把mmap从内存写回文件的时机并不确定,会不会flush的时候,mmap还没有把内存的数据写回mmap文件导致文件内容丢失?
java.util.zip.ZipException: Not in GZIP format
at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:165)
at java.util.zip.GZIPInputStream.(GZIPInputStream.java:79)
at java.util.zip.GZIPInputStream.(GZIPInputStream.java:91)
at cn.com.agree.LoganParser.parse(LoganParser.java:95)
at cn.com.agree.Test.main(Test.java:18)
从第二行开始每行开始都有, vi下才能显示
{"c":"clogan header","f":1,"l":1539762230014,"n":"clogan","i":1,"m":true}
^@{"c":"1\tclick button 0\t","f":1,"l":1539762230006,"n":"","i":1,"m":true}
^@{"c":"1\tclick button 1\t","f":1,"l":1539762230006,"n":"","i":1,"m":true}
^@{"c":"1\tclick button 2\t","f":1,"l":1539762230006,"n":"","i":1,"m":true}
服务器跑在Windows或Mac下都是一样的效果
参考 https://stackoverflow.com/questions/9124755/symbol-in-vim
请教下,当日志大小达到临界值时(比如达到10m),那么做到达到这个临界时上把日志上传给后台呢?
因为项目没有适配armeabi,都直接走armeabi-v7a,所以远程依赖会找不到so文件。希望优化下。
D:\demo\Logan\Example\Logan-Server> node server.js
D:\demo\Logan\Example\Logan-Server\server.js:83
let padding = 0;
^^^
SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:373:25)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:139:18)
at node.js:968:3
我看目前 Logan 是采用丢掉追加的日志
是否可以考虑支持下面三种策略,然后提供配置项由使用则选择呢?
看到java层的源码是所有日志都写入一个消费者队列,这是上层控制多线程写入吧?请问 c层支持多线程写入吗
是否需要对已加密的日志进行额外操作 再使用cipher解密
const contentLen = (((buf.readUInt8(skips) & 0xFF) << 24) | ((buf.readUInt8(skips + 1) & 0xFF) << 16) | ((buf.readUInt8(skips + 2) & 0xFF) << 8) | (buf.readUInt8(skips + 3) & 0xFF)); skips += 4; if (skips + contentLen > buf.length) { skips -= 4; decodeLog(buf, skips); return; } const content = buf.slice(skips, skips + contentLen); skips += contentLen;
在construct_data.c文件第60行,将构造后的json数据长度增加2,但是只增加了1个换行符,这会导致文本解析时出现null的数据。例如#19 OS客户端上传到node服务器解析出来的文本包含null(^@)
建议增加 interceptor 的概念,用于对数据的处理,如加密、格式化( json、protobuf )、debug 模式下 logcat 输出,如 OkHttp 的 Interceptor
必须后台运行server.js一直跑?
什么时候这个动态日志开源就好了,这个很感兴趣
我今天在熟悉logan库,发现日志文件中日志的顺序是按照时间顺序排列,我的理解,距离当前时间越近的日志,应该对于分析来讲越重要,所以不该是append方式写入日志文件更好些么
保存的logan file 是乱码呢,解析出来呢
解析出来c字段里的内容都是空的:
{"c":"{}","f":2,"l":1544095100003,"n":"NioProcessor-1","i":1641,"m":false}
{"c":"{}","f":2,"l":1544095100954,"n":"NioProcessor-2","i":1642,"m":false}
{"c":"{}","f":2,"l":1544095100963,"n":"NioProcessor-2","i":1642,"m":false}
{"c":"{}","f":2,"l":1544095671567,"n":"NioProcessor-3","i":1643,"m":false}
{"c":"{}","f":2,"l":1544095671571,"n":"NioProcessor-3","i":1643,"m":false}
{"c":"{}","f":2,"l":1544095701645,"n":"NioProcessor-3","i":1643,"m":false}
{"c":"{}","f":2,"l":1544095731716,"n":"NioProcessor-3","i":1643,"m":false}
{"c":"{}","f":2,"l":1544095761790,"n":"NioProcessor-3","i":1643,"m":false}
{"c":"{}","f":2,"l":1544095791866,"n":"NioProcessor-3","i":1643,"m":false}
{"c":"{}","f":2,"l":1544095821942,"n":"NioProcessor-3","i":1643,"m":false}
在接入这个日志系统的过程遇到一个不合理逻辑,我想确认官方的对这个问题的看法?
场景:
12:00 开始记录日志,
13:00 时上传日志文件,
14:00 时上传日志文体
可目前遇到的问题是,为什么14:00上传的日志文件还要包括,12:00 ,13:00 这段时间产生的日志,从逻辑上不合理,我想请问是:程序代码的问题,还是什么问题?
没有增量上传的功能吗?还是增量上传需要自己去处理?
Logan上传日志数据后可以直接接入自己的后端系统,还是说集成Logan的相关后端服务语言。
App进程可以上传
其他进程中的日志,在app进程没法上传,SendLogRunnable这个抽象类中的方法只返回当前进程的文件
这个可以支持多业务方不同线程同时创建、写入多个文件么,多谢
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.