我的log4j是这么配置的
[code]
log4j.rootLogger = DEBUG,console,A,B
log4j.appender.console =org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=-%d{yyyy-MM-dd HH:mm:ss} - [ %p ] %l %x -%m%n
#log4j.appender.A=org.apache.log4j.RollingFileAppender
log4j.appender.A=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A.File=logs/info.txt
log4j.appender.A.Append = true
log4j.appender.A.Threshold = DEBUG
log4j.appender.A.DatePattern='.'yyyy-MM-dd
log4j.appender.A.layout=org.apache.log4j.PatternLayout
log4j.appender.A.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} [%p] %5p %c{1}:%L - %m%n
#log4j.appender.B = org.apache.log4j.DailyRollingFileAppender
log4j.appender.B=org.apache.log4j.DailyRollingFileAppender
log4j.appender.B.File = logs/error.txt
log4j.appender.B.Append = true
log4j.appender.B.Threshold = ERROR
log4j.appender.B.DatePattern='.'yyyy-MM-dd
log4j.appender.B.layout = org.apache.log4j.PatternLayout
log4j.appender.B.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} [%p] %5p %c{1}:%L - %m%n
web.xml如此加载
Log4jInit
util.configutil.Log4jInit
log4j-init-file
WEB-INF/log4j.lcf
1
Class类如此解析:
public class Log4jInit extends HttpServlet{
public void init(){
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("log4j-init-file");
if(file!=null){
PropertyConfigurator.configure(prefix+file);
}
}
}
[/code]
让我纳闷的是在服务器上的weblogic打印出来的东西根本就不是我在程序里写的log信息。
log 如下:
[code]
2009-01-06 05:07:29 [INFO] INFO PropertyMessageResources:127 - Initializing, config='org.apache.struts.util.LocalStrings', returnNull=true
2009-01-06 05:07:29 [INFO] INFO PropertyMessageResources:127 - Initializing, config='org.apache.struts.action.ActionResources', returnNull=true
2009-01-06 05:07:29 [DEBUG] DEBUG Digester:1621 - register('-//Apache Software Foundation//DTD Struts Configuration 1.0//EN', 'zip:/bea/user_projects/domains/sasdomain/SASManagedServer/.wlnotdelete/extract/SASManagedServer_frame_frame/jarfiles/WEB-INF/lib/struts3953.jar!/org/apache/struts/resources/struts-config_1_0.dtd'
2009-01-06 05:07:29 [DEBUG] DEBUG Digester:1621 - register('-//Apache Software Foundation//DTD Struts Configuration 1.1//EN', 'zip:/bea/user_projects/domains/sasdomain/SASManagedServer/.wlnotdelete/extract/SASManagedServer_frame_frame/jarfiles/WEB-INF/lib/struts3953.jar!/org/apache/struts/resources/struts-config_1_1.dtd'
2009-01-06 05:07:29 [DEBUG] DEBUG Digester:1621 - register('-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN', 'zip:/bea/user_projects/domains/sasdomain/SASManagedServer/.wlnotdelete/extract/SASManagedServer_frame_frame/jarfiles/WEB-INF/lib/struts3953.jar!/org/apache/struts/resources/web-app_2_2.dtd'
2009-01-06 05:07:29 [DEBUG] DEBUG Digester:1621 - register('-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN', 'zip:/bea/user_projects/domains/sasdomain/SASManagedServer/.wlnotdelete/extract/SASManagedServer_frame_frame/jarfiles/WEB-INF/lib/struts3953.jar!/org/apache/struts/resources/web-app_2_3.dtd'
2009-01-06 05:07:29 [DEBUG] DEBUG ActionServlet:1426 - Scanning web.xml for controller servlet mapping
2009-01-06 05:07:29 [DEBUG] DEBUG sax:1171 - setDocumentLocator(weblogic.apache.xerces.parsers.AbstractSAXParser$LocatorProxy@58d53986)
2009-01-06 05:07:29 [DEBUG] DEBUG sax:1205 - startDocument()
2009-01-06 05:07:29 [DEBUG] DEBUG sax:1392 - resolveEntity('-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN', 'http://java.sun.com/dtd/web-app_2_3.dtd')
2009-01-06 05:07:29 [DEBUG] DEBUG Digester:1415 - Resolving to alternate DTD 'zip:/bea/user_projects/domains/sasdomain/SASManagedServer/.wlnotdelete/extract/SASManagedServer_frame_frame/jarfiles/WEB-INF/lib/struts3953.jar!/org/apache/struts/resources/web-app_2_3.dtd'
2009-01-06 05:07:29 [DEBUG] DEBUG sax:1234 - startElement(,web-app,web-app)
2009-01-06 05:07:29 [DEBUG] DEBUG Digester:1241 - Pushing body text ''
2009-01-06 05:07:29 [DEBUG] DEBUG Digester:1260 - New match='web-app'
2009-01-06 05:07:29 [DEBUG] DEBUG Digester:1284 - No rules found matching 'web-app'.
2009-01-06 05:07:29 [DEBUG] DEBUG sax:1123 - ignorableWhitespace(
)
2009-01-06 05:07:29 [DEBUG] DEBUG sax:1234 - startElement(,display-name,display-name)
2009-01-06 05:07:29 [DEBUG] DEBUG Digester:1241 - Pushing body text ''
2009-01-06 05:07:29 [DEBUG] DEBUG Digester:1260 - New match='web-app/display-name'
2009-01-06 05:07:29 [DEBUG] DEBUG Digester:1284 - No rules found matching 'web-app/display-name'.
2009-01-06 05:07:29 [DEBUG] DEBUG sax:936 - characters(dw)
2009-01-06 05:07:29 [DEBUG] DEBUG sax:1004 - endElement(,display-name,display-name)
2009-01-06 05:07:29 [DEBUG] DEBUG Digester:1007 - match='web-app/display-name'
2009-01-06 05:07:29 [DEBUG] DEBUG Digester:1008 - bodyText='dw'
2009-01-06 05:07:29 [DEBUG] DEBUG Digester:1039 - No rules found matching 'web-app/display-name'.
2009-01-06 05:07:29 [DEBUG] DEBUG Digester:1046 - Popping body text ''
2009-01-06 05:07:29 [DEBUG] DEBUG sax:1123 - ignorableWhitespace(
)
..........................后面还有很多类似的信息 这些都是什么信息怎么会在我的log里出现啊。是容器的吗?它怎么会打印到我这里来啊。我配置的有问题吗。但在我本地tomcat上都没问题啊
[/code]
[b]问题补充:[/b]
INFO也不行啊 我这里打印出来的info也都没有我程序里的写info信息啊
[b]问题补充:[/b]
同一个应用下配置多个log4j,是怎么配置的!
[b]问题补充:[/b]
确时时我的应用发布的地方也同时有别人的应用,也就是说都用的同一个web。xml里面。我在单独的应用里就没有这个问题,但我不知道如何解决,怎么样配才能和别的区分开来。别人的我没有权限去看。只能修改自己的,而且还必须放在同一个服务下。我要晕死了,到现在这个log都无法使用,每次错现错误我都无法通过log方式去解决很是困惑啊。log4j在配置的时候有没有专门的功能可以在同一服务下配置多套log4j的啊
[b]问题补充:[/b]
[quote]这么简单的话,不可能的,看看你打出来的是不是别的系统的日志,换个服务器试一下.[/quote]
这个应该不会,因为那个目录确实是我在log4j配置信息里配置的目录啊。
log4j.appender.A.File=logs/info.txt
log4j.appender.B.File = logs/error.txt
[b]问题补充:[/b]
非常感谢hanhg (中级程序员) 对我的帮助!
就从单方面来说我上面所做的log4j配置的正确吗?真正的应用里log4j都是怎么配置的,能不能指点我一下 让我上个台阶。
我觉得你上面的配置是没有问题的,日志的级别一般情况下会设置为info还是debug,要运行时决定,info的一般为基本信息,dubug为调试信息。
对于一些基本的应用和你的配置是差不多的。
有些应用也会通过重写log4j的Appender来打印日志。定义自己的日志打印在哪里。
你可以往上随便找一遍介绍,我觉得这个东西其实还是比较容易的,用的多了就好了。
个人的一点建议,有点关公面前耍大刀了。
希望我们可以一起进步。
参考这个;
log4j.rootLogger=DEBUG,A1
log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
log4j.appender.A1.file=logs/snmpAgentlog.txt
log4j.appender.A1.DatePattern='.'yyyy-MM-dd
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=[%d{yyyy-MM-dd HH:mm:ss}] [%-5p] [%m] - [%l] %3x %n
配置信息参考:http://avery-leo.iteye.com/admin/blogs/253502
我看到你的log4j里面配置了很多不必要的信息。我把从网上找到的简单教程发一下,希望对你有帮助。
Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。
#配置根Logger
log4j.rootLogger = [ level ] , appenderName1 , appenderName2 , …
#配置日志信息输出目的地Appender
log4j.appender.appenderName = fully.qualified.name.of.appender.class
log4j.appender.appenderName.option1 = value1
…
log4j.appender.appenderName.optionN = valueN
#配置日志信息的格式(布局)
log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class
log4j.appender.appenderName.layout.option1 = value1
…
log4j.appender.appenderName.layout.optionN = valueN
其中 [level] 是日志输出级别,共有5级:
FATAL 0
ERROR 3
WARN 4
INFO 6
DEBUG 7
Appender 为日志输出目的地,Log4j提供的appender有以下几种:
org.apache.log4j.ConsoleAppender(控制台),
org.apache.log4j.FileAppender(文件),
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件),
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
Layout:日志输出格式,Log4j提供的layout有以下几种:
org.apache.log4j.HTMLLayout(以HTML表格形式布局),
org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
打印参数: Log4J采用类似C语言中的printf函数的打印格式格式化日志信息,如下:
%m 输出代码中指定的消息
%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
%r 输出自应用启动到输出该log信息耗费的毫秒数
%c 输出所属的类目,通常就是所在类的全名
%t 输出产生该日志事件的线程名
%n 输出一个回车换行符,Windows平台为“\r\n”,Unix平台为“\n”
%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss , SSS},输出类似:2002年10月18日 22 : 10 : 28 , 921
%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java: 10 )
在代码中初始化Logger:
1)在程序中调用BasicConfigurator.configure()方法:给根记录器增加一个ConsoleAppender,输出格式通过PatternLayout设为"%-4r [%t] %-5p %c %x - %m%n",还有根记录器的默认级别是Level.DEBUG.
2)配置放在文件里,通过命令行参数传递文件名字,通过PropertyConfigurator.configure(args[x])解析并配置;
3)配置放在文件里,通过环境变量传递文件名等信息,利用log4j默认的初始化过程解析并配置;
4)配置放在文件里,通过应用服务器配置传递文件名等信息,利用一个特殊的servlet来完成配置。
为不同的 Appender 设置日志输出级别:
当调试系统时,我们往往注意的只是异常级别的日志输出,但是通常所有级别的输出都是放在一个文件里的,如果日志输出的级别是BUG!?那就慢慢去找吧。
这时我们也许会想要是能把异常信息单独输出到一个文件里该多好啊。当然可以,Log4j已经提供了这样的功能,我们只需要在配置中修改Appender的Threshold 就能实现,比如下面的例子:
[配置文件]
### set log levels ###
log4j.rootLogger = debug , stdout , D , E
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{ABSOLUTE} %5p %c{ 1 }:%L - %m%n
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/log.log
log4j.appender.D.Append = true
log4j.appender.D.Threshold = DEBUG ## 输出DEBUG级别以上的日志
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
log4j.appender.D = org.apache.log4j.DailyRollingFileAppender
log4j.appender.D.File = logs/error.log ## 异常日志文件名
log4j.appender.D.Append = true
log4j.appender.D.Threshold = ERROR ## 只输出ERROR级别以上的日志!!!
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n
[代码中使用]
public class TestLog4j {
public static void main(String[] args) {
PropertyConfigurator.configure( " D:/Code/conf/log4j.properties " );
Logger logger = Logger.getLogger(TestLog4j. class );
logger.debug( " debug " );
logger.error( " error " );
}
}
运行一下,看看异常信息是不是保存在了一个单独的文件error.log中
你吧debug换成info不就行啦!
这些都是一些系统的运行日志,你的日志级别是dubug,那么会把你的dubug信息和系统的信息都打印出来,建议把你的日志信息在代码里面写成info,配置中也改为info级别
哥们,这是不可能的,如果你的代码就是[quote]public class Log4jInit extends HttpServlet{
public void init(){
String prefix = getServletContext().getRealPath("/");
String file = getInitParameter("log4j-init-file");
if(file!=null){
PropertyConfigurator.configure(prefix+file);
}
}
} [/quote]这么简单的话,不可能的,看看你打出来的是不是别的系统的日志,换个服务器试一下.
[quote]确时时我的应用发布的地方也同时有别人的应用,也就是说都用的同一个web。xml里面。我在单独的应用里就没有这个问题,但我不知道如何解决,怎么样配才能和别的区分开来。别人的我没有权限去看。只能修改自己的,而且还必须放在同一个服务下。我要晕死了,到现在这个log都无法使用,每次错现错误我都无法通过log方式去解决很是困惑啊。log4j在配置的时候有没有专门的功能可以在同一服务下配置多套log4j的啊 [/quote]你的想法不太容易实现,好像你的log4j没有被加载.
[quote]这个应该不会,因为那个目录确实是我在log4j配置信息里配置的目录啊。
log4j.appender.A.File=logs/info.txt
log4j.appender.B.File = logs/error.txt [/quote]
这个不足以说明问题。因为你 单独部署是没有问题的。你看看把tomcat中的配置文件修改一下,然别的系统先不启动,或者你的系统先启动,问题是不是还是一样的。