On Sunday 11 December 2005 09:52, cap wrote: > Both of them has a class named "Logger" > > I used to include Log4r in my code so I can use Logger as a > shortcut of Log4r::Logger . > It works ok when useing "Logger[name]" to get logger I know it doesn't help now: As a general suggestion: Never include a module at the top level only to get shorter names! Ruby's include is *not* like "import" in Java or "using" in C# or "from xy import *" in Python. > Today I add the library "bluecloth" to my application. I found that > when requiring bluecloth,BlueCloth required 'logger' in its > "bluecloth.rb", So Ruby's internal Logger class overwrite the > Log4r::Logger in context, and doing 'include Log4r' again didn't > make the Logger turn back. The Logger is always ruby's internal > Logger and mine "Logger[name]' can't execute now (maybe the > priority of "include Log4r" is less than "require 'logger' ?") > > Is there any solution except replacing every "Logger" to > "Log4r::Logger" in my code? If it is possible to wrap your code in a module: module MyNamespace include Log4r # Now Logger will always reference Log4r::Logger end Or even better: module MyNamespace # don't include other Log4r methods and constants, # just create a shortcut for Log4r::Logger Logger = Log4r::Logger # define classes, modules, ... end Regards, Stefan