Clean code, clean logs

本文详细介绍了如何利用SLF4J、Logback和Perf4J等工具进行高效日志记录,包括配置、日志级别设置、避免副作用、简洁描述性日志等内容,旨在提升应用程序的日志质量,帮助开发者更好地维护、调优和故障排查。
Many programmers seem to forget how logging application behavior and its current activity is important. When somebody puts:

log.info("!@#$%");


happily somewhere in the code, he probably don't realize the importance of application logs during maintenance, tuning and failure identification. Underestimating the value of good logs is a terrible mistake. I have collected few random advices that I find especially useful when it comes to writing logging routines and I will present them in a series of short articles. First tip (out of ten) is about logging libraries and tools.

In my opinion,  SLF4J is the best logging API available, mostly because of a great pattern substitution support:

log.debug("Found {} records matching filter: '{}'", records, filter);


In Log4j you would have to use:

log.debug("Found " + records + " records matching filter: '" + filter + "'");


This is not only longer and less readable, but also inefficient because of extensive use of string concatenation. SLF4J adds nice {} substitution feature. Also, because string concatenation is avoided and toString() is not called if the logging statement is filtered, there is no need for isDebugEnabled() anymore. BTW, have you noticed  single quotesaround filter string parameter?

SLF4J is just a façade, as an implementation I would recommend  Logback framework, already advertised on my blog, instead of well established  Log4J. It has many interesting features (some of them will be discussed in future tips) and,  in contrary to Log4J, is actively developed.

The last tool to recommend is  Perf4J. To quote their motto:

Perf4J is to System.currentTimeMillis() as log4j is to System.out.println()

I've added Perf4J to one existing application under heavy load and seen it in action in few other. Both administrators and business users were impressed by the nice graphs produced by this simple utility. Also we were able to discover performance flaws in no time. Perf4J itself deserves its own article, but for now just check their  Developer Guide.

To summarize, this is the ideal pom.xml excerpt to start with:

<repositories>
    <repository>
        <id>Version99</id>
        <name>Version 99 Does Not Exist Maven repository</name>
        <layout>default</layout>
        <url>http://no-commons-logging.zapto.org/mvn2</url>
    </repository>
</repositories>


<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.5.11</version>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>0.9.20</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jul-to-slf4j</artifactId>
    <version>1.5.11</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>log4j-over-slf4j</artifactId>
    <version>1.5.11</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.5.11</version>
</dependency>
<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>99.0-does-not-exist</version>
</dependency>


To test this, try the following code:

SLF4JBridgeHandler.install();

org.apache.log4j.Logger.getLogger("A").info("Log4J");
java.util.logging.Logger.getLogger("B").info("java.util.logging");
org.apache.commons.logging.LogFactory.getLog("C").info("commons-logging");
org.slf4j.LoggerFactory.getLogger("D").info("Logback via SLF4J");


As you can see, no matter which logging framework is used (we don't even have Log4J and  Commons-Logging on our  CLASSPATH, see  99.0-does-not-exist version!), every logging statement is printed using Logback (see  how it works). So even if your favorite libraries stick to Commons-Logging (very bad thing!  [1][2]) or even worse to Log4J, you don't need to include them in your project.


UPDATE:  Ceki Gülcü (founder of the  Log4JSLF4J and  Logback projects) suggested simplier approach to get rid of  commons-logging dependency (see his  comment).


Posted 4th May 2010 by  Tomasz Nurkiewicz
Labels:  log4j  logback  logging  perf4j  slf4j

转载于:https://my.oschina.net/CasparLi/blog/325156

PS D:\A_code\外包\admin> npm install npm warn tar TAR_ENTRY_ERROR ENOENT: no such file or directory, open 'D:\A_code\外包\admin\node_modules\echarts\theme\carp.js' npm warn tar TAR_ENTRY_ERROR ENOENT: no such file or directory, open 'D:\A_code\外包\admin\node_modules\echarts\lib\coord\cartesian\Cartesian2D.js' npm warn tar TAR_ENTRY_ERROR ENOENT: no such file or directory, open 'D:\A_code\外包\admin\node_modules\caniuse-lite\data\regions\FM.js' npm warn tar TAR_ENTRY_ERROR ENOENT: no such file or directory, open 'D:\A_code\外包\admin\node_modules\echarts\lib\coord\cartesian\cartesianAxisHelper.js' npm warn tar TAR_ENTRY_ERROR ENOENT: no such file or directory, open 'D:\A_code\外包\admin\node_modules\caniuse-lite\data\regions\FO.js' npm warn tar TAR_ENTRY_ERROR ENOENT: no such file or directory, open 'D:\A_code\外包\admin\node_modules\zrender\build\package.json' npm warn tar TAR_ENTRY_ERROR ENOENT: no such file or directory, open 'D:\A_code\外包\admin\node_modules\echarts\lib\component\axisPointer\CartesianAxisPointer.js' npm warn tar TAR_ENTRY_ERROR ENOENT: no such file or directory, open 'D:\A_code\外包\admin\node_modules\zrender\dist\package.json' npm warn tar TAR_ENTRY_ERROR ENOENT: no such file or directory, open 'D:\A_code\外包\admin\node_modules\echarts\lib\component\axis\CartesianAxisView.js' npm warn tar TAR_ENTRY_ERROR ENOENT: no such file or directory, open 'D:\A_code\外包\admin\node_modules\rollup\dist\shared\index.js' npm warn tar TAR_ENTRY_ERROR ENOENT: no such file or directory, open 'D:\A_code\外包\admin\node_modules\zrender\package.json' npm warn tar TAR_ENTRY_ERROR ENOENT: no such file or directory, open 'D:\A_code\外包\admin\node_modules\echarts\lib\chart\graph\categoryFilter.js' npm warn cleanup Failed to remove some directories [ npm warn cleanup [ npm warn cleanup '\\\\?\\D:\\A_code\\外包\\admin\\node_modules\\@types\\lodash', npm warn cleanup [Error: ENOTEMPTY: directory not empty, rmdir 'D:\A_code\外包\admin\node_modules\@types\lodash\fp'] { npm warn cleanup errno: -4051, npm warn cleanup code: 'ENOTEMPTY', npm warn cleanup syscall: 'rmdir', npm warn cleanup path: 'D:\\A_code\\外包\\admin\\node_modules\\@types\\lodash\\fp' npm warn cleanup } npm warn cleanup ], npm warn cleanup [ npm warn cleanup 'D:\\A_code\\外包\\admin\\node_modules\\@types\\lodash', npm warn cleanup [Error: ENOTEMPTY: directory not empty, rmdir 'D:\A_code\外包\admin\node_modules\@types\lodash\fp'] { npm warn cleanup errno: -4051, npm warn cleanup code: 'ENOTEMPTY', npm warn cleanup syscall: 'rmdir', npm warn cleanup path: 'D:\\A_code\\外包\\admin\\node_modules\\@types\\lodash\\fp' npm warn cleanup } npm warn cleanup ], npm warn cleanup [ npm warn cleanup 'D:\\A_code\\外包\\admin\\node_modules\\caniuse-lite', npm warn cleanup [Error: ENOTEMPTY: directory not empty, rmdir 'D:\A_code\外包\admin\node_modules\caniuse-lite\data\features'] { npm warn cleanup errno: -4051, npm warn cleanup code: 'ENOTEMPTY', npm warn cleanup syscall: 'rmdir', npm warn cleanup path: 'D:\\A_code\\外包\\admin\\node_modules\\caniuse-lite\\data\\features' npm warn cleanup } npm warn cleanup ], npm warn cleanup [ npm warn cleanup '\\\\?\\D:\\A_code\\外包\\admin\\node_modules\\caniuse-lite', npm warn cleanup [Error: ENOTEMPTY: directory not empty, rmdir 'D:\A_code\外包\admin\node_modules\caniuse-lite\data\features'] { npm warn cleanup errno: -4051, npm warn cleanup code: 'ENOTEMPTY', npm warn cleanup syscall: 'rmdir', npm warn cleanup path: 'D:\\A_code\\外包\\admin\\node_modules\\caniuse-lite\\data\\features' npm warn cleanup } npm warn cleanup ], npm warn cleanup [ npm warn cleanup '\\\\?\\D:\\A_code\\外包\\admin\\node_modules\\element-plus', npm warn cleanup [Error: ENOTEMPTY: directory not empty, rmdir 'D:\A_code\外包\admin\node_modules\element-plus\theme-chalk'] { npm warn cleanup errno: -4051, npm warn cleanup code: 'ENOTEMPTY', npm warn cleanup syscall: 'rmdir', npm warn cleanup path: 'D:\\A_code\\外包\\admin\\node_modules\\element-plus\\theme-chalk' npm warn cleanup } npm warn cleanup ], npm warn cleanup [ npm warn cleanup '\\\\?\\D:\\A_code\\外包\\admin\\node_modules\\rollup', npm warn cleanup [Error: ENOTEMPTY: directory not empty, rmdir 'D:\A_code\外包\admin\node_modules\rollup\dist'] { npm warn cleanup errno: -4051, npm warn cleanup code: 'ENOTEMPTY', npm warn cleanup syscall: 'rmdir', npm warn cleanup path: 'D:\\A_code\\外包\\admin\\node_modules\\rollup\\dist' npm warn cleanup } npm warn cleanup ], npm warn cleanup [ npm warn cleanup 'D:\\A_code\\外包\\admin\\node_modules\\element-plus', npm warn cleanup [Error: ENOTEMPTY: directory not empty, rmdir 'D:\A_code\外包\admin\node_modules\element-plus\theme-chalk'] { npm warn cleanup errno: -4051, npm warn cleanup code: 'ENOTEMPTY', npm warn cleanup syscall: 'rmdir', npm warn cleanup path: 'D:\\A_code\\外包\\admin\\node_modules\\element-plus\\theme-chalk' npm warn cleanup } npm warn cleanup ], npm warn cleanup [ npm warn cleanup 'D:\\A_code\\外包\\admin\\node_modules\\rollup', npm warn cleanup [Error: ENOTEMPTY: directory not empty, rmdir 'D:\A_code\外包\admin\node_modules\rollup\dist'] { npm warn cleanup errno: -4051, npm warn cleanup code: 'ENOTEMPTY', npm warn cleanup syscall: 'rmdir', npm warn cleanup path: 'D:\\A_code\\外包\\admin\\node_modules\\rollup\\dist' npm warn cleanup } npm warn cleanup ], npm warn cleanup [ npm warn cleanup '\\\\?\\D:\\A_code\\外包\\admin\\node_modules\\@babel\\types', npm warn cleanup [Error: EPERM: operation not permitted, rmdir 'D:\A_code\外包\admin\node_modules\@babel\types'] { npm warn cleanup errno: -4048, npm warn cleanup code: 'EPERM', npm warn cleanup syscall: 'rmdir', npm warn cleanup path: 'D:\\A_code\\外包\\admin\\node_modules\\@babel\\types' npm warn cleanup } npm warn cleanup ] npm warn cleanup ] npm warn tar TAR_ENTRY_ERROR ENOENT: no such file or directory, open 'D:\A_code\外包\admin\node_modules\zrender\dist\zrender.js.map' npm warn tar TAR_ENTRY_ERROR ENOENT: no such file or directory, open 'D:\A_code\外包\admin\node_modules\echarts\lib\chart\graph\categoryVisual.js' npm error code EPERM npm error syscall open npm error path D:\Node\node_cache\_cacache\tmp\af2c55c1 npm error errno -4048 npm error [Error: EPERM: operation not permitted, open 'D:\Node\node_cache\_cacache\tmp\af2c55c1'] { npm error errno: -4048, npm error code: 'EPERM', npm error syscall: 'open', npm error path: 'D:\\Node\\node_cache\\_cacache\\tmp\\af2c55c1' npm error } npm error npm error The operation was rejected by your operating system. npm error It's possible that the file was already in use (by a text editor or antivirus), npm error or that you lack permissions to access it. npm error npm error If you believe this might be a permissions issue, please double-check the npm error permissions of the file and its containing directories, or try running npm error the command again as root/Administrator. npm error Log files were not written due to an error writing to the directory: D:\Node\node_cache\_logs npm error You can rerun the command with `--loglevel=verbose` to see the logs in your terminal PS D:\A_code\外包\admin>
05-29
tcw@tcw:~/code_file/omada_gateway$ make package/tplink/cspf/{clean,compile} V=s ERROR: please fix package/mtk/applications/luci-app-mtk/Makefile - see logs/package/mtk/applications/luci-app-mtk/dump.txt for details ERROR: please fix package/mtk/drivers/applications/luci-app-mtk/Makefile - see logs/package/mtk/drivers/applications/luci-app-mtk/dump.txt for details Collecting package info: done WARNING: can't parse line: PACKAGE_kmod-mediatek_hnat=y WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig! make[1]: Entering directory '/home/tcw/code_file/omada_gateway' make[2]: Entering directory '/home/tcw/code_file/omada_gateway/package/tplink/cspf' rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/stamp/.cspf_installed rm -f /home/tcw/code_file/omada_gateway/bin/mediatek-er7206_un_v2/packages/cspf_* rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/packages/cspf.default.list /home/tcw/code_file/omada_gateway/staging_dir/host/packages/cspf.default.list rm -rf /home/tcw/code_file/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/cspf make[2]: Leaving directory '/home/tcw/code_file/omada_gateway/package/tplink/cspf' make[1]: Leaving directory '/home/tcw/code_file/omada_gateway' ERROR: please fix package/mtk/applications/luci-app-mtk/Makefile - see logs/package/mtk/applications/luci-app-mtk/dump.txt for details ERROR: please fix package/mtk/drivers/applications/luci-app-mtk/Makefile - see logs/package/mtk/drivers/applications/luci-app-mtk/dump.txt for details Collecting package info: done WARNING: can't parse line: PACKAGE_kmod-mediatek_hnat=y WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig! make[1]: Entering directory '/home/tcw/code_file/omada_gateway' make[2]: Entering directory '/home/tcw/code_file/omada_gateway/package/libs/toolchain' if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean; fi; echo "libc" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean; fi; echo "libgcc" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install WARNING: skipping libssp -- package not selected if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean; fi; echo "libstdcpp" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean; fi; echo "libpthread" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install WARNING: skipping libthread-db -- package not selected if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean; fi; echo "librt" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install WARNING: skipping libgfortran -- package not selected WARNING: skipping ldd -- package not selected WARNING: skipping ldconfig -- package not selected make[2]: Leaving directory '/home/tcw/code_file/omada_gateway/package/libs/toolchain' make[2]: Entering directory '/home/tcw/code_file/omada_gateway/package/libs/libjson-c' if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install.clean; fi; echo "libjson-c" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install.clean; fi; echo "libjson" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install make[2]: Leaving directory '/home/tcw/code_file/omada_gateway/package/libs/libjson-c' make[2]: Entering directory '/home/tcw/code_file/omada_gateway/package/utils/lua' if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install.clean; fi; echo "liblua" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install.clean; fi; echo "lua" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install WARNING: skipping luac -- package not selected WARNING: skipping lua-examples -- package not selected make[2]: Leaving directory '/home/tcw/code_file/omada_gateway/package/utils/lua' make[2]: Entering directory '/home/tcw/code_file/omada_gateway/package/libs/libubox' if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean; fi; echo "libubox" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean; fi; echo "libblobmsg-json" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean; fi; echo "jshn" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean; fi; echo "libjson-script" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install WARNING: skipping libubox-lua -- package not selected make[2]: Leaving directory '/home/tcw/code_file/omada_gateway/package/libs/libubox' make[2]: Entering directory '/home/tcw/code_file/omada_gateway/package/system/uci' if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install.clean; fi; echo "uci" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install.clean; fi; echo "libuci" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install.clean; fi; echo "libuci-lua" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install make[2]: Leaving directory '/home/tcw/code_file/omada_gateway/package/system/uci' make[2]: Entering directory '/home/tcw/code_file/omada_gateway/package/tplink/cspf' WARNING: skipping cspf -- package not selected make[2]: Leaving directory '/home/tcw/code_file/omada_gateway/package/tplink/cspf' make[1]: Leaving directory '/home/tcw/code_file/omada_gateway' tcw@tcw:~/code_file/omada_gateway$ make package/tplink/cspf/{clean,compile} V=s ERROR: please fix package/mtk/applications/luci-app-mtk/Makefile - see logs/package/mtk/applications/luci-app-mtk/dump.txt for details ERROR: please fix package/mtk/drivers/applications/luci-app-mtk/Makefile - see logs/package/mtk/drivers/applications/luci-app-mtk/dump.txt for details Collecting package info: done WARNING: can't parse line: PACKAGE_kmod-mediatek_hnat=y WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig! make[1]: Entering directory '/home/tcw/code_file/omada_gateway' make[2]: Entering directory '/home/tcw/code_file/omada_gateway/package/tplink/cspf' rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/stamp/.cspf_installed rm -f /home/tcw/code_file/omada_gateway/bin/mediatek-er7206_un_v2/packages/cspf_* rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/packages/cspf.default.list /home/tcw/code_file/omada_gateway/staging_dir/host/packages/cspf.default.list rm -rf /home/tcw/code_file/omada_gateway/build_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/cspf make[2]: Leaving directory '/home/tcw/code_file/omada_gateway/package/tplink/cspf' make[1]: Leaving directory '/home/tcw/code_file/omada_gateway' ERROR: please fix package/mtk/applications/luci-app-mtk/Makefile - see logs/package/mtk/applications/luci-app-mtk/dump.txt for details ERROR: please fix package/mtk/drivers/applications/luci-app-mtk/Makefile - see logs/package/mtk/drivers/applications/luci-app-mtk/dump.txt for details Collecting package info: done WARNING: can't parse line: PACKAGE_kmod-mediatek_hnat=y WARNING: your configuration is out of sync. Please run make menuconfig, oldconfig or defconfig! make[1]: Entering directory '/home/tcw/code_file/omada_gateway' make[2]: Entering directory '/home/tcw/code_file/omada_gateway/package/libs/toolchain' if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean; fi; echo "libc" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean; fi; echo "libgcc" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install WARNING: skipping libssp -- package not selected if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean; fi; echo "libstdcpp" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean; fi; echo "libpthread" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install WARNING: skipping libthread-db -- package not selected if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install.clean; fi; echo "librt" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/toolchain.default.install WARNING: skipping libgfortran -- package not selected WARNING: skipping ldd -- package not selected WARNING: skipping ldconfig -- package not selected make[2]: Leaving directory '/home/tcw/code_file/omada_gateway/package/libs/toolchain' make[2]: Entering directory '/home/tcw/code_file/omada_gateway/package/libs/libjson-c' if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install.clean; fi; echo "libjson-c" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install.clean; fi; echo "libjson" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libjson-c.default.install make[2]: Leaving directory '/home/tcw/code_file/omada_gateway/package/libs/libjson-c' make[2]: Entering directory '/home/tcw/code_file/omada_gateway/package/utils/lua' if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install.clean; fi; echo "liblua" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install.clean; fi; echo "lua" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/lua.default.install WARNING: skipping luac -- package not selected WARNING: skipping lua-examples -- package not selected make[2]: Leaving directory '/home/tcw/code_file/omada_gateway/package/utils/lua' make[2]: Entering directory '/home/tcw/code_file/omada_gateway/package/libs/libubox' if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean; fi; echo "libubox" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean; fi; echo "libblobmsg-json" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean; fi; echo "jshn" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install.clean; fi; echo "libjson-script" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/libubox.default.install WARNING: skipping libubox-lua -- package not selected make[2]: Leaving directory '/home/tcw/code_file/omada_gateway/package/libs/libubox' make[2]: Entering directory '/home/tcw/code_file/omada_gateway/package/system/uci' if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install.clean; fi; echo "uci" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install.clean; fi; echo "libuci" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install if [ -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install.clean ]; then rm -f /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install.clean; fi; echo "libuci-lua" >> /home/tcw/code_file/omada_gateway/staging_dir/target-aarch64_cortex-a53_musl-1.2.4-er7206_un_v2/pkginfo/uci.default.install make[2]: Leaving directory '/home/tcw/code_file/omada_gateway/package/system/uci' make[2]: Entering directory '/home/tcw/code_file/omada_gateway/package/tplink/cspf' WARNING: skipping cspf -- package not selected make[2]: Leaving directory '/home/tcw/code_file/omada_gateway/package/tplink/cspf' make[1]: Leaving directory '/home/tcw/code_file/omada_gateway' 编译成功了吗
09-03
npm install npm WARN cleanup Failed to remove some directories [ npm WARN cleanup [ npm WARN cleanup 'E:\\安装包\\243243323906\\node_modules\\autoprefixer', npm WARN cleanup [Error: EPERM: operation not permitted, rmdir 'E:\安装包\243243323906\node_modules\autoprefixer'] { npm WARN cleanup errno: -4048, npm WARN cleanup code: 'EPERM', npm WARN cleanup syscall: 'rmdir', npm WARN cleanup path: 'E:\\安装包\\243243323906\\node_modules\\autoprefixer' npm WARN cleanup } npm WARN cleanup ], npm WARN cleanup [ npm WARN cleanup 'E:\\安装包\\243243323906\\node_modules\\debug', npm WARN cleanup [Error: EPERM: operation not permitted, rmdir 'E:\安装包\243243323906\node_modules\debug'] { npm WARN cleanup errno: -4048, npm WARN cleanup code: 'EPERM', npm WARN cleanup syscall: 'rmdir', npm WARN cleanup path: 'E:\\安装包\\243243323906\\node_modules\\debug' npm WARN cleanup } npm WARN cleanup ], npm WARN cleanup [ npm WARN cleanup 'E:\\安装包\\243243323906\\node_modules\\rxjs', npm WARN cleanup [Error: EPERM: operation not permitted, rmdir 'E:\安装包\243243323906\node_modules\rxjs'] { npm WARN cleanup errno: -4048, npm WARN cleanup code: 'EPERM', npm WARN cleanup syscall: 'rmdir', npm WARN cleanup path: 'E:\\安装包\\243243323906\\node_modules\\rxjs' npm WARN cleanup } npm WARN cleanup ], npm WARN cleanup [ npm WARN cleanup 'E:\\安装包\\243243323906\\node_modules\\framer-motion', npm WARN cleanup [Error: EPERM: operation not permitted, rmdir 'E:\安装包\243243323906\node_modules\framer-motion\dist\es'] { npm WARN cleanup errno: -4048, npm WARN cleanup code: 'EPERM', npm WARN cleanup syscall: 'rmdir', npm WARN cleanup path: 'E:\\安装包\\243243323906\\node_modules\\framer-motion\\dist\\es' npm WARN cleanup } npm WARN cleanup ] npm WARN cleanup ] npm ERR! code 1 npm ERR! path E:\安装包\243243323906\node_modules\electron npm ERR! command failed npm ERR! command C:\WINDOWS\system32\cmd.exe /d /s /c node install.js npm ERR! node:internal/modules/cjs/loader:1148 npm ERR! throw err; npm ERR! ^ npm ERR! npm ERR! Error: Cannot find module 'fs-extra' npm ERR! Require stack: npm ERR! - E:\安装包\243243323906\node_modules\@electron\get\dist\cjs\index.js npm ERR! - E:\安装包\243243323906\node_modules\electron\install.js npm ERR! at Module._resolveFilename (node:internal/modules/cjs/loader:1145:15) npm ERR! at Module._load (node:internal/modules/cjs/loader:986:27) npm ERR! at Module.require (node:internal/modules/cjs/loader:1233:19) npm ERR! at require (node:internal/modules/helpers:179:18) npm ERR! at Object.<anonymous> (E:\安装包\243243323906\node_modules\@electron\get\dist\cjs\index.js:4:12) npm ERR! at Module._compile (node:internal/modules/cjs/loader:1358:14) npm ERR! at Module._extensions..js (node:internal/modules/cjs/loader:1416:10) npm ERR! at Module.load (node:internal/modules/cjs/loader:1208:32) npm ERR! at Module._load (node:internal/modules/cjs/loader:1024:12) npm ERR! at Module.require (node:internal/modules/cjs/loader:1233:19) { npm ERR! code: 'MODULE_NOT_FOUND', npm ERR! requireStack: [ npm ERR! 'E:\\安装包\\243243323906\\node_modules\\@electron\\get\\dist\\cjs\\index.js', npm ERR! 'E:\\安装包\\243243323906\\node_modules\\electron\\install.js' npm ERR! ] npm ERR! } npm ERR! npm ERR! Node.js v20.13.1 npm ERR! A complete log of this run can be found in: C:\Users\刘汶东\AppData\Local\npm-cache\_logs\2025-08-08T09_18_55_725Z-debug-0.log
08-09
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值