网络那端

2009年3月18日星期三

关于Log4J日志丢失的疑问和解决

首先说,这不是个问题,只是我的不慎,导致它成了一个问题,并困扰了我很久. 故事是这样的:

我用spring + strut2 + hibernate 开发了一个系统, 日志是使用log4j 实现的,并在log4j.xml 中配置. 本来一切工作都很正常, 突然有一天,我发现有很多的debug日志没有输出, 导致我调试非常的困难. 在log4j.xml 中我确认打开了我的包的debug级输出, 并把其他包都设置为warn级.

配置并没有错误. 但事情发生了, pak 包中有个 action包,它下面全部都是继承xwork2.ActionSupport来的Action类,例如:

pak.action.BaseAction
pak.action.UserAction
pak.action.RoleAction
pak.action......OtherAction ...
pak.utils.StrUtil
pak.utils.DateUtil

其中BaseAction是所有其他Action类的父类. pak.utils包是另外一个包. 我发现pak.utils包及其他包中的日志都能输出, 而pak.action中无法输出,只有在 warn以上的才能输出.

为什么会这样? Log4j 不稳定? 不能吧. 那这些类有什么和其他包中有什么区别呢?

仔细研究发现: 在pak.utils包和其他包中的每个类都使用下面的方法来定义log对象.
private final Log log = LogFactory.getLog(this.getClass());

而在BaseAction中则为了简化代码, 直接使用了xwork2.ActionSupport中定义的LOG:
private final Log log = ActionSupport.LOG;

明白了, 因为我在log4j.xml 中把com.opensymphony 设置为warn级,导致ActionSupport的子类中都无法输出info/debug级日志.

总结:

不知道为什么log4j是这样的, 想来应该是因为在继承中使用父类的对象,而父类又被限制所致.

解决的办法, 当然是又使用了 private final Log log = LogFactory.getLog(this.getClass()); 这个方式.肯定不能把xwork2的日志级别改为debug, 否则就死定了.

在这之前, 我也曾经考虑过让其他包分别继承并使用spring, hibernate, org.apache.commons 中已经定义的log对象, 以便让系统可以统一的控制日志输出. 现在看来,这个方法不可取. 否则你将无法控制只输出你自己的包里的日志.

2009年3月13日星期五

Ubuntu 的网络配置

Ubuntu的网卡配置信息,在文件 /etc/network/interfaces 中。

例如:

auto lo
iface lo inet loopback

#virtual interface
#
#auto eth0:1
#iface eth0:1 inet static
#address 10.1.1.1
#netmask 255.255.255.0
#network 10.1.1.0
#broadcast 10.1.1.255

打开后里面可设置每个网卡的DHCP或静态ip,及各项网络参数。前面auto eth0,让网卡开机自动挂载.修改该文件后,通过重新启动网络,可以立刻生效,命令:
sudo /etc/init.d/networking restart

Ubuntu 的 DHCP 客户端功能,是由/sbin/dhclient 实现的,其配置文件在/etc/dhcp3/dhclient.conf 中。

通过图形界面 系统-首选项 - Network Configuration 可以设置各个网卡。

1. 以DHCP方式配置网卡

编辑文件/etc/network/interfaces:
sudo vi /etc/network/interfaces

并用下面的行来替换有关eth0的行:
auto eth0
iface eth0 inet dhcp

然后,用下面的命令使网络设置生效:
sudo /etc/init.d/networking restart


也可以在命令行下直接输入下面的命令来获取地址
sudo dhclient eth0


2. 为网卡配置静态IP地址

编辑文件:
sudo vi /etc/network/interfaces

对eth0 配置如下:
#开机自动加载,并指定ip、网关、子网等
auto eth0
iface eth0 inet static
address 192.168.1.101
gateway 192.168.1.1
netmask 255.255.255.0
#network 192.168.1.0
#broadcast 192.168.1.255

用下面的命令使网络设置生效:
sudo /etc/init.d/networking restart


3. 设定第二个IP地址(虚拟网卡)

编辑文件
sudo vi /etc/network/interfaces

在该文件中添加如下的行:
auto eth0:1
iface eth0:1 inet static
address 192.168.2.201
netmask 255.255.255.0
#network x.x.x.x
#broadcast x.x.x.x
#gateway x.x.x.x


用下面的命令使网络设置生效:
sudo /etc/init.d/networking restart


4. 设置主机名称(hostname)

使用下面的命令来查看当前主机的主机名称
sudo /bin/hostname

或设置当前主机的主机名称:
sudo /bin/hostname name2

这个名称可以是全名,如:dog.mydomain.com, 也可以只是简称dog.

但该名称name2并没有被写入/etc/hostname文件,reboot之后,它会从该文件来读取主机的旧名称。所以如果要永久改变主机名,需要在/etc/hostname 文件中直接写入新的名称。

此外使用 sudo domainname 可以查看和设置域名。例如:
sudo domainname mydomain.com
(如果这个命令不存在,你需要安装nis包,实际上nis和portmap包多用在服务器上,个人用机不需要安装,用hostname命令就可以了)

我觉得hostname命令只是设置了当前的系统变量kernel.hostname, 可以通过sysctl命令来做相同的事情:
sysctl kernel.hostname 用来查看当前主机名和域名 sysctl kernel.hostname=NEW_NAME 用来设置主机名 sysctl kernel.domainname=NEW_DOMAIN


关于设置主机名称的更多信息,请访问这里


5. 配置DNS

简单的设置静态解析,在/etc/hosts文件中,加入一些主机名称和这些主机名称对应的IP地址,就可以直接使用。

要访问DNS 服务器来进行查询,需要设置/etc/resolv.conf文件.
假设DNS服务器的IP地址是192.168.1.2, 那么/etc/resolv.conf文件的内容应为:

search mydomain.com
nameserver 192.168.1.2

另外参考其他文章:
http://www.itkhl.com/Article/data/itkhl-62546.html
http://my.donews.com/wucr/2008/02/15/post-080215-095538-676/

2008年11月10日星期一

Firefox 在linux 中无法显示中文问题

Linux 中的Firefox 无法显示Flash中的中文,总是以方块的方式显示。

解决方法据说比较多,下面是比较简单的一个:

#cd /etc/fonts/conf.d/
#sudo mv 49-sansserif.conf 99-sansserif.conf

OK了,其他什么都不需要改,应该不需要重启firefox,就能看到flash的中文了。

标签:

2008年9月26日星期五

Linux 桌面背景自动切换工具 - Drapes

如果喜欢好看的桌面,而又不想频繁的手工去换,可以试试看 Drapes 这个工具。 直接安装上就可以了。

sudo apt-get install drapes

安装完成后,在菜单-系统-首选项 中会增加一个菜单:Desktop Drapes。

运行它之后,在工具栏上多出一个屏幕一样的图标,首先配置它一下,把你喜欢的背景图片都加入进去,它会提你按照不同的分辨率分组管理,并按照你屏幕的分辨率自动切换背景。时间间隔你可以自己定,如果临时像切换下一张,只要点一下这个图标即可。很简单吧。

(不过要注意:别把当你把某目录下的图片全部加入时,一定要把目录下的隐私照片先拿出来,否则drapes可不管隐私与否,都会显示,别不小心搞糗了~~)

如果每次都是在开机后自己去运行这个程序,肯定太过分了。所以在drapes设置的"general" 选项中设定“start desktop drapes on start" ,每次登录后会自动运行。

可以设定一个合适的时间间隔。

也可以让它监控着某个目录,一旦该目录下增加了新图片,它会自动使用上。

Linux的开机进度条画面 - boot splash

今天想把自己的ubuntu 弄的好看点,于是就先从boot splash着手了。

boot splash是指 grub之后看到的一个带有进度条的图片,此时linux正在加载各种模块,启动一些服务。这和windows xp的开机界面是一样的。

1, 怎么进入boot splash界面?

相信你的电脑是用grub引导的(如果你用别的,我暂时也不了解)。看看/boot/grub/menu.lst 文件中,你用来启动linux的那项有个kernel命令,如下:

sudo vi /boot/grub/menu.lst

然后找到下面的内容:

title Ubuntu 8.04, kernel 2.6.24-19-generic
root (hd0,0)
kernel /vmlinuz-2.6.24-19-generic root=UUID= ro quiet splash locale=zh_CN
initrd /initrd.img-2.6.24-19-generic
quiet

请注意 kernel 命令行里有个 splash,它告诉grub加载boot splash功能。 如果把splash参数取消,则grub之后会进入控制台模式的界面,而不是图形化的boot splash了。


2,boot splash的程序

现在在ubuntu上默认用的是usplash, 它管理着boot splash的内容、图片、进度条等内容,直到splash结束。

你可以使用synaptics 来搜索更多的boot splash theme,这样就很容易安装其他版本的boot splash界面了。 当然这些都是ubuntu提供的,如果你要自己做界面,那就稍微复杂点了。下图给你一个例子。你可以把ubuntu提供的所有theme都安装上,然后自己切换界面。



另外一个可能是下一代的管理程序是splashy, 它比usplash更灵活,自己可以很方便的切换各种界面,界面不仅是图片,还可以包括动画! 你可以通过 apt-get来安装使用。

sudo apt-get install splashy --- 安装基本内容
sudo apt-get install splashy-themes --- 安装splashy提供的附加界面

不过要特别注意, splashy和usplash不能共存。 当你安装splashy时,会自动删除掉你安装的所有usplash和有关的theme包。

3, 如何切换usplash的不同界面方案?

usplash的图片,并不是单独存在的,它被编译在 so文件里,这些文件存储在 /usr/lib/usplash目录下。如果你安装了多个theme,你会看到该目录下有:usplash-theme-ubuntu.so, usplash-theme-kubuntu.so, edubuntu-splash.so,usplash-theme-xubuntu.so等多个so.

另外有个usplash-artwork.so,它是一个符号链接,如果你想使用哪个方案,就指向你需要的。

1) sudo ln -s usplash-theme-xubuntu.so usplash-artwork.so

特别注意: 如果你用的splash图片与你的电脑的分辨率不同,那就无法启动usplashy。

2) 用start manager来更新你电脑的分辨率和color depth, 或者直接修改/etc/usplash.conf中的内容设置与图片对应的分辨率。如果图片分辨率和电脑是一样的,不执行2)步也可以。

3) 然后要重新设置grub:

sudo dpkg-reconfigure linux-image-$(uname -r)
这一步必须执行。虽然用sudo usplash 可以测试新界面工作正常,而且关机界面已经切换成功。但必须执行这步才能使grub在启动的时候调用它,否则还会使用原来的图片。


现在你可以测试一下是否设置成功! 这不需要重启电脑。这步一定要做。万一你选择图片不合适,就无法启动了(如果不能启动,请在登录时进入grub,把kernal的splash参数去掉)

测试方法: sudo usplash .

如果成功,你会看到新的进度条图片。 此时你可以用alt-F7键来关闭它,并回到原来的界面。 如果失败,它就直接退出了。 

4, 如果你想制作自己的so文件,那就有点复杂了。再另外找资料吧。

5, 如果你想使用splashy,那就大胆安装它。
一般来说,按照前面说的安装splashy就可以用了,但是如果你在使用debian, ubuntu,每次切换一个不同的界面之后,还需要使用sudo update-initramfs -u 命令更新一下,否则开机界面还没有生效。

如果你想使用splashy,最好的文档是splashy网站: http://splashy.alioth.debian.org/, 其中的Installation, Themes Documentation两个文章足够解决各种问题。在网上搜索了很多所谓指南、教程、探密类的文章,以官方的这两个文档最好。

Linux上的密码管理器 - KeePassX

现在有很多密码管理器,Linux作为开源的系统,更是能找到很多类似的软件。我选择使用KeePassX,主要基于下面的理由:

  1. 它非常小,容易安装 sudo apt-get install keepassx
  2. 你可以把各类帐号分组,比如分为email, server, ftp, blog, database,im等,这样非常容易查找
  3. 每个帐号条目都有详细的描述,你可以很方便记忆
  4. 它可以帮助你生成复杂的密码,免得你自己造,也免得所有的密码都造的一样
  5. 它的数据库文件可以直接复制,作为备份,如果你要移植到其他电脑(比如重新安装了电脑)只要把这个文件复制过来就可以。
  6. 数据库被加密的很好,不容易破解。
当然了,必须牢记这个数据库的密码,否则自己也无法使用了。