求求别再这么用log4x了
sl4j或者log4j中,推荐的记录方式是:
private Logger log = Logger.getLogger(getClass());
//或者
private static final Logger log = Logger.getLogger(XXX.class);
//调用
log.debug();
log.info();
然后很多人就觉得不爽了,这特么这里声明一个log变量,那里声明一个log变量,多傻呀,于是就产生了下面的记录方式:
LogHelper.debug();//或者LogUtil.debug()
LogHelper.info();
在这里,我不是针对谁,这么用的人,根本没有掌握log4x的意义所在!!!
日志记录解决方案#
阶段一##
最开始,是Console.Write,打印到控制台,看看内容是什么
阶段二##
console有两个弊端:
1)影响正常的输出——生产版本需要将这些打印代码去掉;
2)需要看的时候又一下刷过去了
于是变成文件记录
阶段三##
发现有些信息放在一起,总是从一大段无用的信息中去查找一些信息,于是产生了日志级别,根据不同的级别,记录到不同的地方
发现了Trace, Debug,Info, Warn, Error等级别。
阶段四##
发现调试信息特别多,记录起来没什么意义,要输出还影响程序性能。
但是有些问题,只能在生产环境下重现问题。
于是一种可以灵活控制日志输出的解决方案——log4x出现了。
log4x的用法#
可能很多人的用法仅限于,设置一个root的log配置
<root level="INFO">
<appender-ref ref="console" />
<appender-ref ref="rollingFile" />
</root>
但实际上,还有如下的方式
<logger name="com.abc.www.LogTest" level="DEBUG" />
<logger name="com.abc.www" level="DEBUG" />
<logger name="com.abc" level="DEBUG" />
当有如下logger的实例时
package com.abc.www;
public class LogTest{
private Logger log = LoggerFactory.getLogger(getClass());
}
会优先寻找最匹配的logger配置
如果找到 name="com.abc.www.LogTest"
的logger配置,则使用该配置,否则往上找 name="com.abc.www"
的logger配置,一直到最终root配置。
这才是log4x的最好用的地方!!!
所以,下面这种用法是不是有问题?
//LogHelper中
private static Logger log = LoggerFactory.getLogger("myLogger");
//使用
LogHelper.debug();
LogHelper.info();
其它#
以前我也疑惑log4j的用法,为什么要这么用,为什么要定义这么多log变量。
希望看到这篇文章的朋友,不再疑惑。
微信,加好友,不用付款
求求别再这么用log4x了的更多相关文章
- 2年java,蚂蚁一面,卒
其实我一个都没答上来.并不是因为我笨,是因为我不会.在大扰的帮助下,现在我会了,求求你再给我一个机会. TreeSet/HashSet 区别 顾名思义,首先是结构上的不同 1.TreeSet背后的结构 ...
- 面试被问烂的 Spring IOC(求求你别再问了)
广义的 IOC IoC(Inversion of Control) 控制反转,即"不用打电话过来,我们会打给你". 两种实现: 依赖查找(DL)和依赖注入(DI). IOC 和 D ...
- 这道Java基础题真的有坑!我求求你,认真思考后再回答。
本文目录 一.题是什么题? 二.阿里Java开发规范. 2.1 正例代码. 2.2 反例代码. 三.层层揭秘,为什么发生异常了呢? 3.1 第一层:异常信息解读. 3.2 第二层:抛出异常的条件解读. ...
- 求求你,下次面试别再问我什么是 Spring AOP 和代理了!
https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_9403056301388627935% ...
- 求求你们不要再用 RSA 私钥加密公钥解密了,这非常不安全!
最近经常在网上看到有人说巨硬的 CNG(Cryptography Next Generation 即下一代加密技术) 只提供 RSA 公钥加密私钥解密,没有提供 RSA 私钥加密公钥解密,他们要自己封 ...
- 求求你,别再用wait和notify了!
Condition 是 JDK 1.5 中提供的用来替代 wait 和 notify 的线程通讯方法,那么一定会有人问:为什么不能用 wait 和 notify 了? 哥们我用的好好的.老弟别着急,听 ...
- 求求你们了,别再写满屏的 if/ else 了!
为什么我们写的代码都是 if-else? 程序员想必都经历过这样的场景:刚开始自己写的代码很简洁,逻辑清晰,函数精简,没有一个 if-else,可随着代码逻辑不断完善和业务的瞬息万变:比如需要对入参进 ...
- 求求你们,别再刷 Star 了!这跟“爱国”没关系!
这几年,随着几大互联网公司的强大,纷纷投入云计算产业的建设,开源项目作为维护潜在客户群体(开发者)的重要手段,是各大云计算厂商都在努力做的事. 这几年也诞生了很多真正优秀和看似优秀的开源项目.真正优秀 ...
- Gym 101064 D Black Hills golden jewels 【二分套二分/给定一个序列,从序列中任意取两个数形成一个和,两个数不可相同,要求求出第k小的组合】
D. Black Hills golden jewels time limit per test 2 seconds memory limit per test 256 megabytes input ...
随机推荐
- LintCode 11 二叉查找树的搜索区间
题目链接:http://www.lintcode.com/zh-cn/problem/search-range-in-binary-search-tree/ 1.描述 给定两个值 k1 和 k2(k1 ...
- 多机并行计算框架 和CoolHash数据库(可用于多机机器学习)
http://my.oschina.net/fourinone/blog/289122 http://www.oschina.net/p/fourinone
- (二)Jquery Mobile介绍以及Jquery Mobile页面与对话框
Jquery Mobile介绍以及Jquery Mobile页面与对话框 一. Adobe Dreamweaver CS6 环境 最新版本的cs6会支持JM的使用,有自动提示功能,很强大.安装说明地 ...
- CodeForces 620B Grandfather Dovlet’s calculator
水题 #include<cstdio> #include<cstring> #include<cmath> #include<stack> #inclu ...
- div无法跟随内容的增加而拉伸
有时将 div 的 height 设置为 auto 后,仍然无法让 div 自动拉伸,发现是 display:block 的原因,将其设置为 inline-block 即可.
- Spring接口编程_设值注入和构造注入
说明: UserManagerImp是设值注入,UserManagerImp2是构造注入 接口不注入,也就是在Spring配置文件中没有接口的<bean>,但是定义的时候是用接口 priv ...
- Android线程之Thread 、Runnable 的两个例子
Thread例子: package fy.test; import android.app.Activity; import android.os.Bundle; import android.os. ...
- webform中 ajax调用后台方法(非webservice)
方法一:通过创建一个没有内容的窗体 后台: public partial class Ajax_ShoppingCart : System.Web.UI.Page { bookdbDataContex ...
- HIDKomponente使用读写Hid设备(转)
源:HIDKomponente使用读写Hid设备一瞥 HIDKomponente 是delphi中使用的第三方Hid控件库,可以检测.控制连接到电脑的Hid设备.一般情况下多为usb设备. HIDKo ...
- php包管理工具最基本的一些问题
windows下的 1.先安装windows下的set-up程序 点击一步步的, cmd进入,输入composer能成功显示一幅图说明安装成功 2.在下载,https://getcomposer.or ...