main ERROR Unable to locate appender "test" for logger config "test"

hmmm picture hmmm · Sep 13, 2017 · Viewed 7.6k times · Source

This is my log4j2 `JSON config

{
  "Configuration": {
    "Appenders": {
      "Console": {
        "PatternLayout": {
          "pattern": "%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n"
        },
        "name": "Console",
        "target": "SYSTEM_OUT"
      },
      "RollingFile": {
        "name": "general",
        "fileName": "C:/logs/simulator-log.log",
        "filePattern": "C:/logs/simulator-log-%d{yyyy-MM-dd HH-mm-ss}.log",
        "PatternLayout": {
          "pattern": "%msg%n"
        },
        "Policies": {
          "OnStartupTriggeringPolicy": {}
        }
      },
      "File": {
        "PatternLayout": {
          "pattern": "%msg%n"
        },
        "name": "test1",
        "fileName": "c:/logs/response_sent.log"
      }
    },
    "Loggers": {
      "Root": {
        "AppenderRef": [
          {
            "ref": "Console"
          }
        ],
        "level": "trace"
      },
      "logger": [
        {
          "name": "test",
          "level": "trace",
          "additivity": "false",
          "AppenderRef": {
            "ref": "test"
          }
        },
        {
          "name": "test1",
          "level": "trace",
          "additivity": "false",
          "AppenderRef": {
            "ref": "test1"
          }
        },
        {
          "name": "general",
          "level": "trace",
          "additivity": "false",
          "AppenderRef": {
            "ref": "general"
          }
        }
      ]
    }
  }
}

when I use one file appenders it works fine. when I use two file appenders getting the error mention in the title.cant we add more than 1 file appenders. I don't want to use a rolling file appender.

Java code for creating logger variables

private static final Logger requestsReceived = LogManager.getLogger("test");
private static final Logger responseSent = LogManager.getLogger("test1");
private static final Logger logger = LogManager.getLogger("general");

Answer

Vikas Sachdeva picture Vikas Sachdeva · Sep 14, 2017

Try to define your appenders using type attribute like below -

{
    "type": "File",
    "PatternLayout": {
        "pattern": "%msg%n"
    },
    "name": "test",
    "fileName": "c:/logs/requests_received.log"
},
{
    "type": "File",
    "PatternLayout": {
        "pattern": "%msg%n"
    },
    "name": "test1",
    "fileName": "c:/logs/response_sent.log"
}

For this, You have to modify all appender configuration using type attribute. Your complete configuration file will change like below -

{
    "Configuration": {
        "Appenders": {
            "appender": [
                {
                    "type": "Console",
                    "PatternLayout": {
                        "pattern": "%d{yyyy-MMM-dd HH:mm:ss a} [%t] %-5level %logger{36} - %msg%n"
                    },
                    "name": "Console",
                    "target": "SYSTEM_OUT"
                },
                {
                    "type": "RollingFile",
                    "name": "general",
                    "fileName": "C:/logs/simulator-log.log",
                    "filePattern": "C:/logs/simulator-log-%d{yyyy-MM-dd HH-mm-ss}.log",
                    "PatternLayout": {
                        "pattern": "%msg%n"
                    },
                    "Policies": {
                        "OnStartupTriggeringPolicy": {

                        }
                    }
                },
                {
                    "type": "File",
                    "PatternLayout": {
                        "pattern": "%msg%n"
                    },
                    "name": "test",
                    "fileName": "c:/logs/requests_received.log"
                },
                {
                    "type": "File",
                    "PatternLayout": {
                        "pattern": "%msg%n"
                    },
                    "name": "test1",
                    "fileName": "c:/logs/response_sent.log"
                }
            ]
        },
        "Loggers": {
            "Root": {
                "AppenderRef": [
                    {
                        "ref": "Console"
                    }
                ],
                "level": "trace"
            },
            "logger": [
                {
                    "name": "test",
                    "level": "trace",
                    "additivity": "false",
                    "AppenderRef": {
                        "ref": "test"
                    }
                },
                {
                    "name": "test1",
                    "level": "trace",
                    "additivity": "false",
                    "AppenderRef": {
                        "ref": "test1"
                    }
                },
                {
                    "name": "general",
                    "level": "trace",
                    "additivity": "false",
                    "AppenderRef": {
                        "ref": "general"
                    }
                }
            ]
        }
    }
}