<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
  
-->

<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="logback.xsd">
	<contextName>${current_openmeetings_context_name}</contextName>
	
	<jmxConfigurator contextName="${current_openmeetings_context_name}" />

  <appender name="FLOG2" class="ch.qos.logback.core.FileAppender">
		<File>screensharing.log</File>
		<Append>false</Append>
		<Encoding>UTF-8</Encoding>
		<BufferedIO>false</BufferedIO>
		<ImmediateFlush>true</ImmediateFlush>
		<layout class="ch.qos.logback.classic.PatternLayout">
			<Pattern>
				%5p %d{MM-dd HH:mm:ss.SSS } %F %r %L %c [%t] - %m%n
			</Pattern>
		</layout>
  </appender>
  <appender name="CONSOLE2" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
      <pattern>%5p %d{MM-dd HH:mm:ss.SSS } %F %r %L %c [%t] - %m%n</pattern>
    </layout>
  </appender>
  <logger name="org.apache.openmeetings">
    <level value="DEBUG"/>
  </logger>
  <root>
    <level value="ERROR"/>
    <appender-ref ref="FLOG2"/>
    <appender-ref ref="CONSOLE2"/>
  </root>
</configuration>
