2017-10-19 18 views
0

理想的には、開発中にすべてのものをローカルホスト上に記録し、ライブサーバ上のエラーのみを記録したいと考えています。開発プラットフォーム(Windows 10、Java with Wicket)上のファイルにログを記録するのに問題があります。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 プライベート用ベースページWebページはメッセージを記録します。

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

    public PrivateBasePage() 
    { 
     super(); 

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

[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にあります。他のユーザーロール用のフォルダと共有ロール用のフォルダが3つあります。 – JoeAB

答えて

0

OK、これは不注意でした。 ClientLandingPageは廃止され、呼び出されずにshared/CommonOverviewPageに置き換えられました。宣言を

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

に変更しました。ログが必要なように出てきているようです。

昨日のログには、ファイル名に日付が付加されています。

関連する問題