<?xml version="1.0"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.

-->
<faqs title="Frequently Asked Technical Questions">
  <part id="faq">

      <faq id="custom_levels"><question>How do I add a custom level to Apache log4cxx?</question>
      <answer>
      <p>This is a common topic for all the Apache logging frameworks and
      typically motivated to try to categorize events by functionality or
      audience.  An common request is to add an AUDIT level so that the
      user can configure AUDIT level messages to go to a specific appender.
      However, the logger name was designed explicitly to support
      routing of messages by topic or audience.  The common
      pattern of using classnames for logger names obscures the more
      general capability of logger name to represent the topic or audience 
      of the logging request.  The easiest approach to solve the underlying issue
      is to use a logger names like "AUDIT.com.example.MyPackage.MyClass"
      that allow all AUDIT messages to be routed to a particular appender.
      If you attempted to use a level for that then you would lose
      the ability to distinguish between different significances within
      the audit messages.
      </p></answer></faq>


      <faq id="msvc_crash"><question>My application on Windows crashes on shutdown?</question>
      <answer>
      <p>Apache log4cxx API calls use C++ Standard Template Library string
      parameters.  If the caller is using a different instance or type of the
      C Runtime Library that log4cxx, then it is very likely that some memory
      that was originally allocated by log4cxx would be freed by the caller.
      If log4cxx and the caller are using different C RTL's, the program 
      will likely crash at the point.  Use "Multithread DLL" with release
      builds of log4cxx and "Multithread DLL Debug" with debug builds.
      </p></answer></faq>

      <faq id="unicode"><question>Does Apache log4cxx support Unicode?</question>
      <answer>
      <p>Yes.  Apache log4cxx exposes API methods in multiple string flavors
      const char*, std::string, wchar_t*, std::wstring, CFStringRef et al.
      const char* and std::string are interpreted according to the 
      current locale settings.  Applications should call setlocale(LC_ALL, "")
      on startup or the C RTL will assume US-ASCII.
      Before being processed internally, all these are converted to the
      LogString type which is one of several supported Unicode representations
      selected by the --with-logchar option.  When using methods that take LogString arguments,
      the LOG4CXX_STR() macro can be used to convert ASCII literals to 
      the current LogString type.  FileAppenders support an encoding 
      property which should be explicitly specified to "UTF-8" or "UTF-16"
      for XML files.
      </p></answer></faq>


  </part>
</faqs>
