2017-10-19 170 views
0

理想情况下,我希望在开发过程中记录本地主机上的所有内容,并仅在活动服务器上记录错误。我无法登录到我的开发平台上的文件(Windows 10,带Wicket的Java)。log4j2无法写入文件

log4j2.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!-- https://logging.apache.org/log4j/2.x/articles.html 
http://mycuteblog.com/log4j2-xml-configuration-example/ --> 
<Configuration status="DEBUG"> 
    <Properties> 
     <Property name="log-path">${sys:catalina.home}/logs</Property> 
    </Properties> 
    <Appenders> 
     <Console name="console-log" target="SYSTEM_OUT"> 
      <PatternLayout pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n"/> 
     </Console> 
     <RollingFile name="trace-log" fileName="${log-path}/luminous-trace.log" 
      filePattern="${log-path}/luminous-trace-%d{yyyy-MM-dd}.log"> 
      <PatternLayout> 
       <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy interval="1" modulate="true"/> 
      </Policies> 
     </RollingFile> 
     <RollingFile name="error-log" fileName="${log-path}/luminous-error.log" 
      filePattern="${log-path}/luminous-error-%d{yyyy-MM-dd}.log"> 
      <PatternLayout> 
       <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n</pattern> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy interval="1" modulate="true"/> 
      </Policies> 
     </RollingFile> 
    </Appenders> 
    <Loggers> 
     <Logger name="com.linguaclassica" level="debug" additivity="false"> 
      <appender-ref ref="trace-log" level="debug"/> 
      <appender-ref ref="error-log" level="error"/> 
      <appender-ref ref="console-log" level="debug"/> 
     </Logger> 
     <Root level="info" additivity="false"> 
      <AppenderRef ref="console-log"/> 
     </Root> 
    </Loggers> 
</Configuration> 

我设法得到了一些日志写到我的Tomcat的logs文件夹。

只有一些消息出现。我不知道什么符号是重要的,哪些不符合。

可公开访问的页面的基页记录子类。

public class PublicBasePage extends WebPage 
{ 
    protected static final Logger logger = LogManager.getLogger(PublicBasePage.class); 

    public PublicBasePage() 
    { 
     super(); 

     logger.info(this.getClass().getName()); 
    } 
} 

[INFO] 2017年10月19日17:07:13.208 [HTTP-NIO-8080-EXEC-57] PublicBasePage - com.linguaclassica.access.HomePage 用于专用的基本页网页记录一条消息。

public class PrivateBasePage extends WebPage 
{ 
    private static final Logger logger = LogManager.getLogger(PrivateBasePage.class); 

    public PrivateBasePage() 
    { 
     super(); 

     logger.debug("()"); 
    } 
} 

[调试] 2017年10月19日17:12:05.662 [HTTP-NIO-8080-EXEC-62] PrivateBasePage - (+)

然而,对于消息专用页面不会记录到文件或控制台。

public class ClientLandingPage extends PrivateBasePage 
{ 
    private static final Logger logger = LogManager.getLogger(ClientLandingPage.class); 

    public ClientLandingPage() 
    { 
     super();  

     logger.info("(info)"); 
     logger.debug("(debug)"); 
     logger.warn("(warn)"); 
    } 
} 

我不明白什么是失败。

+0

当您的应用程序log4j加载其设置时,它会执行一些sysout操作。你可以检查它们并发布它们吗? – Acewin

+1

在哪个包中,ClientLandingPage和其他类都存在? –

+0

ClientLandingPage位于文件夹com.linguaclassica.client中。其他用户角色还有三个其他文件夹,另外一个用于共享角色。 – JoeAB

回答

0

好的,这是粗心的。 ClientLandingPage已过时,并且从未被调用,被共享/ CommonOverviewPage取代。我改变了声明

private Logger logger = LogManager.getLogger(SomethingPage.class); 

和日志似乎出来,因为我想他们。

昨天的日志有附加到文件名的日期。