阅读更多

14顶
2踩

编程语言

原创新闻 JDK Logger出了什么问题?

2008-10-30 16:31 by 副主编 QQbyte 评论(25) 有15112人浏览
Ryan de Laplante 说道:我曾经使用log4j作为日志打印工具,因为它是最流行的,但是最近,我决定在我的新项目中尝试JDK logger。我喜欢这种logger放入JDK的方式,因为不需要管理.jar的依赖,处理版本冲突等。所有我需要做的只是写一个磁盘文件,定义我需要的格式化字符串,在logs超过多少KB以后轮转,只需要保留唯一y存档文件。我使用JDK logger和使用log4j一样满意。

之前我阅读了一些logger日志框架的历史,试图去理解为什么很多开发者并不使用JDK logger。log4j是第一个最普遍受到广泛欢迎的Java日志框架。然后,它的主要API进入JDK 1.4标准。一些名称做了改变,但是概念是一样的。现在有很多开发者不想应用“新的”java 1.4,继续使用log4j。直到现在Java 1.7,许多开发者依然使用log4j或者通用的日志工具,而不是使用JDK logger。

我的问题就是JDK logger到底出了什么问题?为什么很多人说它是一个灾难?你为什么不使用它呢?我不是试图责难,而是对此无法理解。难道因为log4j拥有更多内建附加功能,比如 NTEventLogAppender, JMSAppender, 和 SMTPAppender?

这篇文章在DZone上争论激烈,你能说说你的看法吗?
来自: java.dzone.com
14
2
评论 共 25 条 请登录后发表评论
5 楼 derickkoo 2008-10-30 23:03
大哥,我想问下你有没有亲身去用过JUL呀(java.util.logging),简单来说JUL现在更本不能用(useless at all)是因为它来自JDK所以它的配置是JVM-wide, 也就是说一个JVM用同一配置(现在哪个服务器一个JVM只跑一个webapp的?),还有一个JUL先天不足就是它的配置是配整个类, 比如我把log输出到一个文件用一个FileHandler, 那么整个JVM里的所以webapps只要是用FileHandler的都会log输到这一个文件去, 不能一个logger配独立的Handler

而log4j就不一样了,因为它是classloader-wide的,一个JVN下即使有多个webapps,因为各个webapp用的classloader不同所以相互的配置没有任何影响。还有就是在log4j里一个不同的logger可以配多个同一类行的Appender。

说实话我也不喜欢在lib里多加个log4j.jar,但现在没有其他更好的办法呀,怎么说呢java.util.logging只是JDK提供的一个logging架构,只是把自带了个默认在webapp方面基本没用的实现,当然在一般的swing程序里只要独门jvm的还是方便的。当然你也可以基于jul架构写一套自己的logging系统,启动时设下java.util.logging.LogManager等就行了,比如Tomcat就自己实现了个JULi (JUL Improved). 晕,快错过班车了,闪...
4 楼 LucasLee 2008-10-30 22:55
熟悉哪个就用哪个。
就功能而言,log4j是比内置的log丰富得多的。
3 楼 java.lang.Object 2008-10-30 22:23
同意楼主的看法,我就不喜欢用log4j,明明是JDK提供了的功能,还去用log4j,纯粹是吃饱了撑得要么就是跟风。
用JDK的LOG连JAR包都不用附件,岂不是更好?
2 楼 Fly_m 2008-10-30 20:20
跟在别人的脚步后面,怎么去用不熟悉的东西.
1 楼 vieri122 2008-10-30 19:43
在java领域 跟风的人非常多
我也不例外 呵呵

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • delphi的打印控件

    delphi的打印控件,我自己使用的,有需要的可以下载安装

  • Delphi中获取打印机设备名和端口名

    {$ENDIF}varbeginend;end;end;end;

  • Delphi获取默认打印机名称及端口

    在前段时间写的收银系统中由于目前市场上很多电脑主板上已经没有并口,而POS机却又需要并口,所以目前需要用PCI转接卡,这个就导致不同门店使用的端口就有可能不同,这就给我们程序中弹出钱箱的指令带来一定的难度。所以就通过获取Window自带的默认,得出打印机信息。 在Windows文件下有个win.ini,里面自带默认打印机的信息。通过调用API函数Getprofilestri...

  • 打印机相关

    数据的传输与命令的传输可以采用Socket,这个很容易吧(找个黑客软件源码)对打印机的操作。Delphi中获取打印机设备名和端口名uses Printers;{$IFNDEF WIN32}const MAX_PATH = 144;{$ENDIF}procedure TForm1.Button1Click(Sender: TObject);var  pDevice : pChar;  pDriver

  • Delphi 打印 Tprinter(1)

    打印          打印对于许多 Windows 程序员来说是十分棘手的问题。         Delphi 简化了打印时用户所必须了解的大部分内容。用户可以很轻松地写出简单的打印程序来输出文本和位图化了的图像。 对于更为复杂的打印,仅需了解几个要领和技术,用户就可以实现任何类型的自定义打印。 当了解了这些后,打印也就不那么困难了。 Delphi 的TPrinter对象封装了 W

  • delphi 取得本机打印机列表及打印机详细信息

    delphi 取得本机打印机列表及打印机详细信息 2009-08-03 11:44 unit Unit1; interface uses ...

  • delphi选择打印机打印

    1 printer.getprinter(mdevice, mdriver, mport, mhdmode); 2 3 printer.setprinter(pchar(g_PRNzt), mdriver, mport, mhdmode);// 设置打印机,pchar(g_PRNzt)--打印机名称 4 printer.Canvas.Font.na...

  • 如何使用GetPrinter

    原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=316297 所属论坛:VCL组件开发及应用     审核组:Delphi 提问者:szchengyu     解决者: 感谢:acptvc 关键字:函数 调用 Delphi VCL组件开发及应用 参考 打印机 联机 pprinterinfo dwneeded getprinter h

  • 利用GetPrinter()函数可获得当前打印机信息

    利用GetPrinter()函数可获得当前打印机信息void __fastcall GetPrinter(char * ADevice, char * ADriver, char * APort, int &ADeviceMode)说明调用 GetPrinter 来获取当前打印机信息. ADevice 参数 是一个接收当前打印机设备名称的缓存。这就是显示在打印机管理器中的名称,如“Epson FX

  • GetPrinter 获取到的状态为 0

    HANDLE hPrinter=0; DWORD dwNeeded=0; PRINTER_INFO_2* pPrinterInfo= (PRINTER_INFO_2 *)malloc( 0 ); /*此处应判断返回值*/::OpenPrinter("Samsung SCX-4200 Series",&hPrinter,NULL); if(!::GetPrinter(hPrinter,...

  • delphi fmx网口命令方式调用pos打印机打印

    1,因要考虑跨平台,所以我选了fmx,网络传输的话用indy即可,全平台能用。用richedit排版好打印就可以了,但麻烦的是必须安装打印机驱动。最近用delphi fmx 在做一个pos打印程序,调整字体大小,换行,初始化,切纸等简单命令即可。首先要知道命令的含义,因命令很多,我们只需知道。如果用usb方式打印是挺简单的,以前弄过。于是我选择用网口方式打印。ESC/POS 命令打印。

Global site tag (gtag.js) - Google Analytics