2016-08-03 47 views
0

我在我的java项目中创建了多个日志文件,并且该代码工作正常。我的代码如下给予:具有多个文件的Java log4J,需要从日志文件中删除实例名称

# 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:\ 

二零一六年七月三十零日12点17分44秒INFO normalFile-加工文件 2016-07-30 12:17:48 INFO normalFile-添加新记录

取代日志实例(normalFile)名称,我需要将我的工作类名称放在日志文件中。

回答

0

读取文档,可以改变线在变换图案是这一个

log4j.appender.fileAppender.layout.ConversionPattern =%d {YYYY-MM-DD HH:MM:SS}% -5p%C {1} - %m%n

因此,将%c更改为%C即可获得您要查找的内容。无论如何,你可以阅读文档以获取更多信息。 log docs

0

您可以使用%C而不是%c

Docu

Ç - 用于输出呼叫者发出日志请求的完全限定类名。

但是介意这会对产生巨大的影响

另一个(可能更好)的可能性是让你得到记录器与根据类名来改变配置:

Logger myLogger = LogManager.getLogger(SomeClass.class); 

但你不得不改变你的配置,以直接添加附加器根据您的应用程序的软件包到根记录器或某个记录器。

例假设你的应用程序使用包 “my.application”:

log4j.logger.my.application=DEBUG, fileAppender 
0

这取决于你传递给LogManager.getLogger(String)方法是什么。无论您传递什么,都会在日志中显示为记录器的名称。

如果你想有你的班上有,简单地把类名或直接在类本身:

Logger myLogger = LogManager.getLogger(MyClass.class.getName()); 
// or better 
Logger myLogger = LogManager.getLogger(MyClass.class); 

还要注意的是1%c{1}原因只输出类名的最后部分(即没有包装)。只需使用%c即可输出完全限定的类名称。

+0

如果我在getLogger方法中传递我的类名,它将如何识别我的日志文件名。例如,我必须正确调试normalfile.log中的日志和report.log中的错误日志。 – Andy

+1

@Andy阅读log4j手册了解如何工作。Log4j将遍历一棵树来查找与记录器名称匹配的记录器。因此,使用my.app.className类创建的记录器(在java代码中)将与名为“my.app”的config中定义的记录器相匹配。如果没有这样的记录器,它会通过rootLogger。如果您想要将不同的LogLevel过滤到不同的文件,则需要使用过滤器。 – Fildor

+1

@Andy如果我没有记错,[Filters](https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/varia/LevelMatchFilter.html)需要通过xml配置进行配置。它们在属性配置中不可用。 – Fildor