<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic License Manager logging in ArcGIS Pro Questions</title>
    <link>https://community.esri.com/t5/arcgis-pro-questions/license-manager-logging/m-p/1633767#M97297</link>
    <description>&lt;P&gt;I can't figure out where best to post this -- so putting here, and hopefully maybe useful to others.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;Following up on this&amp;nbsp;&amp;nbsp;&lt;A href="https://community.esri.com/t5/esri-technical-support-blog/where-did-my-license-go/ba-p/897791" target="_blank" rel="noopener"&gt;https://community.esri.com/t5/esri-technical-support-blog/where-did-my-license-go/ba-p/897791&lt;/A&gt;&amp;nbsp;-- we needed to get better information on our users using concurrent licenses with ArcMap and ArcGIS Pro.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;1 - Start logging on your license server. Write out a text file every 3,4,6 hours -- whatever makes sense to you. a sample Scheduled Task to run a batch file like this --&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&lt;a href="https://community.esri.com/t5/user/viewprofilepage/user-id/464769"&gt;@echo&lt;/a&gt;off&lt;BR /&gt;setlocal&lt;/P&gt;&lt;P&gt;:: Get current date and time&lt;BR /&gt;for /f "tokens=1-4 delims=/ " %%a in ("%date%") do set date=%%d-%%b-%%c&lt;BR /&gt;for /f "tokens=1-2 delims=: " %%a in ("%time%") do set time=%%a%%b&lt;/P&gt;&lt;P&gt;:: Format the time to remove spaces and colons&lt;BR /&gt;set time=%time: =%&lt;BR /&gt;set time=%time::=%&lt;/P&gt;&lt;P&gt;:: Create Logs directory if it doesn't exist&lt;BR /&gt;if not exist Logs mkdir Logs&lt;/P&gt;&lt;P&gt;:: Run lmutil command and output to file in Logs directory with date and time in the name&lt;BR /&gt;cd \Esri_Logging&lt;BR /&gt;lmutil.exe lmstat -a -c @yourserver&amp;gt; c:\Esri_Logging\Logs\ESRILicenseUse-%date%-%time%.txt&lt;/P&gt;&lt;P&gt;endlocal&lt;BR /&gt;&lt;BR /&gt;That will create log files.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;2 - Let that run a while, and then you'll get some log files.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;3 - This Python can be used to give you spreadsheets from those logs rich with information --&amp;nbsp;&lt;/P&gt;&lt;P&gt;import os&lt;BR /&gt;import re&lt;BR /&gt;import csv&lt;BR /&gt;from collections import defaultdict&lt;/P&gt;&lt;P&gt;print("Starting script...")&lt;/P&gt;&lt;P&gt;# Define the regex patterns&lt;BR /&gt;date_time_pattern = re.compile(r'Flexible License Manager status on (\w+ \d+/\d+/\d+ \d+:\d+)')&lt;BR /&gt;feature_pattern = re.compile(r'Users of (\S+):\s+\(Total of \d+ licenses issued; Total of (\d+) licenses in use\)')&lt;BR /&gt;activated_license_start_pattern = re.compile(r'ACTIVATED LICENSE\(S\)', re.IGNORECASE)&lt;BR /&gt;license_line_pattern = re.compile(r'^\s*(\w+)\s+([A-Z0-9\-]+)', re.MULTILINE)&lt;BR /&gt;activation_line_pattern = re.compile(r'^\s*ACTIVATED LICENSE\(S\)\s+([A-Z0-9\-]+)\s+ACTIVATION', re.IGNORECASE)&lt;/P&gt;&lt;P&gt;# Features to track&lt;BR /&gt;feature_dict = {&lt;BR /&gt;'desktopBasicN': 'ArcGIS Desktop Basic (Network license)',&lt;BR /&gt;'ACT': 'ArcGIS Pro Advanced (legacy code)',&lt;BR /&gt;'3DAnalystP': '3D Analyst for ArcGIS Pro',&lt;BR /&gt;'ARC/INFO': 'ArcGIS Desktop Advanced (ArcMap)',&lt;BR /&gt;'ArcStorm': 'ArcStorm extension',&lt;BR /&gt;'ArcStormEnable': 'ArcStorm Enablement',&lt;BR /&gt;'dataInteropP': 'Data Interoperability for ArcGIS Pro',&lt;BR /&gt;'DataReViewer': 'Data Reviewer (ArcMap)',&lt;BR /&gt;'dataReviewerP': 'Data Reviewer for ArcGIS Pro',&lt;BR /&gt;'Defense': 'Defense Mapping',&lt;BR /&gt;'desktopAdvP': 'ArcGIS Pro Advanced',&lt;BR /&gt;'Foundation': 'Production Mapping Foundation',&lt;BR /&gt;'geostatAnalystP': 'Geostatistical Analyst for ArcGIS Pro',&lt;BR /&gt;'GeoStats': 'Geostatistical Analyst (ArcMap)',&lt;BR /&gt;'Grid': 'Spatial Analyst (ArcMap)',&lt;BR /&gt;'Interop': 'Data Interoperability (ArcMap)',&lt;BR /&gt;'JTX': 'Workflow Manager (ArcMap)',&lt;BR /&gt;'Maplex': 'Maplex Label Engine',&lt;BR /&gt;'MrSID': 'MrSID Image Support',&lt;BR /&gt;'Network': 'Network Analyst (ArcMap)',&lt;BR /&gt;'networkAnalystP': 'Network Analyst for ArcGIS Pro',&lt;BR /&gt;'Plotting': 'Plotting extension',&lt;BR /&gt;'Publisher': 'Publisher extension (ArcMap)',&lt;BR /&gt;'publisherP': 'Publisher for ArcGIS Pro',&lt;BR /&gt;'Schematics': 'Schematics extension',&lt;BR /&gt;'spatialAnalystP': 'Spatial Analyst for ArcGIS Pro',&lt;BR /&gt;'TIFFLZW': 'TIFF LZW Compression Support',&lt;BR /&gt;'TIN': 'TIN Analyst',&lt;BR /&gt;'workflowMgrP': 'Workflow Manager for ArcGIS Pro'&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;tracked_features = list(feature_dict.keys())&lt;BR /&gt;features_desc = list(feature_dict.values())&lt;/P&gt;&lt;P&gt;# Directory containing the log files&lt;BR /&gt;log_directory = r'\\YourLinseServer\Esri_Logging\Logs'&lt;/P&gt;&lt;P&gt;# Output CSV files&lt;BR /&gt;summary_csv = 'license_usage_summary.csv'&lt;BR /&gt;arcgispro_csv = 'users_arcgis_pro.csv'&lt;BR /&gt;arcmap_csv = 'users_arcmap.csv'&lt;BR /&gt;user_counts_csv = 'user_license_counts.csv'&lt;/P&gt;&lt;P&gt;# Write to all four output files&lt;BR /&gt;with open(summary_csv, mode='w', newline='') as summary_file, \&lt;BR /&gt;open(arcgispro_csv, mode='w', newline='') as pro_file, \&lt;BR /&gt;open(arcmap_csv, mode='w', newline='') as map_file, \&lt;BR /&gt;open(user_counts_csv, mode='w', newline='') as count_file:&lt;/P&gt;&lt;P&gt;summary_writer = csv.writer(summary_file)&lt;BR /&gt;pro_writer = csv.writer(pro_file)&lt;BR /&gt;map_writer = csv.writer(map_file)&lt;BR /&gt;count_writer = csv.writer(count_file)&lt;/P&gt;&lt;P&gt;# Write headers&lt;BR /&gt;summary_writer.writerow(['', ''] + features_desc)&lt;BR /&gt;summary_writer.writerow(['Date', 'Time'] + tracked_features)&lt;BR /&gt;pro_writer.writerow(['Date', 'Time', 'Username', 'Machine'])&lt;BR /&gt;map_writer.writerow(['Date', 'Time', 'Username', 'Machine'])&lt;BR /&gt;count_writer.writerow(['Date', 'Time', 'Username', 'Machine', 'ArcMap_Count', 'ArcGIS_Pro_Count'])&lt;/P&gt;&lt;P&gt;# Iterate through log files&lt;BR /&gt;for filename in os.listdir(log_directory):&lt;BR /&gt;if filename.endswith('.txt'):&lt;BR /&gt;filepath = os.path.join(log_directory, filename)&lt;BR /&gt;print(f"Processing {filename}")&lt;/P&gt;&lt;P&gt;with open(filepath, 'r', encoding='utf-8', errors='ignore') as file:&lt;BR /&gt;content = file.read()&lt;/P&gt;&lt;P&gt;# Extract date and time&lt;BR /&gt;date_time_match = date_time_pattern.search(content)&lt;BR /&gt;if date_time_match:&lt;BR /&gt;date_time = date_time_match.group(1)&lt;BR /&gt;date, time = date_time.rsplit(' ', 1)&lt;BR /&gt;else:&lt;BR /&gt;date, time = 'Unknown', 'Unknown'&lt;/P&gt;&lt;P&gt;# Feature usage summary&lt;BR /&gt;usage = {feature: '0' for feature in tracked_features}&lt;BR /&gt;for match in feature_pattern.finditer(content):&lt;BR /&gt;feature, in_use = match.groups()&lt;BR /&gt;if feature in usage:&lt;BR /&gt;usage[feature] = in_use&lt;/P&gt;&lt;P&gt;summary_writer.writerow([date, time] + [usage[feat] for feat in tracked_features])&lt;/P&gt;&lt;P&gt;# Track user license counts&lt;BR /&gt;user_license_counts = defaultdict(lambda: {'ArcMap': 0, 'ArcGIS_Pro': 0})&lt;BR /&gt;user_machines = {}&lt;/P&gt;&lt;P&gt;# Process ArcMap and ArcGIS Pro sections&lt;BR /&gt;for feature_code, writer, category in [&lt;BR /&gt;('desktopAdvP', pro_writer, 'ArcGIS_Pro'),&lt;BR /&gt;('ARC/INFO', map_writer, 'ArcMap')&lt;BR /&gt;]:&lt;BR /&gt;section_pattern = re.compile(&lt;BR /&gt;rf'Users of {re.escape(feature_code)}:.*?ACTIVATED LICENSE\(S\)(.*?)(?=Users of|\Z)',&lt;BR /&gt;re.DOTALL | re.IGNORECASE&lt;BR /&gt;)&lt;BR /&gt;section_match = section_pattern.search(content)&lt;BR /&gt;if section_match:&lt;BR /&gt;license_block = section_match.group(1)&lt;BR /&gt;for line in license_block.splitlines():&lt;BR /&gt;activation_match = activation_line_pattern.match(line)&lt;BR /&gt;if activation_match:&lt;BR /&gt;machine = activation_match.group(1)&lt;BR /&gt;username = "ACTIVATED LICENSE(S)"&lt;BR /&gt;writer.writerow([date, time, username, machine])&lt;BR /&gt;user_license_counts[username][category] += 1&lt;BR /&gt;user_machines[username] = machine&lt;BR /&gt;continue&lt;/P&gt;&lt;P&gt;user_match = license_line_pattern.match(line)&lt;BR /&gt;if user_match:&lt;BR /&gt;username, machine = user_match.groups()&lt;BR /&gt;writer.writerow([date, time, username, machine])&lt;BR /&gt;user_license_counts[username][category] += 1&lt;BR /&gt;user_machines[username] = machine&lt;/P&gt;&lt;P&gt;# Write user license counts&lt;BR /&gt;for username, counts in user_license_counts.items():&lt;BR /&gt;machine = user_machines.get(username, '')&lt;BR /&gt;count_writer.writerow([date, time, username, machine, counts['ArcMap'], counts['ArcGIS_Pro']])&lt;/P&gt;&lt;P&gt;print(f"Done! Output saved to:\n- {summary_csv}\n- {arcgispro_csv}\n- {arcmap_csv}\n- {user_counts_csv}")&lt;/P&gt;&lt;P&gt;4 - Take those CSVs into Excel, merge, sum, chart and get lots of details on your users and their use of concurrent licenses.&lt;BR /&gt;&lt;BR /&gt;Yes, this post could have probably been more useful to the community like 6 months ago!&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
    <pubDate>Thu, 17 Jul 2025 06:17:17 GMT</pubDate>
    <dc:creator>rdbutger</dc:creator>
    <dc:date>2025-07-17T06:17:17Z</dc:date>
    <item>
      <title>License Manager logging</title>
      <link>https://community.esri.com/t5/arcgis-pro-questions/license-manager-logging/m-p/1633767#M97297</link>
      <description>&lt;P&gt;I can't figure out where best to post this -- so putting here, and hopefully maybe useful to others.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;Following up on this&amp;nbsp;&amp;nbsp;&lt;A href="https://community.esri.com/t5/esri-technical-support-blog/where-did-my-license-go/ba-p/897791" target="_blank" rel="noopener"&gt;https://community.esri.com/t5/esri-technical-support-blog/where-did-my-license-go/ba-p/897791&lt;/A&gt;&amp;nbsp;-- we needed to get better information on our users using concurrent licenses with ArcMap and ArcGIS Pro.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;1 - Start logging on your license server. Write out a text file every 3,4,6 hours -- whatever makes sense to you. a sample Scheduled Task to run a batch file like this --&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;&lt;P&gt;&lt;a href="https://community.esri.com/t5/user/viewprofilepage/user-id/464769"&gt;@echo&lt;/a&gt;off&lt;BR /&gt;setlocal&lt;/P&gt;&lt;P&gt;:: Get current date and time&lt;BR /&gt;for /f "tokens=1-4 delims=/ " %%a in ("%date%") do set date=%%d-%%b-%%c&lt;BR /&gt;for /f "tokens=1-2 delims=: " %%a in ("%time%") do set time=%%a%%b&lt;/P&gt;&lt;P&gt;:: Format the time to remove spaces and colons&lt;BR /&gt;set time=%time: =%&lt;BR /&gt;set time=%time::=%&lt;/P&gt;&lt;P&gt;:: Create Logs directory if it doesn't exist&lt;BR /&gt;if not exist Logs mkdir Logs&lt;/P&gt;&lt;P&gt;:: Run lmutil command and output to file in Logs directory with date and time in the name&lt;BR /&gt;cd \Esri_Logging&lt;BR /&gt;lmutil.exe lmstat -a -c @yourserver&amp;gt; c:\Esri_Logging\Logs\ESRILicenseUse-%date%-%time%.txt&lt;/P&gt;&lt;P&gt;endlocal&lt;BR /&gt;&lt;BR /&gt;That will create log files.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;2 - Let that run a while, and then you'll get some log files.&amp;nbsp;&lt;BR /&gt;&lt;BR /&gt;3 - This Python can be used to give you spreadsheets from those logs rich with information --&amp;nbsp;&lt;/P&gt;&lt;P&gt;import os&lt;BR /&gt;import re&lt;BR /&gt;import csv&lt;BR /&gt;from collections import defaultdict&lt;/P&gt;&lt;P&gt;print("Starting script...")&lt;/P&gt;&lt;P&gt;# Define the regex patterns&lt;BR /&gt;date_time_pattern = re.compile(r'Flexible License Manager status on (\w+ \d+/\d+/\d+ \d+:\d+)')&lt;BR /&gt;feature_pattern = re.compile(r'Users of (\S+):\s+\(Total of \d+ licenses issued; Total of (\d+) licenses in use\)')&lt;BR /&gt;activated_license_start_pattern = re.compile(r'ACTIVATED LICENSE\(S\)', re.IGNORECASE)&lt;BR /&gt;license_line_pattern = re.compile(r'^\s*(\w+)\s+([A-Z0-9\-]+)', re.MULTILINE)&lt;BR /&gt;activation_line_pattern = re.compile(r'^\s*ACTIVATED LICENSE\(S\)\s+([A-Z0-9\-]+)\s+ACTIVATION', re.IGNORECASE)&lt;/P&gt;&lt;P&gt;# Features to track&lt;BR /&gt;feature_dict = {&lt;BR /&gt;'desktopBasicN': 'ArcGIS Desktop Basic (Network license)',&lt;BR /&gt;'ACT': 'ArcGIS Pro Advanced (legacy code)',&lt;BR /&gt;'3DAnalystP': '3D Analyst for ArcGIS Pro',&lt;BR /&gt;'ARC/INFO': 'ArcGIS Desktop Advanced (ArcMap)',&lt;BR /&gt;'ArcStorm': 'ArcStorm extension',&lt;BR /&gt;'ArcStormEnable': 'ArcStorm Enablement',&lt;BR /&gt;'dataInteropP': 'Data Interoperability for ArcGIS Pro',&lt;BR /&gt;'DataReViewer': 'Data Reviewer (ArcMap)',&lt;BR /&gt;'dataReviewerP': 'Data Reviewer for ArcGIS Pro',&lt;BR /&gt;'Defense': 'Defense Mapping',&lt;BR /&gt;'desktopAdvP': 'ArcGIS Pro Advanced',&lt;BR /&gt;'Foundation': 'Production Mapping Foundation',&lt;BR /&gt;'geostatAnalystP': 'Geostatistical Analyst for ArcGIS Pro',&lt;BR /&gt;'GeoStats': 'Geostatistical Analyst (ArcMap)',&lt;BR /&gt;'Grid': 'Spatial Analyst (ArcMap)',&lt;BR /&gt;'Interop': 'Data Interoperability (ArcMap)',&lt;BR /&gt;'JTX': 'Workflow Manager (ArcMap)',&lt;BR /&gt;'Maplex': 'Maplex Label Engine',&lt;BR /&gt;'MrSID': 'MrSID Image Support',&lt;BR /&gt;'Network': 'Network Analyst (ArcMap)',&lt;BR /&gt;'networkAnalystP': 'Network Analyst for ArcGIS Pro',&lt;BR /&gt;'Plotting': 'Plotting extension',&lt;BR /&gt;'Publisher': 'Publisher extension (ArcMap)',&lt;BR /&gt;'publisherP': 'Publisher for ArcGIS Pro',&lt;BR /&gt;'Schematics': 'Schematics extension',&lt;BR /&gt;'spatialAnalystP': 'Spatial Analyst for ArcGIS Pro',&lt;BR /&gt;'TIFFLZW': 'TIFF LZW Compression Support',&lt;BR /&gt;'TIN': 'TIN Analyst',&lt;BR /&gt;'workflowMgrP': 'Workflow Manager for ArcGIS Pro'&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;tracked_features = list(feature_dict.keys())&lt;BR /&gt;features_desc = list(feature_dict.values())&lt;/P&gt;&lt;P&gt;# Directory containing the log files&lt;BR /&gt;log_directory = r'\\YourLinseServer\Esri_Logging\Logs'&lt;/P&gt;&lt;P&gt;# Output CSV files&lt;BR /&gt;summary_csv = 'license_usage_summary.csv'&lt;BR /&gt;arcgispro_csv = 'users_arcgis_pro.csv'&lt;BR /&gt;arcmap_csv = 'users_arcmap.csv'&lt;BR /&gt;user_counts_csv = 'user_license_counts.csv'&lt;/P&gt;&lt;P&gt;# Write to all four output files&lt;BR /&gt;with open(summary_csv, mode='w', newline='') as summary_file, \&lt;BR /&gt;open(arcgispro_csv, mode='w', newline='') as pro_file, \&lt;BR /&gt;open(arcmap_csv, mode='w', newline='') as map_file, \&lt;BR /&gt;open(user_counts_csv, mode='w', newline='') as count_file:&lt;/P&gt;&lt;P&gt;summary_writer = csv.writer(summary_file)&lt;BR /&gt;pro_writer = csv.writer(pro_file)&lt;BR /&gt;map_writer = csv.writer(map_file)&lt;BR /&gt;count_writer = csv.writer(count_file)&lt;/P&gt;&lt;P&gt;# Write headers&lt;BR /&gt;summary_writer.writerow(['', ''] + features_desc)&lt;BR /&gt;summary_writer.writerow(['Date', 'Time'] + tracked_features)&lt;BR /&gt;pro_writer.writerow(['Date', 'Time', 'Username', 'Machine'])&lt;BR /&gt;map_writer.writerow(['Date', 'Time', 'Username', 'Machine'])&lt;BR /&gt;count_writer.writerow(['Date', 'Time', 'Username', 'Machine', 'ArcMap_Count', 'ArcGIS_Pro_Count'])&lt;/P&gt;&lt;P&gt;# Iterate through log files&lt;BR /&gt;for filename in os.listdir(log_directory):&lt;BR /&gt;if filename.endswith('.txt'):&lt;BR /&gt;filepath = os.path.join(log_directory, filename)&lt;BR /&gt;print(f"Processing {filename}")&lt;/P&gt;&lt;P&gt;with open(filepath, 'r', encoding='utf-8', errors='ignore') as file:&lt;BR /&gt;content = file.read()&lt;/P&gt;&lt;P&gt;# Extract date and time&lt;BR /&gt;date_time_match = date_time_pattern.search(content)&lt;BR /&gt;if date_time_match:&lt;BR /&gt;date_time = date_time_match.group(1)&lt;BR /&gt;date, time = date_time.rsplit(' ', 1)&lt;BR /&gt;else:&lt;BR /&gt;date, time = 'Unknown', 'Unknown'&lt;/P&gt;&lt;P&gt;# Feature usage summary&lt;BR /&gt;usage = {feature: '0' for feature in tracked_features}&lt;BR /&gt;for match in feature_pattern.finditer(content):&lt;BR /&gt;feature, in_use = match.groups()&lt;BR /&gt;if feature in usage:&lt;BR /&gt;usage[feature] = in_use&lt;/P&gt;&lt;P&gt;summary_writer.writerow([date, time] + [usage[feat] for feat in tracked_features])&lt;/P&gt;&lt;P&gt;# Track user license counts&lt;BR /&gt;user_license_counts = defaultdict(lambda: {'ArcMap': 0, 'ArcGIS_Pro': 0})&lt;BR /&gt;user_machines = {}&lt;/P&gt;&lt;P&gt;# Process ArcMap and ArcGIS Pro sections&lt;BR /&gt;for feature_code, writer, category in [&lt;BR /&gt;('desktopAdvP', pro_writer, 'ArcGIS_Pro'),&lt;BR /&gt;('ARC/INFO', map_writer, 'ArcMap')&lt;BR /&gt;]:&lt;BR /&gt;section_pattern = re.compile(&lt;BR /&gt;rf'Users of {re.escape(feature_code)}:.*?ACTIVATED LICENSE\(S\)(.*?)(?=Users of|\Z)',&lt;BR /&gt;re.DOTALL | re.IGNORECASE&lt;BR /&gt;)&lt;BR /&gt;section_match = section_pattern.search(content)&lt;BR /&gt;if section_match:&lt;BR /&gt;license_block = section_match.group(1)&lt;BR /&gt;for line in license_block.splitlines():&lt;BR /&gt;activation_match = activation_line_pattern.match(line)&lt;BR /&gt;if activation_match:&lt;BR /&gt;machine = activation_match.group(1)&lt;BR /&gt;username = "ACTIVATED LICENSE(S)"&lt;BR /&gt;writer.writerow([date, time, username, machine])&lt;BR /&gt;user_license_counts[username][category] += 1&lt;BR /&gt;user_machines[username] = machine&lt;BR /&gt;continue&lt;/P&gt;&lt;P&gt;user_match = license_line_pattern.match(line)&lt;BR /&gt;if user_match:&lt;BR /&gt;username, machine = user_match.groups()&lt;BR /&gt;writer.writerow([date, time, username, machine])&lt;BR /&gt;user_license_counts[username][category] += 1&lt;BR /&gt;user_machines[username] = machine&lt;/P&gt;&lt;P&gt;# Write user license counts&lt;BR /&gt;for username, counts in user_license_counts.items():&lt;BR /&gt;machine = user_machines.get(username, '')&lt;BR /&gt;count_writer.writerow([date, time, username, machine, counts['ArcMap'], counts['ArcGIS_Pro']])&lt;/P&gt;&lt;P&gt;print(f"Done! Output saved to:\n- {summary_csv}\n- {arcgispro_csv}\n- {arcmap_csv}\n- {user_counts_csv}")&lt;/P&gt;&lt;P&gt;4 - Take those CSVs into Excel, merge, sum, chart and get lots of details on your users and their use of concurrent licenses.&lt;BR /&gt;&lt;BR /&gt;Yes, this post could have probably been more useful to the community like 6 months ago!&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 17 Jul 2025 06:17:17 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcgis-pro-questions/license-manager-logging/m-p/1633767#M97297</guid>
      <dc:creator>rdbutger</dc:creator>
      <dc:date>2025-07-17T06:17:17Z</dc:date>
    </item>
  </channel>
</rss>

