玩转日志Logger

明了的日志记录对于一个完美的系统来说是必不可少的。尤其项目在生产环境中遇到问题,开发人员可以通过日志记录逐一排查哪里出了故障。
Logger框架有很多种:Apache下的logger,util包下的logger,commons包下的logger,还有slf4j的logger,大家一定会问我,选择哪种框架呢? 说句题外话,要是我,我绝对不会考虑commons旗下的和util旗下的,为什么呢 ,日志功能如果这么低端的常用的包就有日志功能,肯定有考虑不周到的地方,再说也不够大气上档次,我的强烈推荐是slf4j。

知道我为什么会选择slf4j么?有如下几个原因:
1:效率上,功能上都是其他框架下的日志所比拟的。
2:slf4j是专一做日志功能的框架,知名度比其他框架好


实现日志的功能,我们离不开日志的配置文件,我一般不会选择xml格式配置文件,而会选择property格式的配置文件,我会把它当做属性的键值对来看待,更直观。

log4j.properties大体配置文件如下:
### 设置日志级别,低于WARN级别的日志不会输出到日志文件###
log4j.rootLogger=WARN,A1,A2

### 开发工具的控制台console打印出日志 ###
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.Target=System.out
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-5p(%10c{1}) %m%n

### 每天创建一个日志文件,而且会以年月日的开头命名 ###
log4j.appender.A2=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A2.File=logs/mall.log
log4j.appender.A2.DatePattern='.'yyyy-MM-dd
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %5p %c{1}:%L - %m%n

### 错误级别下的日志文件 ###
log4j.appender.Error=org.apache.log4j.DailyRollingFileAppender
log4j.appender.Error.DatePattern='.'yyyy-MM-dd
log4j.appender.Error.File=logs/mall_error.log
log4j.appender.Error.layout=org.apache.log4j.PatternLayout
log4j.appender.Error.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss,SSS} %-5p(%10c{1}) %m%n

### 为项目中某种包开头的类中有输出语句的地方输出到日志文件下A1,级别是debug ###
log4j.logger.com.linkage=DEBUG,A1
log4j.logger.com.ai=DEBUG,A1


格式化符号说明:
%p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
%r:输出自应用程序启动到输出该log信息耗费的毫秒数。
%t:输出产生该日志事件的线程名。
%l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。
%c:输出日志信息所属的类目,通常就是所在类的全名。
%M:输出产生日志信息的方法名。
%F:输出日志消息产生时所在的文件名称。
%L::输出代码中的行号。
%m::输出代码中指定的具体日志信息。
%n:输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"。
%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%:输出一个"%"字符。
另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:
1) c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。
2)%-20c:"-"号表示左对齐。
3)%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。


在代码的哪些地方写入正确格式的log信息呢?
1,在可能出现异常的地方写入erro级别的日志,因为这为后面的排错至关重要
2,在一些逻辑处理的地方写入info级别的日志,比如查看用户登录信息等
3,在开发的条件下写入debug信息,方便开发人员测试
第三方支付功能的技术人员;尤其适合从事电商、在线教育、SaaS类项目开发的工程师。; 使用场景及目标:① 实现微信与支付宝的Native、网页/APP等主流支付方式接入;② 掌握支付过程中关键的安全机制如签名验签、证书管理与敏感信息保护;③ 构建完整的支付闭环,包括下单、支付、异步通知、订单状态更新、退款与对账功能;④ 通过定时任务处理内容支付超时与概要状态不一致问题:本文详细讲解了Java,提升系统健壮性。; 阅读应用接入支付宝和建议:建议结合官方文档与沙微信支付的全流程,涵盖支付产品介绍、开发环境搭建箱环境边学边练,重点关注、安全机制、配置管理、签名核心API调用及验签逻辑、异步通知的幂等处理实际代码实现。重点与异常边界情况;包括商户号与AppID获取、API注意生产环境中的密密钥与证书配置钥安全与接口调用频率控制、使用官方SDK进行支付。下单、异步通知处理、订单查询、退款、账单下载等功能,并深入解析签名与验签、加密解密、内网穿透等关键技术环节,帮助开发者构建安全可靠的支付系统。; 适合人群:具备一定Java开发基础,熟悉Spring框架和HTTP协议,有1-3年工作经验的后端研发人员或希望快速掌握第三方支付集成的开发者。; 使用场景及目标:① 实现微信支付Native模式与支付宝PC网页支付的接入;② 掌握支付过程中核心的安全机制如签名验签、证书管理、敏感数据加密;③ 处理支付结果异步通知、订单状态核对、定时任务补偿、退款及对账等生产级功能; 阅读建议:建议结合文档中的代码示例与官方API文档同步实践,重点关注支付流程的状态一致性控制、幂等性处理和异常边界情况,建议在沙箱环境中完成全流程测试后再上线。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值