我在我的java项目中创建了多个日志文件,并且该代码运行正常。我的代码如下:
# Root logger option
log=../logs
log4j.rootLogger=INFO, file
log4j.logger.normalFile=DEBUG, fileAppender
log4j.logger.reportFile=DEBUG, reportAppender
log4j.additivity.normalFile=false
log4j.additivity.reportFile=false
log4j.appender.fileAppender=org.apache.log4j.RollingFileAppender
log4j.appender.fileAppender.File=${log}/normalLOG.log
log4j.appender.fileAppender.MaxFileSize=1MB
log4j.appender.fileAppender.MaxBackupIndex=1
log4j.appender.fileAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.fileAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n
log4j.appender.reportAppender=org.apache.log4j.RollingFileAppender
log4j.appender.reportAppender.File=${log}/reportLOG.log
log4j.appender.reportAppender.MaxFileSize=1MB
log4j.appender.reportAppender.MaxBackupIndex=1
log4j.appender.reportAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.reportAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1} - %m%n
当我检查我的日志文件时,我得到了下面给出的输出:
2016-07-30 12:17:44 INFO normalFile- Reading from C:\
2016-07-30 12:17:44 INFO normalFile-处理文件 2016-07-30 12:17:48 INFO normalFile-新记录添加
我需要将工作类名称放在日志文件中,而不是日志实例( normalFile )名称。
答案 0 :(得分:0)
您可以使用%C
代替%c
。
来自Docu:
C - 用于输出发出记录请求的调用者的完全限定类名。
但请注意,这会对效果产生巨大影响。
另一种(可能更好)的可能性是改变配置,以便你获得具有相应类名的Loggers:
Logger myLogger = LogManager.getLogger(SomeClass.class);
但是你必须改变你的配置,直接将appender添加到根记录器或基于你的应用程序包的一些记录器。
假设您的应用程序使用包“my.application”:
的示例log4j.logger.my.application=DEBUG, fileAppender
答案 1 :(得分:0)
这取决于您传递给LogManager.getLogger(String )
方法的内容。无论你传递什么,它都会在日志中显示为记录器的名称。
如果你想在那里上课,只需传递课程名称或直接传授课程本身:
Logger myLogger = LogManager.getLogger(MyClass.class.getName());
// or better
Logger myLogger = LogManager.getLogger(MyClass.class);
另请注意,1
中的%c{1}
会导致只输出类名的最后一部分(即没有包)。仅使用%c
输出完全限定的类名。
答案 2 :(得分:0)
阅读文档,您可以将转换模式所在的行更改为
log4j.appender.fileAppender.layout.ConversionPattern =%d {yyyy-MM-dd HH:mm:ss}%-5p%C {1} - %m%n
因此,将%c更改为%C即可获得所需内容。无论如何,您可以阅读文档以获取更多信息。log docs