问题描述
我有一个问题应用 log4j2.xml 自动配置,我认为这与我的文件夹安排有关.
我正在使用 maven 添加log4j2 libs,并按照以下方式安排我的项目:
- 一个包含所有系统服务器和客户端使用的所有"常见"类的项目.
- 另一个"核心"项目 - 服务器端应用程序.
这两个项目都使用相同的一般软件包层次结构(例如 com.foo.specific.package )
在公共项目中,我定义了一个记录器包装器:
public class LogWrapper { static Logger systemParentLogger = LogManager.getLogger("com.foo"); public static Logger getLogger(Class<?> cls) { return LogManager.getLogger(cls.getName()); } }
此外,公共项目包含 log4j2.xml meta-inf (以及Hibernate用法的persistence.xml文件).
<?xml version="1.0" encoding="UTF-8"?> <configuration name="PRODUCTION" status="OFF"> <appenders> <appender type="RollingFile" name="MyFileAppender" fileName="logs/app.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> <layout type="PatternLayout" pattern="%d %p %C{1.} [%t] %m%n"/> </appender> </appenders> <loggers> <root level="error"> <appender-ref ref="MyFileAppender"/> </root> <logger name="com.foo" level="info" additivity="false"> <appender-ref ref="MyFileAppender"/> </logger> <logger name="org.hibernate" level="error"> <appender-ref ref=MyFileAppender"/> </logger> </loggers> </configuration>
在核心项目中运行示例代码(使用我写的LogWrapper和一些JPA Voodoo)时,我仍然可以看到Info Hibernate Logs,并且没有创建日志文件.我应该指出,在调试代码时,我可以看到获取的记录器得到了一些奇怪的值" com.foo.core.core.persistence.persistencexmltest:sun.misc.misc.launcher $ "
推荐答案
log4j2.xml 被放置在"文件夹"中,以日食为"不在classpath"中.
更改 meta-inf 为"源文件夹" 解决了问题.
此外,未正确定义 log4j2.xml 文件.
这些是所需的修改:
<?xml version="1.0" encoding="UTF-8"?> <configuration name="PRODUCTION" status="OFF"> <appenders> <RollingFile name="MyFileAppender" fileName="../Logs/app.log" filePattern="../Logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> <PatternLayout> <pattern>%d %p %C{1.} [%t] %m%n</pattern> </PatternLayout> <Policies> <OnStartupTriggeringPolicy /> <TimeBasedTriggeringPolicy interval="6" modulate="true"/> <SizeBasedTriggeringPolicy size="250 MB"/> </Policies> </RollingFile> </appenders> <loggers> <root level="error"> <appender-ref ref="MyFileAppender"/> </root> <logger name="com.foo" level="info" additivity="false"> <appender-ref ref="MyFileAppender"/> </logger> </loggers> </configuration>
仍然无法将 org.hibernate 记录器重定向到我的日志,但至少我让logger工作
问题描述
I have a problem applying the log4j2.xml auto configuration properly, and I think it has something to do with my folder arrangement.
I'm using maven to add log4j2 libs and arrange my projects as follows:
- one project to contain all "common" classes, used by server and client side of my system.
- another "core" project - the server side application.
Both projects use the same general package hierarchy (like com.foo.specific.package)
In the Common project I define a logger wrapper:
public class LogWrapper { static Logger systemParentLogger = LogManager.getLogger("com.foo"); public static Logger getLogger(Class<?> cls) { return LogManager.getLogger(cls.getName()); } }
Moreover, the Common project contains the log4j2.xml file under META-INF (alongside the persistence.xml file for Hibernate usage).
<?xml version="1.0" encoding="UTF-8"?> <configuration name="PRODUCTION" status="OFF"> <appenders> <appender type="RollingFile" name="MyFileAppender" fileName="logs/app.log" filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> <layout type="PatternLayout" pattern="%d %p %C{1.} [%t] %m%n"/> </appender> </appenders> <loggers> <root level="error"> <appender-ref ref="MyFileAppender"/> </root> <logger name="com.foo" level="info" additivity="false"> <appender-ref ref="MyFileAppender"/> </logger> <logger name="org.hibernate" level="error"> <appender-ref ref=MyFileAppender"/> </logger> </loggers> </configuration>
While running a sample code in the Core project (using the LogWrapper I wrote and some JPA voodoo), I could still see INFO hibernate logs, and no log file was created. I should state that while debugging the code, I could see that the logger fetched was given some weird value "com.foo.core.persistence.PersistenceXMLTest:ERROR in sun.misc.Launcher$AppClassLoader@2f600492"
推荐答案
The log4j2.xml was placed in a "Folder" which in eclipse terms is "not on classpath".
Changing META-INF to be a "source folder" solved the problem.
In addition, the log4j2.xml file was not defined properly.
These are the modifications needed:
<?xml version="1.0" encoding="UTF-8"?> <configuration name="PRODUCTION" status="OFF"> <appenders> <RollingFile name="MyFileAppender" fileName="../Logs/app.log" filePattern="../Logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> <PatternLayout> <pattern>%d %p %C{1.} [%t] %m%n</pattern> </PatternLayout> <Policies> <OnStartupTriggeringPolicy /> <TimeBasedTriggeringPolicy interval="6" modulate="true"/> <SizeBasedTriggeringPolicy size="250 MB"/> </Policies> </RollingFile> </appenders> <loggers> <root level="error"> <appender-ref ref="MyFileAppender"/> </root> <logger name="com.foo" level="info" additivity="false"> <appender-ref ref="MyFileAppender"/> </logger> </loggers> </configuration>
Still couldn't make the org.hibernate logger to be redirected to my logs, but at least I got the logger to work