Yuv*_*dam 41 java logging frameworks
根据标题,您是否找到了足以满足您需求的默认Java日志框架?
您是否使用其他日志记录服务,如log4j或其他?如果是这样,为什么?我想听听您对不同类型项目中的日志记录需求的任何建议,以及何时集成框架实际上是必要和/或有用的.
Hux*_*uxi 46
java.util.logging(jul)从一开始就没必要了.只是忽略它.
jul本身有以下缺点:
最重要的一点:如果您敢于定义自己的日志级别,则可能会遇到内存泄漏问题!
请在这里阅读有关此效果的信息:
这是一个非常有趣的阅读,即使你不打算使用自定义级别,顺便说一句,因为问题是一个广泛的问题,根本不适用于jul.
我个人建议使用SLF4J + Logback组合进行所有日志记录.这两个项目都由LOG4J背后的人CekiGülcü协调.
SLF4J是一个值得(但非官方,因为它不是来自同一组)commons.logging的继承者.它比CL更少问题,因为它静态地解析了实际使用的日志记录后端.此外,它具有比CL更丰富的API.
另一方面,Logback是LOG4J的(非)官方继承者.它本地实现了SLF4J,因此任何包装器都不会产生任何开销.
如果你仍然认为我应得的话,你现在可能会投票给我.;)
Eli*_*jah 23
在大多数情况下,Java JDK日志记录本身并不足够.但是,如果您有一个使用多个开源第三方库的大型项目,您将很快发现其中许多具有不同的日志记录依赖项.
在这些情况下,需要从日志记录实现中抽象日志API变得很重要.我建议使用slf4j或logback(使用slf4j API)作为您的API,如果您想坚持使用Java JDK日志记录,您仍然可以!Slf4j可以毫无问题地输出到许多不同的记录器实现.
在最近的一个项目中发生了一个有用的具体例子:我们需要使用需要log4j的第三方库,但是我们不想并行运行两个日志框架,所以我们使用了slf4j log4j api包装器库和问题解决了.
总之,Java JDK日志记录很好,但是我的第三方库中使用的标准化API将为您节省时间.试着想象重构每个日志声明!
sbl*_*ndy 16
SLF4J是新生儿.我已经完成了一些工作,它非常好.它的主要优点是参数化日志记录,这意味着你这样做:
logger.debug("The new entry is {}. It replaces {}.", entry, oldEntry);
Run Code Online (Sandbox Code Playgroud)
而不是这个:
logger.debug("The new entry is " + entry + ". It replaces " + oldEntry + ".");
Run Code Online (Sandbox Code Playgroud)
并且只有在实际记录语句时才执行所有字符串操作.看起来也更干净.
应该注意的是,SLF4J是一个类似于commons-logging的包装器,尽管它声称不太容易出现commons-logging的类加载器问题.
小智 11
我们始终使用java.util.logging.也适用于大型项目.你应该调整一些东西(例如默认格式),但这不是真正的要点.我发现Java中的日志记录框架的数量和它们实现的功能蠕变相当令人烦恼,并且对Java社区有点尴尬.关于伐木的宗教辩论水平是一个严重错误的确定迹象.
JUL为您提供的是一个简单但足够的API和一个单独的位置来配置您想要查看的日志输出(logging.properties或JMX ...).它始终存在且稳定.
所有想要记录的代码都应该遵循标准约定(默认级别为INFO),否则不会再使用有意义名称的记录器(例如包或类名),你会没事的.
JDK日志记录工具总是完成我需要他们做的事情 - 从来没有遇到过问题.
对我来说,第三方记录工具既不必要也不可取.
我无法弄清楚如何控制java.util.logging框架中各个类的日志记录级别,这在log4j中是可能的.如果我有诊断错误麻烦或有它记录重要信息的高流量的课,我可以改变级别的单一类日志越来越离开了课堂的休息相对平静.
NB可能是我无法弄清楚如何做到这一点,或者java.util.logging可能已经改变,因为我尝试过.
| 归档时间: |
|
| 查看次数: |
10479 次 |
| 最近记录: |