XML schema
The XML schema for the local log configuration file, LocalLogConfig.xml, is as follows:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:complexType name="ParamType">
<xs:attribute name="name" type="xs:string" use="required"/>
<xs:attribute name="value" type="xs:string" use="required"/>
</xs:complexType>
<xs:simpleType name="AppenderNameType">
<xs:restriction base="xs:string">
<xs:pattern value="[^$].*"/> <!-- '$' is not allowed as prefix-->
</xs:restriction>
</xs:simpleType>
<xs:complexType name="ConverterType">
<xs:sequence>
<xs:element name="param" minOccurs="0" maxOccurs="unbounded" type="ParamType" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="FilterType">
<xs:sequence>
<xs:element name="param" minOccurs="0" maxOccurs="unbounded" type="ParamType" />
</xs:sequence>
<xs:attribute name="class" type="xs:string" use="optional"/> <!-- log4cxx-->
<xs:attribute name="type" type="xs:string" use="optional"/> <!-- log4net-->
</xs:complexType>
<xs:complexType name="EvaluatorType">
<xs:sequence>
<xs:element name="param" minOccurs="0" maxOccurs="unbounded" type="ParamType" />
</xs:sequence>
<xs:attribute name="class" type="xs:string" use="optional"/> <!-- log4cxx-->
<xs:attribute name="type" type="xs:string" use="optional"/> <!-- log4net-->
</xs:complexType>
<xs:complexType name="LayoutType">
<xs:sequence>
<xs:element name="converter" minOccurs="0" maxOccurs="unbounded" type="ConverterType" />
<xs:element name="param" minOccurs="0" maxOccurs="unbounded" type="ParamType" />
</xs:sequence>
<xs:attribute name="class" type="xs:string" use="optional"/> <!-- log4cxx-->
<xs:attribute name="type" type="xs:string" use="optional"/> <!-- log4net-->
</xs:complexType>
<xs:complexType name="AppenderType">
<xs:sequence>
<xs:element name="filter" minOccurs="0" maxOccurs="unbounded" type="FilterType" />
<xs:element name="evaluator" minOccurs="0" type="EvaluatorType" />
<xs:element name="lossyevaluator" minOccurs="0" type="EvaluatorType" /> <!-- log4net-->
<xs:element name="param" minOccurs="0" maxOccurs="unbounded" type="ParamType" />
<xs:element name="layout" minOccurs="1" type="LayoutType" />
</xs:sequence>
<xs:attribute name="name" type="AppenderNameType" use="required"/>
<xs:attribute name="class" type="xs:string" use="optional"/> <!-- log4cxx-->
<xs:attribute name="type" type="xs:string" use="optional"/> <!-- log4net-->
</xs:complexType>
<xs:complexType name="AppenderRefType">
<xs:attribute name="ref" type="AppenderNameType" use="required"/>
</xs:complexType>
<xs:complexType name="RootType">
<xs:sequence>
<xs:element name="appender-ref" type="AppenderRefType" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="LoggerType">
<xs:sequence>
<xs:element name="appender-ref" type="AppenderRefType" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
<xs:attribute name="name" type="AppenderNameType" use="required"/>
</xs:complexType>
<xs:element name="configuration">
<xs:complexType>
<xs:sequence>
<xs:element name="appender" type="AppenderType" minOccurs="0" maxOccurs="unbounded" />
<xs:element name="root" type="RootType" minOccurs="0" />
<xs:element name="logger" type="LoggerType" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
Example:
In this example, the local log configuration file is configured to write the system logs at debug level in %ProgramData%\Qlik\Sense\Log\Proxy\Debug_System_Proxy.txt.
<?xml version="1.0"?>
<configuration>
<appender name="LocalApp_AppenderSystem" type="Qlik.Sense.Logging.log4net.Appender.QSRollingFileAppender">
<param name="threshold" value="debug" />
<param name="encoding" value="utf-8" />
<param name="file" value="C:\ProgramData\Qlik\Sense\Log\Proxy\Debug_System_Proxy.txt" />
<param name="maximumfiletime" value="720" />
<param name="maximumfilesize" value="512KB" />
<layout type="log4net.Layout.PatternLayout">
<converter>
<param name="name" value="rownum" />
<param name="type" value="Qlik.Sense.Logging.log4net.Layout.Pattern.CounterPatternConverter" />
</converter>
<converter>
<param name="name" value="longIso8601date" />
<param name="type" value="Qlik.Sense.Logging.log4net.Layout.Pattern.Iso8601TimeOffsetPatternConverter" />
</converter>
<converter>
<param name="name" value="hostname" />
<param name="type" value="Qlik.Sense.Logging.log4net.Layout.Pattern.HostNamePatternConverter" />
</converter>
<converter>
<param name="name" value="guid" />
<param name="type" value="Qlik.Sense.Logging.log4net.Layout.Pattern.GuidPatternConverter" />
</converter>
<converter>
<param name="name" value="serviceuser" />
<param name="type" value="Qlik.Sense.Logging.log4net.Layout.Pattern.ServiceUserNameCachedPatternConverter" />
</converter>
<converter>
<param name="name" value="encodedmessage" />
<param name="type" value="Qlik.Sense.Logging.log4net.Layout.Pattern.EncodedMessagePatternConverter" />
</converter>
<converter>
<param name="name" value="encodedexception" />
<param name="type" value="Qlik.Sense.Logging.log4net.Layout.Pattern.EncodedExceptionPatternConverter" />
</converter>
<param name="ignoresexception" value="false" />
<param name="header" value="Sequence#	Timestamp	Level	Hostname	
Logger	Thread	Id	ServiceUser	Message	Exception	
ActiveUserDirectory	ActiveUserId	ProxyTimestamp	ProxyThread	
Id2
" />
<param name="conversionpattern" value="%rownum{9999}	%longIso8601date	
%level	%hostname	%logger	%thread	%guid	%serviceuser	
%encodedmessage{1000000}	%encodedexception{innermostmessage:1000000}	
%property{ActiveUserDirectory}	%property{ActiveUserId}	
%property{ProxyTimestamp}	%property{ProxyThread}	%guid%newline" />
</layout>
</appender>
<logger name="System.Proxy">
<appender-ref ref="LocalApp_AppenderSystem" />
</logger>
</configuration>