d*******r 发帖数: 3299 | |
g*****g 发帖数: 34805 | 2 看来你真是没写过 Java, 居然能问这个问题。
【在 d*******r 的大作中提到】 : 最近在用 Java 做一些 server-side services,要用到 Java 做 logging 的轮子。 : 研究了下,发现这个轮子貌似不错 http://logging.apache.org/log4j/2.x/manual/index.html : 里面有各种 local file, remote, socket, noSQL 的 log pusher : http://logging.apache.org/log4j/2.x/manual/appenders.html#Flume : http://logging.apache.org/log4j/2.x/manual/appenders.html#JMSQu : http://logging.apache.org/log4j/2.x/manual/appenders.html#NoSQL : 请问 Java 大牛,你们平时用的是这个 log4j2, 还是直接用自带的 java.util. : logging ?
|
p***o 发帖数: 1252 | 3 slf4j好用吗?
【在 g*****g 的大作中提到】 : 看来你真是没写过 Java, 居然能问这个问题。
|
d*******r 发帖数: 3299 | 4 确实是Java菜
大牛说说这个基础问题吧
【在 g*****g 的大作中提到】 : 看来你真是没写过 Java, 居然能问这个问题。
|
g*****g 发帖数: 34805 | 5 log4j大约是第一个主流开源轮子。跟 Ant差不多同时代的,现在还是主流。
【在 d*******r 的大作中提到】 : 确实是Java菜 : 大牛说说这个基础问题吧
|
g*********e 发帖数: 14401 | |
d*******r 发帖数: 3299 | |
m******3 发帖数: 184 | |
h******k 发帖数: 388 | 9 jdk自己也有logging,和log4j差不多
【在 d*******r 的大作中提到】 : 最近在用 Java 做一些 server-side services,要用到 Java 做 logging 的轮子。 : 研究了下,发现这个轮子貌似不错 http://logging.apache.org/log4j/2.x/manual/index.html : 里面有各种 local file, remote, socket, noSQL 的 log pusher : http://logging.apache.org/log4j/2.x/manual/appenders.html#Flume : http://logging.apache.org/log4j/2.x/manual/appenders.html#JMSQu : http://logging.apache.org/log4j/2.x/manual/appenders.html#NoSQL : 请问 Java 大牛,你们平时用的是这个 log4j2, 还是直接用自带的 java.util. : logging ?
|
H****S 发帖数: 1359 | 10 等你project变大,直接和间接dependency变多时,这就是log4j,slf4j,logback开始
互相打架的时候了。那时候的问题才更有意思。 |
|
|
d*******r 发帖数: 3299 | 11 大牛讲讲这个主要问题是为啥?
【在 H****S 的大作中提到】 : 等你project变大,直接和间接dependency变多时,这就是log4j,slf4j,logback开始 : 互相打架的时候了。那时候的问题才更有意思。
|
c******f 发帖数: 243 | |
w**z 发帖数: 8232 | 13 每次看 log4j.properties 就想哭。
【在 H****S 的大作中提到】 : 等你project变大,直接和间接dependency变多时,这就是log4j,slf4j,logback开始 : 互相打架的时候了。那时候的问题才更有意思。
|
J****r 发帖数: 274 | 14 哎!人新手问个问题,您乐意回就回,瞧不上就别理他,发这种冷嘲热讽的话有啥意思
。谁不是从菜鸟过来的?
【在 g*****g 的大作中提到】 : 看来你真是没写过 Java, 居然能问这个问题。
|
H****S 发帖数: 1359 | 15 取决与log4j,slf4j和logback在classpath谁比较靠前,java process会寻求log4j.
xml 或者 logback.xml来配置logger。比如说,很多人会喜欢用一个简单的bash脚本来
启动Java程序,
CLASSPATH=
for JAR in `ls lib/*.jar`; do
CLASSPATH=$JAR:$CLASSPATH
done
java -cp $CLASSPATH ...
注意这个脚本在每次运行的时候得到的CLASSPATH顺序是不定的,特别是一个程序要被
deploy到多台servers上。
这就造成了你觉得自己明明已经配置好logback.xml了,为什么log里面啥都没有呢,那
是因为程序实际上在找log4j.xml (log4j jar 来自于一个transitive dependency)。
一般这种情况下就需要做一个reverse dependency analysis找出logback或者log4j将
其彻底清除掉,或者更一劳永逸的办法:用log4j over slf4j来redirect log4j call
back to slf4j
【在 d*******r 的大作中提到】 : 大牛讲讲这个主要问题是为啥?
|
r***y 发帖数: 4379 | 16 还成吧...
用 xml 配置也笑不到哪里去...
【在 w**z 的大作中提到】 : 每次看 log4j.properties 就想哭。
|
d*******r 发帖数: 3299 | 17 还好还好,goodbug Java 大牛,教了大家很多有用的东西
我真是Java菜,大家多指点 :)
【在 J****r 的大作中提到】 : 哎!人新手问个问题,您乐意回就回,瞧不上就别理他,发这种冷嘲热讽的话有啥意思 : 。谁不是从菜鸟过来的?
|
w**z 发帖数: 8232 | 18 为一个log 搞得鸡飞狗跳,确实说不过去。
【在 r***y 的大作中提到】 : 还成吧... : 用 xml 配置也笑不到哪里去...
|
z*******3 发帖数: 13709 | 19 上cassandra和aop就好了
用java的应该都用spring吧?
用aop可以有效减少各种乱七八糟的log代码
结构也更合理,我针对每一个方法在调用前和后,各做一次拦截
获取相关数据,插入log,不过我不用log4j,找个nosql放
nosql就用来做这个的,cassandra很好
然后查的时候就查cassandra
要不然动不动就要grep,我的天
【在 w**z 的大作中提到】 : 为一个log 搞得鸡飞狗跳,确实说不过去。
|
z*******3 发帖数: 13709 | 20 项目变大了之后,不仅仅是log会有这个问题
其他依赖也都会开始打架,上gradle了
【在 H****S 的大作中提到】 : 等你project变大,直接和间接dependency变多时,这就是log4j,slf4j,logback开始 : 互相打架的时候了。那时候的问题才更有意思。
|
|
|
z*******3 发帖数: 13709 | 21 java所有的项目
都经常依赖其他项目
比如a依赖b,c也依赖b,很正常
然后经常遇到的是比如,a依赖b的beta版
c依赖b的2.1版,然后b的某一个方法在beta和2.1版里面不太一样
然后你同时用了a和c,这个时候你突然发现
他们都依赖的b项目开始冲突了,因为b项目的向后兼容做得很糟糕
虽然b的jars都在你的classpath里面
但是你要注意先后顺序
这个时候你就要问怎么办了?
一般是maven或者gradle搞定
但是这个只能治标,治本还是需要自己对依赖的类库有所控制
【在 d*******r 的大作中提到】 : 大牛讲讲这个主要问题是为啥?
|
r***y 发帖数: 4379 | 22 赞分享
类似 logging level 啥的也是用 aop 控制?
【在 z*******3 的大作中提到】 : 上cassandra和aop就好了 : 用java的应该都用spring吧? : 用aop可以有效减少各种乱七八糟的log代码 : 结构也更合理,我针对每一个方法在调用前和后,各做一次拦截 : 获取相关数据,插入log,不过我不用log4j,找个nosql放 : nosql就用来做这个的,cassandra很好 : 然后查的时候就查cassandra : 要不然动不动就要grep,我的天
|
z*******3 发帖数: 13709 | 23 可以吧,加多一个参数就是了
不过我觉得既然不用log4j了
就没有必要严格遵循log的level标准
我一般就是输入,输出,exception这三个凑起来用
基本上就能搞定了,around部分,也就是方法执行过程中的监控
就相对少了很多,因为如果大量使用的话
就跟log4j的结构差不多了,所以一般都是不得不用时候才写进去
debug level一般我都是依赖ide来搞
嘿嘿
【在 r***y 的大作中提到】 : 赞分享 : 类似 logging level 啥的也是用 aop 控制?
|
k*****3 发帖数: 226 | 24 说得好
【在 J****r 的大作中提到】 : 哎!人新手问个问题,您乐意回就回,瞧不上就别理他,发这种冷嘲热讽的话有啥意思 : 。谁不是从菜鸟过来的?
|
r***y 发帖数: 4379 | 25 晕, 俺咋没读出啥"冷嘲热讽"啊.
goodbug 和 dumbCoder 这哥俩儿都是葵花版的活跃ID, 一个后台大牛, 一个前台新秀,
相互稔熟, 就是很随便的话赶话吧.
【在 J****r 的大作中提到】 : 哎!人新手问个问题,您乐意回就回,瞧不上就别理他,发这种冷嘲热讽的话有啥意思 : 。谁不是从菜鸟过来的?
|
r***y 发帖数: 4379 | 26 多谢分享
【在 z*******3 的大作中提到】 : 可以吧,加多一个参数就是了 : 不过我觉得既然不用log4j了 : 就没有必要严格遵循log的level标准 : 我一般就是输入,输出,exception这三个凑起来用 : 基本上就能搞定了,around部分,也就是方法执行过程中的监控 : 就相对少了很多,因为如果大量使用的话 : 就跟log4j的结构差不多了,所以一般都是不得不用时候才写进去 : debug level一般我都是依赖ide来搞 : 嘿嘿
|
d*******r 发帖数: 3299 | 27 确实,
最高级的 log server 就是可以方便检索的 NoSQL DB
其实我这个项目就是准备用 ElasticSearch cluster 把公司很多 service logs 和
measurements 数据都存进去,
我现在在琢磨 ElasticSearch cluster 自己的 log 怎么存,有点 egg and chicken
problem 的感觉.
ES 主页上是有把自己的 log 也存进去的, 不过 ES cluster 如果挂了的话... 我得有
个容易看的简单 log.
我把这个 Edit 到首页吧.
【在 z*******3 的大作中提到】 : 上cassandra和aop就好了 : 用java的应该都用spring吧? : 用aop可以有效减少各种乱七八糟的log代码 : 结构也更合理,我针对每一个方法在调用前和后,各做一次拦截 : 获取相关数据,插入log,不过我不用log4j,找个nosql放 : nosql就用来做这个的,cassandra很好 : 然后查的时候就查cassandra : 要不然动不动就要grep,我的天
|
d*******r 发帖数: 3299 | 28 看起来是实战经验, 我记下了
【在 z*******3 的大作中提到】 : java所有的项目 : 都经常依赖其他项目 : 比如a依赖b,c也依赖b,很正常 : 然后经常遇到的是比如,a依赖b的beta版 : c依赖b的2.1版,然后b的某一个方法在beta和2.1版里面不太一样 : 然后你同时用了a和c,这个时候你突然发现 : 他们都依赖的b项目开始冲突了,因为b项目的向后兼容做得很糟糕 : 虽然b的jars都在你的classpath里面 : 但是你要注意先后顺序 : 这个时候你就要问怎么办了?
|
d*******r 发帖数: 3299 | 29 我前台后台都是菜... :D
主要其实是从 C++ 转来做 Web 的,C++ --> Python --> Node.js --> ...
秀,
【在 r***y 的大作中提到】 : 晕, 俺咋没读出啥"冷嘲热讽"啊. : goodbug 和 dumbCoder 这哥俩儿都是葵花版的活跃ID, 一个后台大牛, 一个前台新秀, : 相互稔熟, 就是很随便的话赶话吧.
|
H****S 发帖数: 1359 | 30 大部分依赖冲突都是版本冲突,sbt都可以自动resolve成最新版本。log4j和logback属
于不同的library,但是都要access logging system,所以实际中有时让人很困惑。建
议用log4j over slf4,一劳永逸。用aop还要上java agent,感觉有点overkill。
【在 z*******3 的大作中提到】 : 项目变大了之后,不仅仅是log会有这个问题 : 其他依赖也都会开始打架,上gradle了
|
|
|
w**z 发帖数: 8232 | 31 看看splunk, 自己做太烦了。
【在 d*******r 的大作中提到】 : 确实, : 最高级的 log server 就是可以方便检索的 NoSQL DB : 其实我这个项目就是准备用 ElasticSearch cluster 把公司很多 service logs 和 : measurements 数据都存进去, : 我现在在琢磨 ElasticSearch cluster 自己的 log 怎么存,有点 egg and chicken : problem 的感觉. : ES 主页上是有把自己的 log 也存进去的, 不过 ES cluster 如果挂了的话... 我得有 : 个容易看的简单 log. : 我把这个 Edit 到首页吧.
|
m********t 发帖数: 13072 | 32 小声问一句,什么是轮子啊?
我一直以为是军版提法轮功用的那个指标 |
r***y 发帖数: 4379 | 33 朋友谦虚了. 你的帖子学了不少前台的东西, 而且看的出来大多是实战的一手经验.
【在 d*******r 的大作中提到】 : 我前台后台都是菜... :D : 主要其实是从 C++ 转来做 Web 的,C++ --> Python --> Node.js --> ... : : 秀,
|
z*******3 发帖数: 13709 | 34 但是很多lib的新版本的api根本不兼容低版本的api
这种事情遇到过很多次,你更新到最新版本的话
有些依赖旧版的lib直接抛错,有些api被直接删掉了
当然拆开改掉,然后再打包也不是不可以,但是这就麻烦么
这个问题是大项目中不可回避的一个主要问题
aop的好处就在于,如果你用了spring,这个天然就在
而且代码就那么点,可以log一堆代码,何乐而不为?
【在 H****S 的大作中提到】 : 大部分依赖冲突都是版本冲突,sbt都可以自动resolve成最新版本。log4j和logback属 : 于不同的library,但是都要access logging system,所以实际中有时让人很困惑。建 : 议用log4j over slf4,一劳永逸。用aop还要上java agent,感觉有点overkill。
|
z*******3 发帖数: 13709 | 35 就是类库
【在 m********t 的大作中提到】 : 小声问一句,什么是轮子啊? : 我一直以为是军版提法轮功用的那个指标
|