阅读更多

14顶
2踩

编程语言

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

2008-10-30 16:31 by 副主编 QQbyte 评论(25) 有15199人浏览
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

    用程序获取打印机状态 网络上的一些代码都不能成功 借鉴一下,查看API函数,一般是函数的参数使用不当造成 终于成功! 含源代码: Delphi6

  • delphi 连接网口打印机 发送指令打印二维码

    procedure getQRBitmap(printstr:string); var moduleSize: Integer; slength: Integer; Send: string; Send_Length:String; PicNamearray: array[0..50] of Byte; begin moduleSize := 8; slength:=Length(printstr); //存入二维码数据 Send_L.

  • DEVMODE 结构体

    typedef struct _devicemode { TCHAR dmDeviceName[CCHDEVICENAME]; //打印机(显示设备)名称 WORD dmSpecVersion; WORD dmDriverVersion; //驱动版本号 WORD dmSize; //结构体大小 WORD dmDriverExtra; DWORD dmField...

  • 打印机相关

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

  • Delphi 中取本机的计算机名、IP地址、Windows登录的用户名

     几个在Delphi 中取本机的计算机名、IP地址、Windows登录的用户名的函数.uses Windows, WinSock;{ ComputerLocalIP }//取本机的 IP 地址function ComputerLocalIP: string;var  ch: array[1..32] of char;  wsData: TWSAData;  myHost: PHostE

  • Delphi 获取计算机名

    RAD Studio 10.2.3 测试√ procedure TForm_Tips.Button_GetComputerNameClick(Sender: TObject); {取得计算机名} function ComputerName: string; var CNameBuffer: PChar; fl_loaded: Boolean; CLen: ^DWord; begin GetMem(CNameBuffer, 255); New(CLen

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

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

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

    google_ad_client = "pub-2947489232296736";/* 728x15, 创建于 08-4-23MSDN */google_ad_slot = "3624277373";google_ad_width = 728;google_ad_height = 15;//<script type="text/javascript"

  • 获取设备的唯一标识符细解

    iOS中获取设备唯一标识符的方法随着ios版本的更新而变化,iOS 2.0版本以后UIDevice提供一个获取设备唯一标识符的方法uniqueIdentifier,通过该方法我们可以获取设备的序列号,这个也是目前为止唯一可以确认唯一的标示符。好景不长,因为该唯一标识符与手机一一对应,苹果觉得可能会泄露用户隐私,所以在 iOS 5.0之后该方法就被废弃掉了;iOS 6.0系统新增了两个用于替换uni...

  • delphi 中获取计算机名和IP

    function GetComputerName:String; //获取计算机名称 var wVersionRequested : WORD; wsaData : TWSAData; p : PHostEnt; s : array[0..128] of char; begin try wVersionRequested := MAKEWORD(1, 1);

  • 获得某一台网络打印机有几份等待打印的报表

    当我们要打印报表时,如果打印机是本机的打印机的话,当然马上就会将报表打印出来,反正打印机就只有您一个人在使用而已!但是如果是在一个人数很多的公司或企业时,往往就必须很多人来分享某一部打印机了,而且打印机也不一定就放在举目可及之处!当您将报表丢到网络打印机之后,由于不一定看得到打印机,您必须特别到摆放打印机的地方去拿报表,这时候您最关心的,就是报表印了没有,如果还没有的话,那还有几份还没打印的报

Global site tag (gtag.js) - Google Analytics