├── dotnet ├── .gitignore ├── Logify.Alert.Xamarin.Android │ ├── packages.config │ ├── publish.cmd │ ├── Properties │ │ └── AndroidManifest.xml │ ├── ReportSender │ │ └── ReportSender.cs │ ├── NOTICE │ ├── Collectors │ │ ├── XamarinDisplayCollector.cs │ │ ├── XamarinDroidOSCollector.cs │ │ ├── XamarinAndroidExceptionCollector.cs │ │ ├── XamarinMemoryCollector.cs │ │ ├── XamarinExternalStorageCollector.cs │ │ ├── XamarinDeviceInfoCollector.cs │ │ └── XamarinApplicationCollector.cs │ └── Logify.Alert.Xamarin.Android.nuspec ├── DevExpress.Key │ └── StrongKey.snk ├── Logify.Alert.Serilog │ ├── publish.cmd │ ├── packages.config │ ├── NOTICE │ ├── Logify.Alert.Serilog.nuspec │ └── LogifyAlertSink.cs ├── Logify.Alert.Win │ ├── Configuration │ │ └── Configuration.cs │ ├── packages.config │ ├── publish.cmd │ ├── TraceListener.cs │ ├── Collectors │ │ ├── WinFormsApplicationCollector.cs │ │ ├── WinFormsCollector.cs │ │ └── WinFormsEnvironmentCollector.cs │ ├── NOTICE │ ├── ReportSender │ │ └── ReportSender.cs │ └── Logify.Alert.Win.nuspec ├── Logify.Alert.Wpf │ ├── Configuration │ │ └── Configuration.cs │ ├── packages.config │ ├── Properties │ │ ├── Settings.settings │ │ └── Settings.Designer.cs │ ├── publish.cmd │ ├── TraceListener.cs │ ├── Collectors │ │ ├── DispatcherCollector.cs │ │ ├── TaskShedulerCollector.cs │ │ ├── WPFEnvironmentCollector.cs │ │ ├── AppDispatcherCollector.cs │ │ ├── WpfApplicationCollector.cs │ │ └── WPFCollector.cs │ ├── Utils │ │ ├── ConfirmationDialogEventArgs.cs │ │ └── ConfirmationDialogModel.cs │ ├── NOTICE │ ├── ReportSendProgressForm.xaml │ └── Logify.Alert.Wpf.nuspec ├── Logify.Alert.Console │ ├── Configuration │ │ └── Configuration.cs │ ├── packages.config │ ├── publish.cmd │ ├── TraceListener.cs │ ├── ReportSender │ │ └── ReportSender.cs │ ├── Collectors │ │ ├── ConsoleApplicationCollector.cs │ │ ├── ConsoleEnvironmentCollector.cs │ │ └── ConsoleCollector.cs │ └── NOTICE ├── Logify.Alert.Xamarin.iOS │ ├── publish.cmd │ ├── ReportSender │ │ └── ReportSender.cs │ ├── NOTICE │ ├── Collectors │ │ ├── XamariniOSExceptionCollector.cs │ │ ├── XamariniOSOSCollector.cs │ │ ├── XamarinDisplayCollector.cs │ │ ├── XamarinMemoryCollector.cs │ │ └── XamarinApplicationCollector.cs │ └── Logify.Alert.Xamarin.iOS.nuspec ├── Logify.Alert.NLog │ ├── packages.config │ ├── publish.cmd │ ├── LogifyAlertTarget.cs │ ├── NOTICE │ └── Logify.Alert.NLog.nuspec ├── Logify.Alert.Inject │ ├── InjectManagedAssembly │ │ ├── stdafx.h │ │ ├── dllmain.cpp │ │ ├── stdafx.cpp │ │ ├── targetver.h │ │ ├── DllExport.cpp │ │ └── InjectManagedAssembly.vcxproj.filters │ ├── Logify.Alert.Runner │ │ ├── App.config │ │ ├── packages.config │ │ └── Properties │ │ │ └── AssemblyInfo.cs │ └── Logify.Alert.Inject │ │ ├── packages.config │ │ └── Properties │ │ └── AssemblyInfo.cs ├── Logify.Alert.Log4Net │ ├── packages.config │ ├── publish.cmd │ ├── NOTICE │ ├── LogifyAlertAppender.cs │ └── Logify.Alert.Log4Net.nuspec ├── Logify.Alert.Core │ ├── packages.config │ ├── Collectors │ │ ├── IInfoCollector.cs │ │ ├── LogifyProtocolVersionCollectior.cs │ │ ├── LogifyHardwareIdCollector.cs │ │ ├── LogifyReportGenerationDateTimeCollector.cs │ │ ├── DevelopementPlatformCollector.cs │ │ ├── DebuggerCollector.cs │ │ ├── TagsCollector.cs │ │ ├── EnvironmentCollector.cs │ │ ├── DesktopEnvironmentCollector.cs │ │ ├── GuiResourcesCollector.cs │ │ ├── LogifyAppInfoCollector.cs │ │ ├── CompositeInfoCollector.cs │ │ ├── AssemblyCollector.cs │ │ └── DisplayCollector.cs │ ├── IgnoreCallTrackingAttribute.cs │ ├── publish.cmd │ ├── Platform.cs │ ├── publish_core.cmd │ ├── Attachment.cs │ ├── NOTICE │ ├── Logger │ │ └── ILogger.cs │ ├── ExceptionLoggerFactory.cs │ ├── MethodCallArgumentsStorage.cs │ ├── BreadcrumbsRecorderBase.cs │ ├── Tests │ │ └── Collectors │ │ │ └── OperatingSystemCollectorTests.cs │ ├── AssemblyVersion.cs │ └── Properties │ │ └── AssemblyInfo.cs ├── Logify.Alert.Web │ ├── packages.config │ ├── publish.cmd │ ├── ReportSender │ │ └── ReportSender.cs │ ├── ErrorSectionHandler │ │ └── ErrorLogSectionHandler.cs │ ├── TraceListener.cs │ ├── WebApiExceptionHandler.cs │ ├── HttpModuleBase.cs │ ├── LogifyErrorModule.cs │ ├── NOTICE │ ├── Collectors │ │ └── ModulesCollector.cs │ ├── Logify.Alert.Web.nuspec │ ├── Configuration │ │ └── WebLogifyConfigSection.cs │ └── AspExceptionHandler .cs ├── Logify.Alert.Send │ ├── App.config │ └── ReportSender │ │ └── ReportSender.cs ├── Logify.Alert.UWP │ ├── publish.cmd │ ├── ReportSender │ │ └── ReportSender.cs │ ├── Collectors │ │ ├── UWPExceptionCollector.cs │ │ ├── UWPDisplayCollector.cs │ │ ├── UWPMemoryCollector.cs │ │ ├── UWPApplicationCollector.cs │ │ └── UWPDeviceInfoCollector.cs │ ├── NOTICE │ └── Logify.Alert.UWP.nuspec.ok ├── Logify.Alert.NetCore.Console │ └── ReportSender │ │ └── ReportSender.cs └── Logify.Alert.NetCore.Web │ └── LogifyHttpContext.cs ├── .gitattributes ├── java ├── .gitignore ├── Android │ ├── src │ │ ├── main │ │ │ ├── res │ │ │ │ └── values │ │ │ │ │ └── strings.xml │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── devexpress │ │ │ │ └── logify │ │ │ │ └── alert │ │ │ │ └── android │ │ │ │ └── configuration │ │ │ │ └── AndroidClientConfigurationLoader.java │ │ └── androidTest │ │ │ └── java │ │ │ └── com │ │ │ └── devexpress │ │ │ └── logify │ │ │ └── alert │ │ │ └── android │ │ │ └── collectors │ │ │ └── AndroidOperatingSystemCollectorTests.java │ └── proguard-rules.pro ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties ├── settings.gradle ├── Core │ └── src │ │ ├── main │ │ └── java │ │ │ └── com │ │ │ └── devexpress │ │ │ └── logify │ │ │ └── alert │ │ │ └── core │ │ │ ├── Platform.java │ │ │ ├── events │ │ │ ├── LogifyEventListener.java │ │ │ ├── AfterReportExceptionLogifyEvent.java │ │ │ ├── BeforeReportExceptionLogifyEvent.java │ │ │ ├── CanReportExceptionEventSource.java │ │ │ ├── AfterReportExceptionEventSource.java │ │ │ ├── BeforeReportExceptionEventSource.java │ │ │ ├── LogifyEvent.java │ │ │ ├── CanReportExceptionLogifyEvent.java │ │ │ └── EventSourceBase.java │ │ │ ├── AttachmentCollection.java │ │ │ ├── LogifyClientInfo.java │ │ │ ├── ApplicationProperties.java │ │ │ ├── collectors │ │ │ ├── IInfoCollector.java │ │ │ ├── CurrentCultureCollector.java │ │ │ ├── LogifyProtocolVersionCollector.java │ │ │ ├── DevelopmentPlatformCollector.java │ │ │ ├── TagsCollector.java │ │ │ ├── CompositeInfoCollector.java │ │ │ ├── LogifyReportGenerationDateTimeCollector.java │ │ │ ├── CustomDataCollector.java │ │ │ ├── ThreadInfoCollector.java │ │ │ ├── JavaEnvironmentCollector.java │ │ │ └── CultureBaseCollector.java │ │ │ ├── configuration │ │ │ └── ClientConfiguration.java │ │ │ ├── logger │ │ │ └── ILogger.java │ │ │ ├── reportSender │ │ │ └── IExceptionReportSender.java │ │ │ ├── ExceptionLoggerFactory.java │ │ │ └── Attachment.java │ │ └── test │ │ └── java │ │ └── com │ │ └── devexpress │ │ └── logify │ │ └── alert │ │ └── core │ │ ├── JsonElementHelper.java │ │ ├── collectors │ │ ├── LogifyProtocolVersionCollectorTests.java │ │ ├── JvmMemoryCollectorTests.java │ │ ├── TagsCollectorTests.java │ │ ├── LogifyReportGenerationDateTimeCollectorTests.java │ │ ├── CustomDataCollectorTests.java │ │ ├── PlatformCollectorTests.java │ │ └── JavaEnvironmentCollectorTests.java │ │ ├── Base64EncoderHelper.java │ │ └── Base64EncoderTests.java ├── Java │ └── src │ │ ├── test │ │ ├── resources │ │ │ └── logify.properties │ │ └── java │ │ │ └── com │ │ │ └── devexpress │ │ │ └── logify │ │ │ └── alert │ │ │ └── java │ │ │ ├── configuration │ │ │ └── NonSingletonLogifyAlert.java │ │ │ ├── collectors │ │ │ ├── JavaOperatingSystemCollectorTests.java │ │ │ └── JavaDisplayCollectorTests.java │ │ │ ├── reportSender │ │ │ ├── ReportCreatingTests.java │ │ │ └── CanceledReportCreatingTests.java │ │ │ └── TestLogifyAlert.java │ │ └── main │ │ └── java │ │ └── com │ │ └── devexpress │ │ └── logify │ │ └── alert │ │ └── java │ │ ├── collectors │ │ ├── JavaMachineInfoCollector.java │ │ └── JavaOperatingSystemCollector.java │ │ └── configuration │ │ └── JavaClientConfigurationLoader.java ├── README.MD ├── Logback │ ├── src │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── devexpress │ │ │ └── logify │ │ │ └── alert │ │ │ └── logback │ │ │ └── LogifyAlertAppender.java │ └── build.gradle ├── Log4j │ ├── src │ │ └── main │ │ │ └── java │ │ │ └── com │ │ │ └── devexpress │ │ │ └── logify │ │ │ └── alert │ │ │ └── log4j │ │ │ └── LogifyAlertAppender.java │ └── build.gradle └── build.gradle ├── .gitmodules ├── js ├── Logify.Alert.NodeJS │ ├── NOTICE │ ├── src │ │ ├── collectors │ │ │ ├── collectorBase.js │ │ │ ├── nodeVersionCollector.js │ │ │ ├── logifyInfoCollector.js │ │ │ ├── tagsCollector.js │ │ │ ├── customDataCollector.js │ │ │ ├── compositeCollector.js │ │ │ └── platformEnvironmentCollector.js │ │ └── testApp.js │ ├── test │ │ └── collectors │ │ │ ├── nodeVersionCollectorTest.js │ │ │ ├── logifyInfoCollectorTest.js │ │ │ ├── tagsCollectorTest.js │ │ │ ├── customDataCollectorTest.js │ │ │ ├── platformEnvironmentCollectorTest.js │ │ │ └── compositeCollectorTest.js │ └── package.json └── Logify.Alert.JS │ ├── src │ ├── collectors │ │ ├── collectorBase.js │ │ ├── metasCollector.js │ │ ├── scriptsCollector.js │ │ ├── logifyInfoCollector.js │ │ ├── osVersionCollector.js │ │ ├── tagsCollector.js │ │ ├── windowSizeCollector.js │ │ ├── screenSizeCollector.js │ │ ├── compositeCollector.js │ │ ├── browserVersionCollector.js │ │ ├── breadcrumbsCollector.js │ │ ├── rawHtmlTagCollectorBase.js │ │ ├── siteDataCollector.js │ │ └── customDataCollector.js │ └── breadcrumbs │ │ ├── breadcrumb.js │ │ └── autoRecorders │ │ ├── windowEventsRecorder.js │ │ ├── mouseEventsRecorder.js │ │ ├── dragDropEventsRecorder.js │ │ ├── keyboardEventsRecorder.js │ │ └── delayedEventRecorderBase.js │ ├── test │ └── collectors │ │ ├── logifyInfoCollectorTest.js │ │ ├── osVersionCollectorTest.js │ │ ├── windowSizeCollectorTest.js │ │ ├── screenSizeCollectorTest.js │ │ ├── tagsCollectorTest.js │ │ ├── breadcrumbsCollectorTest.js │ │ ├── browserVersionCollectorTest.js │ │ ├── compositeCollectorTest.js │ │ └── customDataCollectorTest.js │ └── package.json ├── delphi └── readme.md ├── .gitignore └── README.MD /dotnet/.gitignore: -------------------------------------------------------------------------------- 1 | .vs/ -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.cmd text eol=crlf 2 | *.bat text eol=crlf -------------------------------------------------------------------------------- /java/.gitignore: -------------------------------------------------------------------------------- 1 | .gradle/ 2 | .idea/ 3 | build/ 4 | 5 | *.iml 6 | local.properties -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.Android/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /dotnet/DevExpress.Key/StrongKey.snk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevExpress/Logify.Alert.Clients/HEAD/dotnet/DevExpress.Key/StrongKey.snk -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "php/Logify.Alert.PHP"] 2 | path = php/Logify.Alert.PHP 3 | url = https://github.com/DevExpress/Logify.Alert.PHP 4 | -------------------------------------------------------------------------------- /java/Android/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Logify.Alert.Android 3 | 4 | -------------------------------------------------------------------------------- /java/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevExpress/Logify.Alert.Clients/HEAD/java/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /js/Logify.Alert.NodeJS/NOTICE: -------------------------------------------------------------------------------- 1 | logify-alert@1.0.1: 2 | - request, Mikeal Rogers, https://github.com/request/request#readme, Apache-2.0 -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Serilog/publish.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | nuget pack Logify.Alert.Serilog.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release45 -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Win/Configuration/Configuration.cs: -------------------------------------------------------------------------------- 1 | namespace DevExpress.Logify { 2 | public class LogifyConfigSection : LogifyConfigSectionBase { 3 | } 4 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Wpf/Configuration/Configuration.cs: -------------------------------------------------------------------------------- 1 | namespace DevExpress.Logify { 2 | public class LogifyConfigSection : LogifyConfigSectionBase { 3 | } 4 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Console/Configuration/Configuration.cs: -------------------------------------------------------------------------------- 1 | namespace DevExpress.Logify { 2 | public class LogifyConfigSection : LogifyConfigSectionBase { 3 | } 4 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.iOS/publish.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | nuget pack Logify.Alert.Xamarin.iOS.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release -------------------------------------------------------------------------------- /dotnet/Logify.Alert.NLog/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.Android/publish.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | nuget pack Logify.Alert.Xamarin.Android.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release -------------------------------------------------------------------------------- /java/settings.gradle: -------------------------------------------------------------------------------- 1 | enableFeaturePreview('STABLE_PUBLISHING') 2 | 3 | include ":Core" 4 | include ":Java" 5 | include ":Android" 6 | include ":Log4j" 7 | include ":Logback" 8 | -------------------------------------------------------------------------------- /js/Logify.Alert.NodeJS/src/collectors/collectorBase.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | export default class collectorBase { 4 | constructor() { } 5 | 6 | process(report) {} 7 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Inject/InjectManagedAssembly/stdafx.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevExpress/Logify.Alert.Clients/HEAD/dotnet/Logify.Alert.Inject/InjectManagedAssembly/stdafx.h -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Log4Net/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Serilog/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Inject/InjectManagedAssembly/dllmain.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevExpress/Logify.Alert.Clients/HEAD/dotnet/Logify.Alert.Inject/InjectManagedAssembly/dllmain.cpp -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Inject/InjectManagedAssembly/stdafx.cpp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevExpress/Logify.Alert.Clients/HEAD/dotnet/Logify.Alert.Inject/InjectManagedAssembly/stdafx.cpp -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Inject/InjectManagedAssembly/targetver.h: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DevExpress/Logify.Alert.Clients/HEAD/dotnet/Logify.Alert.Inject/InjectManagedAssembly/targetver.h -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/Platform.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core; 2 | 3 | public enum Platform { 4 | java, 5 | android, 6 | none 7 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Web/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Win/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Wpf/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Console/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /java/Java/src/test/resources/logify.properties: -------------------------------------------------------------------------------- 1 | logify.serviceUrl=TestUrl 2 | logify.apiKey=1234567890ABCDEFFEDCBA0987654321 3 | logify.appName=TestApplication 4 | logify.appVersion=1.2.3 5 | logify.userId=TestUser 6 | -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/collectors/collectorBase.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | export default class collectorBase { 4 | constructor(_owner) { 5 | this.owner = _owner; 6 | } 7 | 8 | process(win, report) {} 9 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Collectors/IInfoCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace DevExpress.Logify.Core.Internal { 4 | public interface IInfoCollector { 5 | void Process(Exception ex, ILogger logger); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Send/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/events/LogifyEventListener.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.events; 2 | 3 | public interface LogifyEventListener { 4 | void handle(T event); 5 | } -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/AttachmentCollection.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core; 2 | 3 | import java.util.ArrayList; 4 | 5 | public class AttachmentCollection extends ArrayList { 6 | } 7 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Inject/InjectManagedAssembly/DllExport.cpp: -------------------------------------------------------------------------------- 1 | #include "stdafx.h" 2 | 3 | extern "C" { 4 | __declspec(dllexport) HRESULT InjectManagedAssembly(_In_ LPCWSTR lpCommand) { 5 | return InjectManagedAssemblyCore(lpCommand); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Inject/Logify.Alert.Runner/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.UWP/publish.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | rem nuget pack Logify.Alert.UWP.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release 3 | nuget pack Logify.Alert.UWP.nuspec -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Web/publish.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | nuget pack Logify.Alert.Web.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release40 3 | nuget pack Logify.Alert.Web.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release45 -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Wpf/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Wpf/publish.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | nuget pack Logify.Alert.Wpf.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release40 3 | nuget pack Logify.Alert.Wpf.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release45 -------------------------------------------------------------------------------- /java/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip 6 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Inject/Logify.Alert.Runner/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.NLog/publish.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | nuget pack Logify.Alert.NLog.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release40 3 | nuget pack Logify.Alert.NLog.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release45 -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/LogifyClientInfo.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core; 2 | 3 | public final class LogifyClientInfo { 4 | public static final String VERSION = "1.0.1"; 5 | 6 | private LogifyClientInfo() { } 7 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Win/publish.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | nuget pack Logify.Alert.Win.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release40 3 | nuget pack Logify.Alert.Win.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release45 4 | -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/ApplicationProperties.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core; 2 | 3 | public class ApplicationProperties { 4 | public String AppName; 5 | public String AppVersion; 6 | public String UserId; 7 | } 8 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Log4Net/publish.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | nuget pack Logify.Alert.Log4Net.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release40 3 | nuget pack Logify.Alert.Log4Net.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release45 -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Console/publish.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | nuget pack Logify.Alert.Console.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release40 3 | nuget pack Logify.Alert.Console.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release45 4 | -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/collectors/metasCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import rawHtmlTagCollectorBase from "./rawHtmlTagCollectorBase"; 3 | 4 | export default class metasCollector extends rawHtmlTagCollectorBase { 5 | constructor(_owner) { 6 | super(_owner, "meta"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /java/Java/src/test/java/com/devexpress/logify/alert/java/configuration/NonSingletonLogifyAlert.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.java.configuration; 2 | 3 | import com.devexpress.logify.alert.java.TestLogifyAlert; 4 | 5 | public class NonSingletonLogifyAlert extends TestLogifyAlert { 6 | } 7 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/IgnoreCallTrackingAttribute.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace DevExpress.Logify.Core.Internal { 4 | [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class | AttributeTargets.Constructor)] 5 | public class IgnoreCallTrackingAttribute : Attribute { 6 | } 7 | } -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/collectors/scriptsCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import rawHtmlTagCollectorBase from "./rawHtmlTagCollectorBase"; 3 | 4 | export default class scriptsCollector extends rawHtmlTagCollectorBase { 5 | constructor(_owner) { 6 | super(_owner, "script"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.iOS/ReportSender/ReportSender.cs: -------------------------------------------------------------------------------- 1 | namespace DevExpress.Logify.Core.Internal 2 | { 3 | class XamarinExceptionReportSender : ServiceExceptionReportSender { 4 | public override IExceptionReportSender CreateEmptyClone() { 5 | return new XamarinExceptionReportSender(); 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.UWP/ReportSender/ReportSender.cs: -------------------------------------------------------------------------------- 1 | using DevExpress.Logify.Core; 2 | 3 | namespace DevExpress.Logify.Core.Internal { 4 | class UWPExceptionReportSender : ServiceExceptionReportSender { 5 | public override IExceptionReportSender CreateEmptyClone() { 6 | return new UWPExceptionReportSender(); 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Web/ReportSender/ReportSender.cs: -------------------------------------------------------------------------------- 1 | using DevExpress.Logify.Core; 2 | 3 | namespace DevExpress.Logify.Core.Internal { 4 | class WebExceptionReportSender : ServiceExceptionReportSender { 5 | public override IExceptionReportSender CreateEmptyClone() { 6 | return new WebExceptionReportSender(); 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/collectors/IInfoCollector.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.devexpress.logify.alert.core.logger.ILogger; 4 | 5 | import java.io.IOException; 6 | 7 | public interface IInfoCollector { 8 | void process(Throwable ex, ILogger logger) throws IOException; 9 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Inject/Logify.Alert.Inject/packages.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.Android/Properties/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.Android/ReportSender/ReportSender.cs: -------------------------------------------------------------------------------- 1 | using DevExpress.Logify.Core; 2 | 3 | namespace DevExpress.Logify.Core.Internal { 4 | class XamarinExceptionReportSender : ServiceExceptionReportSender { 5 | public override IExceptionReportSender CreateEmptyClone() { 6 | return new XamarinExceptionReportSender(); 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/publish.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | nuget pack Logify.Alert.Core.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release40 3 | nuget pack Logify.Alert.Core.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release45 4 | rem nuget pack Logify.Alert.Core.NetCore.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release -------------------------------------------------------------------------------- /dotnet/Logify.Alert.NetCore.Console/ReportSender/ReportSender.cs: -------------------------------------------------------------------------------- 1 | using DevExpress.Logify.Core; 2 | 3 | namespace DevExpress.Logify.Core.Internal { 4 | class NetCoreConsoleExceptionReportSender : ServiceExceptionReportSender { 5 | public override IExceptionReportSender CreateEmptyClone() { 6 | return new NetCoreConsoleExceptionReportSender(); 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /js/Logify.Alert.NodeJS/src/collectors/nodeVersionCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | import collectorBase from "./collectorBase.js"; 3 | var process = require('process'); 4 | 5 | export default class nodeVersionCollector extends collectorBase { 6 | process(report) { 7 | super.process(report); 8 | 9 | report.nodeEnvironmentVersions = process.versions; 10 | } 11 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Collectors/LogifyProtocolVersionCollectior.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace DevExpress.Logify.Core.Internal { 4 | public class LogifyProtocolVersionCollector : IInfoCollector { 5 | public virtual void Process(Exception ex, ILogger logger) { 6 | logger.WriteValue("logifyProtocolVersion", AssemblyInfo.Version); 7 | } 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.NetCore.Web/LogifyHttpContext.cs: -------------------------------------------------------------------------------- 1 | //using Microsoft.AspNetCore.Http; 2 | //using System; 3 | 4 | //namespace DevExpress.Logify.Core.Internal { 5 | // internal static class LogifyHttpContext { 6 | // [ThreadStatic] 7 | // static HttpContext current; 8 | 9 | // internal static HttpContext Current { get { return current; } set { current = value; } } 10 | // } 11 | //} -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Web/ErrorSectionHandler/ErrorLogSectionHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace DevExpress.Logify.Web.ErrorSectionHandler { 7 | #region Imports 8 | 9 | using System.Configuration; 10 | 11 | #endregion 12 | 13 | internal sealed class ErrorLogSectionHandler : SingleTagSectionHandler { } 14 | } 15 | -------------------------------------------------------------------------------- /js/Logify.Alert.NodeJS/src/collectors/logifyInfoCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import collectorBase from "./collectorBase.js"; 3 | 4 | export default class logifyInfoCollector extends collectorBase { 5 | process(report) { 6 | super.process(report); 7 | 8 | report.clientVersion = "15.2.11"; 9 | report.devPlatform = "node.js"; 10 | report.logifyProtocolVersion = "1.0"; 11 | } 12 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Web/TraceListener.cs: -------------------------------------------------------------------------------- 1 | using DevExpress.Logify.Core; 2 | using DevExpress.Logify.Core.Internal; 3 | 4 | namespace DevExpress.Logify.Web { 5 | public class LogifyAlertTraceListener : LogifyAlertTraceListenerBase { 6 | protected override void InitializeInstance() { 7 | if (LogifyClientBase.Instance == null) 8 | LogifyAlert.InitializeInstance(); 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Win/TraceListener.cs: -------------------------------------------------------------------------------- 1 | using DevExpress.Logify.Core; 2 | using DevExpress.Logify.Core.Internal; 3 | 4 | namespace DevExpress.Logify.Win { 5 | public class LogifyAlertTraceListener : LogifyAlertTraceListenerBase { 6 | protected override void InitializeInstance() { 7 | if (LogifyClientBase.Instance == null) 8 | LogifyAlert.InitializeInstance(); 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/events/AfterReportExceptionLogifyEvent.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.events; 2 | 3 | import com.devexpress.logify.alert.core.LogifyClientBase; 4 | 5 | public class AfterReportExceptionLogifyEvent extends LogifyEvent { 6 | public AfterReportExceptionLogifyEvent(LogifyClientBase source, Throwable exception) { 7 | super(source, exception); 8 | } 9 | } -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/events/BeforeReportExceptionLogifyEvent.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.events; 2 | 3 | import com.devexpress.logify.alert.core.LogifyClientBase; 4 | 5 | public class BeforeReportExceptionLogifyEvent extends LogifyEvent { 6 | public BeforeReportExceptionLogifyEvent(LogifyClientBase source, Throwable exception) { 7 | super(source, exception); 8 | } 9 | } -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/collectors/CurrentCultureCollector.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import java.util.Locale; 4 | 5 | public class CurrentCultureCollector extends CultureBaseCollector { 6 | public CurrentCultureCollector() { 7 | super("currentCulture"); 8 | } 9 | 10 | public Locale getLocale() { 11 | return locale; 12 | } 13 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Console/TraceListener.cs: -------------------------------------------------------------------------------- 1 | using DevExpress.Logify.Core; 2 | using DevExpress.Logify.Core.Internal; 3 | 4 | namespace DevExpress.Logify.Console { 5 | public class LogifyAlertTraceListener : LogifyAlertTraceListenerBase { 6 | protected override void InitializeInstance() { 7 | if (LogifyClientBase.Instance == null) 8 | LogifyAlert.InitializeInstance(); 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Platform.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace DevExpress.Logify.Core.Internal { 7 | public enum Platform { 8 | WIN, 9 | WPF, 10 | ASP, 11 | NETCORE_ASP, 12 | NETCORE_CONSOLE, 13 | XAMARIN_ANDROID, 14 | XAMARIN_IOS, 15 | UWP, 16 | NONE 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /java/Android/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /js/Logify.Alert.NodeJS/src/collectors/tagsCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | import collectorBase from "./collectorBase.js"; 3 | 4 | export default class tagsCollector extends collectorBase { 5 | constructor(_tags) { 6 | super(); 7 | this.tags = _tags; 8 | } 9 | process(report) { 10 | super.process(report); 11 | 12 | if(this.tags != undefined) 13 | report.tags = this.tags; 14 | } 15 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Wpf/TraceListener.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using DevExpress.Logify.Core; 3 | using DevExpress.Logify.Core.Internal; 4 | 5 | namespace DevExpress.Logify.WPF { 6 | public class LogifyAlertTraceListener : LogifyAlertTraceListenerBase { 7 | protected override void InitializeInstance() { 8 | if (LogifyClientBase.Instance == null) 9 | LogifyAlert.InitializeInstance(); 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /java/README.MD: -------------------------------------------------------------------------------- 1 | # Logify Alert Java Clients 2 | 3 | ## Platforms 4 | 5 | * [Java](https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/java/Java) 6 | * [Android](https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/java/Android) 7 | 8 | ## Integrations 9 | * [log4j](https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/java/Log4j) 10 | * [Logback](https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/java/Logback) -------------------------------------------------------------------------------- /delphi/readme.md: -------------------------------------------------------------------------------- 1 | # Logify Alert Delphi Clients 2 | Currently, Logify Alert does not provide users with a standalone client. However, you can use additional libraries to integrate Logify Alert into the crash reporting process. To do this, follow the required link below. 3 | 4 | * [madExcept](https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/delphi/madExcept) 5 | * [EurekaLog](https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/delphi/eurekaLog) 6 | -------------------------------------------------------------------------------- /java/Core/src/test/java/com/devexpress/logify/alert/core/JsonElementHelper.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core; 2 | 3 | import com.google.gson.JsonElement; 4 | 5 | public class JsonElementHelper { 6 | public static String getValueAsStringOrNull(JsonElement jsonElement) { 7 | if (jsonElement != null && !jsonElement.isJsonNull()) 8 | return jsonElement.getAsString(); 9 | else 10 | return null; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Console/ReportSender/ReportSender.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using System.Windows.Forms; 4 | using DevExpress.Logify.Core; 5 | 6 | namespace DevExpress.Logify.Core.Internal { 7 | public class ConsoleExceptionReportSender : ServiceExceptionReportSender { 8 | public override IExceptionReportSender CreateEmptyClone() { 9 | return new ConsoleExceptionReportSender(); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/configuration/ClientConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.configuration; 2 | 3 | import java.util.Map; 4 | 5 | public class ClientConfiguration { 6 | public String ApiKey; 7 | public String AppName; 8 | public String AppVersion; 9 | public String UserId; 10 | public String ServiceUrl; 11 | public Map CustomData; 12 | public Map Tags; 13 | } 14 | -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/breadcrumbs/breadcrumb.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | export default class breadcrumb { 4 | constructor(message, eventType) { 5 | this.dateTime = new Date().toISOString(); 6 | this.message = message; 7 | this.event = eventType; 8 | } 9 | } 10 | 11 | export class autoRecordedBreadcrumb extends breadcrumb { 12 | constructor(message, eventType) { 13 | super(message, eventType); 14 | this.a = "1"; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /js/Logify.Alert.NodeJS/src/collectors/customDataCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | import collectorBase from "./collectorBase.js"; 3 | 4 | export default class customDataCollector extends collectorBase { 5 | constructor(_customData) { 6 | super(); 7 | this.customData = _customData; 8 | } 9 | process(report) { 10 | super.process(report); 11 | 12 | if(this.customData != undefined) 13 | report.customData = this.customData; 14 | } 15 | } -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/collectors/logifyInfoCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import collectorBase from "./collectorBase.js"; 3 | 4 | export default class logifyInfoCollector extends collectorBase { 5 | constructor(_owner) { 6 | super(_owner); 7 | } 8 | 9 | process(win, report) { 10 | super.process(win, report); 11 | 12 | report.clientVersion = "1.0.2"; 13 | report.devPlatform = "js"; 14 | report.logifyProtocolVersion = "1.0"; 15 | } 16 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Collectors/LogifyHardwareIdCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | 4 | namespace DevExpress.Logify.Core.Internal { 5 | public class LogifyHardwareIdCollector : IInfoCollector { 6 | public virtual void Process(Exception ex, ILogger logger) { 7 | string hardwareId = HardwareId.Get(); 8 | if (!String.IsNullOrEmpty(hardwareId)) 9 | logger.WriteValue("logifyHardwareId", hardwareId); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/collectors/LogifyProtocolVersionCollector.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.devexpress.logify.alert.core.logger.ILogger; 4 | import com.devexpress.logify.alert.core.LogifyClientInfo; 5 | 6 | public class LogifyProtocolVersionCollector implements IInfoCollector { 7 | public void process(Throwable ex, ILogger logger) { 8 | logger.writeValue("logifyProtocolVersion", LogifyClientInfo.VERSION); 9 | } 10 | } -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/events/CanReportExceptionEventSource.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.events; 2 | 3 | public class CanReportExceptionEventSource extends EventSourceBase { 4 | private static CanReportExceptionEventSource source; 5 | 6 | public static CanReportExceptionEventSource getSource() { 7 | if (source != null) 8 | return source; 9 | 10 | source = new CanReportExceptionEventSource(); 11 | return source; 12 | } 13 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Wpf/Collectors/DispatcherCollector.cs: -------------------------------------------------------------------------------- 1 | using DevExpress.Logify.Core; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace DevExpress.Logify.Core.Internal { 8 | class DispatcherCollector : WpfApplicationCollector 9 | { 10 | public override void Process(Exception ex, ILogger logger) 11 | { 12 | logger.WriteValue("Exception Type", "DispatcherUnhandledException"); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Wpf/Collectors/TaskShedulerCollector.cs: -------------------------------------------------------------------------------- 1 | using DevExpress.Logify.Core; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace DevExpress.Logify.Core.Internal { 8 | class TaskShedulerCollector : WpfApplicationCollector 9 | { 10 | public override void Process(Exception ex, ILogger logger) 11 | { 12 | logger.WriteValue("Exception Type", "UnobservedTaskException"); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/events/AfterReportExceptionEventSource.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.events; 2 | 3 | public class AfterReportExceptionEventSource extends EventSourceBase { 4 | private static AfterReportExceptionEventSource source; 5 | 6 | public static AfterReportExceptionEventSource getSource() { 7 | if (source != null) 8 | return source; 9 | 10 | source = new AfterReportExceptionEventSource(); 11 | return source; 12 | } 13 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Wpf/Collectors/WPFEnvironmentCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using DevExpress.Logify.Core; 3 | 4 | namespace DevExpress.Logify.Core.Internal { 5 | public class WPFEnvironmentCollector : DesktopEnvironmentCollector 6 | { 7 | public WPFEnvironmentCollector(LogifyCollectorContext context) 8 | : base(context) { 9 | } 10 | //protected override void RegisterCollectors() { 11 | // base.RegisterCollectors(); 12 | // //etc 13 | //} 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/events/BeforeReportExceptionEventSource.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.events; 2 | 3 | public class BeforeReportExceptionEventSource extends EventSourceBase { 4 | private static BeforeReportExceptionEventSource source; 5 | 6 | public static BeforeReportExceptionEventSource getSource() { 7 | if (source != null) 8 | return source; 9 | 10 | source = new BeforeReportExceptionEventSource(); 11 | return source; 12 | } 13 | } -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/collectors/osVersionCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | import collectorBase from "./collectorBase.js"; 3 | 4 | export default class osVersionCollector extends collectorBase { 5 | constructor(_owner) { 6 | super(_owner); 7 | } 8 | 9 | process(win, report) { 10 | super.process(win, report); 11 | 12 | if(report.os === undefined) 13 | report.os = new Object(); 14 | 15 | report.os.platform = win.navigator.platform; 16 | } 17 | } 18 | 19 | -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/collectors/tagsCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import collectorBase from "./collectorBase.js"; 3 | 4 | export default class tagsCollector extends collectorBase { 5 | constructor(_owner) { 6 | super(_owner); 7 | } 8 | 9 | process(win, report) { 10 | super.process(win, report); 11 | 12 | if((this.owner == null) || (this.owner == undefined)) 13 | return; 14 | 15 | if(this.owner.tags != undefined) 16 | report.tags = this.owner.tags; 17 | } 18 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/publish_core.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | rem nuget pack Logify.Alert.Core.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release40 3 | rem nuget pack Logify.Alert.Core.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release45 4 | rem nuget pack Logify.Alert.Core.NetCore.csproj -Verbosity detailed -Prop Platform=AnyCPU -Prop Configuration=Release 5 | dotnet restore Logify.Alert.NetCore.Core.csproj 6 | dotnet build Logify.Alert.NetCore.Core.csproj 7 | dotnet pack Logify.Alert.NetCore.Core.csproj -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Wpf/Collectors/AppDispatcherCollector.cs: -------------------------------------------------------------------------------- 1 | using DevExpress.Logify.Core; 2 | using System; 3 | using System.Collections.Generic; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace DevExpress.Logify.Core.Internal { 8 | class AppDispatcherCollector : WpfApplicationCollector 9 | { 10 | public override void Process(Exception ex, ILogger logger) 11 | { 12 | logger.WriteValue("Exception Type", "ApplicationDispatcherUnhandledException"); 13 | } 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Web/WebApiExceptionHandler.cs: -------------------------------------------------------------------------------- 1 | using DevExpress.Logify.Core.Internal; 2 | using System.Web.Http.Filters; 3 | 4 | namespace DevExpress.Logify.Web { 5 | public class WebApiExceptionHandler : ExceptionFilterAttribute { 6 | public WebApiExceptionHandler() { 7 | } 8 | 9 | [IgnoreCallTracking] 10 | public override void OnException(HttpActionExecutedContext context) { 11 | LogifyAlert.Instance.Send(context.Exception); 12 | base.OnException(context); 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/collectors/windowSizeCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | import collectorBase from "./collectorBase.js"; 3 | 4 | export default class windowSizeCollector extends collectorBase { 5 | constructor(_owner) { 6 | super(_owner); 7 | } 8 | 9 | process(win, report) { 10 | super.process(win, report); 11 | 12 | if(report.window === undefined) 13 | report.window = new Object(); 14 | 15 | report.window.width = win.innerWidth; 16 | report.window.height = win.innerHeight; 17 | } 18 | } -------------------------------------------------------------------------------- /js/Logify.Alert.NodeJS/src/collectors/compositeCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | import collectorBase from "./collectorBase.js"; 3 | 4 | export default class compositeCollector extends collectorBase { 5 | constructor() { 6 | super(); 7 | 8 | this.collectors = []; 9 | } 10 | 11 | process(report) { 12 | super.process(report); 13 | 14 | let collectorsCount = this.collectors.length; 15 | for(let i = 0; i < collectorsCount; i++) { 16 | this.collectors[i].process(report); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/events/LogifyEvent.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.events; 2 | 3 | import com.devexpress.logify.alert.core.LogifyClientBase; 4 | import java.util.EventObject; 5 | 6 | public class LogifyEvent extends EventObject { 7 | public LogifyEvent(LogifyClientBase source, Throwable exception){ 8 | super(source); 9 | this.exception = exception; 10 | } 11 | 12 | Throwable exception; 13 | public Throwable getException(){ 14 | return this.exception; 15 | } 16 | } -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/collectors/screenSizeCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | import collectorBase from "./collectorBase.js"; 3 | 4 | export default class screenSizeCollector extends collectorBase { 5 | constructor(_owner) { 6 | super(_owner); 7 | } 8 | 9 | process(win, report) { 10 | super.process(win, report); 11 | 12 | if(report.screen === undefined) 13 | report.screen = new Object(); 14 | 15 | report.screen.width = win.screen.width; 16 | report.screen.height = win.screen.height; 17 | } 18 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Collectors/LogifyReportGenerationDateTimeCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Globalization; 3 | 4 | namespace DevExpress.Logify.Core.Internal { 5 | public class LogifyReportGenerationDateTimeCollector : IInfoCollector { 6 | public virtual void Process(Exception ex, ILogger logger) { 7 | DateTime utcNow = DateTime.UtcNow; 8 | string dateTimeString = utcNow.ToString("o", CultureInfo.InvariantCulture); 9 | logger.WriteValue("logifyReportDateTimeUtc", dateTimeString); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /js/Logify.Alert.NodeJS/test/collectors/nodeVersionCollectorTest.js: -------------------------------------------------------------------------------- 1 | import nodeVersionCollector from "../../src/collectors/nodeVersionCollector.js"; 2 | var assert = require('chai').assert; 3 | var process = require('process'); 4 | 5 | describe('processVersionCollector tests', function() { 6 | 7 | it('process test', function () { 8 | let reportData = new Object(); 9 | 10 | let collector = new nodeVersionCollector(); 11 | collector.process(reportData); 12 | assert.equal(process.versions, reportData.nodeEnvironmentVersions); 13 | }); 14 | }); -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/breadcrumbs/autoRecorders/windowEventsRecorder.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | import eventRecorderBase from './eventRecorderBase.js' 4 | 5 | export default class windowEventsRecorder extends eventRecorderBase { 6 | constructor() { 7 | super(); 8 | this._events = [ 9 | "resize" 10 | ]; 11 | this.category = "window"; 12 | } 13 | parseEventData(event, breadcrumb) { 14 | breadcrumb.customData["newWidth"] = event.target.innerWidth; 15 | breadcrumb.customData["newHeight"] = event.target.innerHeight; 16 | } 17 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Web/HttpModuleBase.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Web; 3 | 4 | namespace DevExpress.Logify.Web { 5 | public class HttpModuleBase : IHttpModule { 6 | void IHttpModule.Init(HttpApplication context) { 7 | if (context == null) 8 | return; 9 | this.OnInit(context); 10 | } 11 | void IHttpModule.Dispose() { 12 | this.OnDispose(); 13 | } 14 | public virtual void OnDispose() { 15 | } 16 | 17 | public virtual void OnInit(HttpApplication context) { 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Console/Collectors/ConsoleApplicationCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | using DevExpress.Logify.Core; 4 | 5 | namespace DevExpress.Logify.Core.Internal { 6 | public class ConsoleApplicationCollector : ApplicationCollector { 7 | public override string AppName { get { return Application.ProductName; } } 8 | public override string AppVersion { get { return Application.ProductVersion; } } 9 | public override string UserId { get { return String.Empty; } } 10 | 11 | public ConsoleApplicationCollector(): base() {} 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Win/Collectors/WinFormsApplicationCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | using DevExpress.Logify.Core; 4 | 5 | namespace DevExpress.Logify.Core.Internal { 6 | public class WinFormsApplicationCollector : ApplicationCollector { 7 | public override string AppName { get { return Application.ProductName; } } 8 | public override string AppVersion { get { return Application.ProductVersion; } } 9 | public override string UserId { get { return String.Empty; } } 10 | 11 | public WinFormsApplicationCollector(): base() {} 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/collectors/compositeCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | import collectorBase from "./collectorBase.js"; 3 | 4 | export default class compositeCollector extends collectorBase { 5 | constructor(_owner) { 6 | super(_owner); 7 | 8 | this.collectors = []; 9 | } 10 | 11 | process(win, report, customData) { 12 | super.process(win, report); 13 | 14 | let collectorsCount = this.collectors.length; 15 | for(let i = 0; i < collectorsCount; i++) { 16 | this.collectors[i].process(win, report, customData); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Collectors/DevelopementPlatformCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace DevExpress.Logify.Core.Internal { 4 | public class DevelopementPlatformCollector : IInfoCollector { 5 | 6 | readonly Platform platform; 7 | 8 | public DevelopementPlatformCollector(Platform platform) { 9 | this.platform = platform; 10 | } 11 | 12 | public virtual void Process(Exception ex, ILogger logger) { 13 | logger.WriteValue("devPlatform", "dotnet"); 14 | logger.WriteValue("platform", this.platform.ToString()); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /java/Java/src/main/java/com/devexpress/logify/alert/java/collectors/JavaMachineInfoCollector.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.java.collectors; 2 | 3 | import com.devexpress.logify.alert.core.collectors.IInfoCollector; 4 | import com.devexpress.logify.alert.core.logger.ILogger; 5 | 6 | import java.io.IOException; 7 | import java.net.InetAddress; 8 | 9 | public class JavaMachineInfoCollector implements IInfoCollector { 10 | 11 | public void process(Throwable ex, ILogger logger) throws IOException { 12 | logger.writeValue("domainName", InetAddress.getLocalHost().getCanonicalHostName()); 13 | 14 | } 15 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Attachment.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | namespace DevExpress.Logify.Core { 4 | public class Attachment { 5 | public string Name { get; set; } 6 | public string MimeType { get; set; } 7 | public byte[] Content { get; set; } 8 | } 9 | 10 | public class AttachmentCollection : List { 11 | public AttachmentCollection() { 12 | } 13 | AttachmentCollection(IEnumerable items) : base(items) { 14 | } 15 | internal AttachmentCollection Clone() { 16 | return new AttachmentCollection(this); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /js/Logify.Alert.JS/test/collectors/logifyInfoCollectorTest.js: -------------------------------------------------------------------------------- 1 | import logifyInfoCollector from "../../src/collectors/logifyInfoCollector.js"; 2 | var assert = require('chai').assert; 3 | 4 | describe('logifyInfoCollector tests', function() { 5 | 6 | it('process test', function () { 7 | let collector = new logifyInfoCollector(); 8 | 9 | let reportData = new Object(); 10 | 11 | collector.process(null, reportData); 12 | 13 | assert.equal("1.0.2", reportData.clientVersion); 14 | assert.equal("js", reportData.devPlatform); 15 | assert.equal("1.0", reportData.logifyProtocolVersion); 16 | }); 17 | }); -------------------------------------------------------------------------------- /js/Logify.Alert.NodeJS/test/collectors/logifyInfoCollectorTest.js: -------------------------------------------------------------------------------- 1 | import logifyInfoCollector from "../../src/collectors/logifyInfoCollector.js"; 2 | var assert = require('chai').assert; 3 | 4 | describe('logifyInfoCollector tests', function() { 5 | 6 | it('process test', function () { 7 | let collector = new logifyInfoCollector(); 8 | 9 | let reportData = new Object(); 10 | 11 | collector.process(reportData); 12 | 13 | assert.equal("15.2.11", reportData.clientVersion); 14 | assert.equal("node.js", reportData.devPlatform); 15 | assert.equal("1.0", reportData.logifyProtocolVersion); 16 | }); 17 | }); -------------------------------------------------------------------------------- /js/Logify.Alert.JS/test/collectors/osVersionCollectorTest.js: -------------------------------------------------------------------------------- 1 | import osVersionCollector from "../../src/collectors/osVersionCollector.js"; 2 | var assert = require('chai').assert; 3 | 4 | describe('osVersionCollector tests', function() { 5 | 6 | it('process test', function () { 7 | let collector = new osVersionCollector(); 8 | let win = new Object(); 9 | win.navigator = new Object(); 10 | win.navigator.platform = "mocPlatform"; 11 | 12 | let reportData = new Object(); 13 | 14 | collector.process(win, reportData); 15 | 16 | assert.equal("mocPlatform", reportData.os.platform); 17 | }); 18 | }); -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/NOTICE: -------------------------------------------------------------------------------- 1 | Logify.Alert.Core v1.0.55.0 2 | Microsoft.Extensions.Configuration.Binder | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 3 | Microsoft.Extensions.DependencyModel | Microsoft.Extensions.DependencyModel https://github.com/dotnet/core-setup/blob/master/LICENSE.TXT 4 | Microsoft.Extensions.Logging | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 5 | System.ComponentModel | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 6 | System.Diagnostics.StackTrace | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 7 | System.Threading.Thread | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/events/CanReportExceptionLogifyEvent.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.events; 2 | 3 | import com.devexpress.logify.alert.core.LogifyClientBase; 4 | 5 | public class CanReportExceptionLogifyEvent extends LogifyEvent { 6 | private boolean cancel; 7 | 8 | public CanReportExceptionLogifyEvent(LogifyClientBase source, Throwable exception) { 9 | super(source, exception); 10 | cancel = false; 11 | } 12 | 13 | public boolean getCancel() { 14 | return cancel; 15 | } 16 | 17 | public void setCancel(boolean cancel) { 18 | this.cancel = cancel; 19 | } 20 | } -------------------------------------------------------------------------------- /java/Core/src/test/java/com/devexpress/logify/alert/core/collectors/LogifyProtocolVersionCollectorTests.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.devexpress.logify.alert.core.LogifyClientInfo; 4 | import org.junit.Test; 5 | 6 | import static org.junit.Assert.assertEquals; 7 | 8 | public class LogifyProtocolVersionCollectorTests extends CollectorTestsBase { 9 | 10 | @Test 11 | public void testLogifyProtocolVersionCollecting() { 12 | new LogifyProtocolVersionCollector().process(null, logger); 13 | assertEquals(LogifyClientInfo.VERSION, parseJsonReport(true).get("logifyProtocolVersion").getAsString()); 14 | } 15 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Wpf/Utils/ConfirmationDialogEventArgs.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace DevExpress.Logify.WPF { 7 | public class ConfirmationDialogEventArgs : EventArgs { 8 | public ConfirmationDialogModel Model { get; private set; } 9 | public bool Handled { get; set; } 10 | 11 | public ConfirmationDialogEventArgs(ConfirmationDialogModel model) { 12 | this.Model = model; 13 | Handled = false; 14 | } 15 | } 16 | 17 | public delegate void ConfirmationDialogEventHandler(object sender, ConfirmationDialogEventArgs e); 18 | } 19 | -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/logger/ILogger.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.logger; 2 | 3 | import java.util.List; 4 | import java.util.Map; 5 | 6 | public interface ILogger { 7 | StringBuilder getBuilder(); 8 | Map getData(); 9 | 10 | void beginWriteObject(String name); 11 | void writeValue(String name, String text); 12 | void writeValue(String name, boolean value); 13 | void writeValue(String name, int value); 14 | void writeValue(String name, List arrayList); 15 | void endWriteObject(String name); 16 | 17 | void beginWriteArray(String name); 18 | void endWriteArray(String name); 19 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Console/Collectors/ConsoleEnvironmentCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using DevExpress.Logify.Core; 3 | 4 | namespace DevExpress.Logify.Core.Internal { 5 | public class ConsoleEnvironmentCollector : DesktopEnvironmentCollector { 6 | public ConsoleEnvironmentCollector(LogifyCollectorContext context) 7 | : base(context) { 8 | } 9 | protected override void RegisterCollectors(LogifyCollectorContext context) { 10 | base.RegisterCollectors(context); 11 | } 12 | //protected override void RegisterCollectors() { 13 | // base.RegisterCollectors(); 14 | // //etc 15 | //} 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.NLog/LogifyAlertTarget.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using DevExpress.Logify.Core; 3 | using NLog.Targets; 4 | using NLog; 5 | 6 | namespace DevExpress.Logify.Alert.NLog { 7 | [Target("LogifyAlert")] 8 | public sealed class LogifyAlertTarget : TargetWithLayout { 9 | protected override void Write(LogEventInfo logEvent) { 10 | try { 11 | if (logEvent != null && logEvent.Exception != null) { 12 | if (LogifyClientBase.Instance != null) 13 | LogifyClientBase.Instance.Send(logEvent.Exception); 14 | } 15 | } 16 | catch { 17 | } 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Logger/ILogger.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | 5 | namespace DevExpress.Logify.Core.Internal { 6 | public interface ILogger { 7 | TextWriter Writer { get; } 8 | Dictionary Data { get; } 9 | void BeginWriteObject(string name); 10 | void EndWriteObject(string name); 11 | void BeginWriteArray(string name); 12 | void EndWriteArray(string name); 13 | void WriteValue(string name, string text); 14 | void WriteValue(string name, bool value); 15 | void WriteValue(string name, int value); 16 | void WriteValue(string name, Array array); 17 | } 18 | } -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/collectors/DevelopmentPlatformCollector.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.devexpress.logify.alert.core.logger.ILogger; 4 | import com.devexpress.logify.alert.core.Platform; 5 | 6 | public class DevelopmentPlatformCollector implements IInfoCollector { 7 | private Platform platform = Platform.none; 8 | 9 | public DevelopmentPlatformCollector(Platform platform) { 10 | this.platform = platform; 11 | } 12 | 13 | public void process(Throwable ex, ILogger logger) { 14 | logger.writeValue("devPlatform", "java"); 15 | logger.writeValue("platform", platform.toString()); 16 | } 17 | } -------------------------------------------------------------------------------- /js/Logify.Alert.JS/test/collectors/windowSizeCollectorTest.js: -------------------------------------------------------------------------------- 1 | import windowSizeCollector from "../../src/collectors/windowSizeCollector.js"; 2 | var assert = require('chai').assert; 3 | 4 | describe('windowSizeCollector tests', function() { 5 | 6 | it('process test', function () { 7 | let collector = new windowSizeCollector(); 8 | let win = new Object(); 9 | win.innerHeight = "mocHeight"; 10 | win.innerWidth = "mocWidth"; 11 | 12 | let reportData = new Object(); 13 | 14 | collector.process(win, reportData); 15 | 16 | assert.equal("mocHeight", reportData.window.height); 17 | assert.equal("mocWidth", reportData.window.width); 18 | }); 19 | }); -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Collectors/DebuggerCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | 4 | namespace DevExpress.Logify.Core.Internal { 5 | public class DebuggerCollector : IInfoCollector { 6 | public virtual void Process(Exception ex, ILogger logger) { 7 | try { 8 | logger.BeginWriteObject("debugger"); 9 | try { 10 | logger.WriteValue("isAttached", Debugger.IsAttached); 11 | //etc 12 | } 13 | finally { 14 | logger.EndWriteObject("debugger"); 15 | } 16 | } 17 | catch { 18 | } 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.userprefs 2 | bin/ 3 | obj/ 4 | csx/ 5 | packages/ 6 | nuget-packages/ 7 | *.pdb 8 | *.cache 9 | *.suo 10 | *.mdf 11 | *.ldf 12 | *.orig 13 | .vs/config/applicationhost.config 14 | *.cd 15 | *.iml 16 | *.user 17 | *.nupkg 18 | *.log 19 | **/**/.idea 20 | **/**/out/ 21 | **/**/build/ 22 | **/**/.gradle/ 23 | node_modules 24 | Logify.JS/lib 25 | Logify.NodeJS/lib/ 26 | Logify.NodeJS/bundle/ 27 | .cr/ 28 | js/Logify.Alert.NodeJS/bundle/ 29 | js/Logify.Alert.JS/lib/ 30 | js/Logify.Alert.NodeJS/lib/ 31 | dotnet/Logify.Alert.Inject/InjectManagedAssembly/x64/ 32 | dotnet/Logify.Alert.Inject/InjectManagedAssembly/Debug/ 33 | dotnet/Logify.Alert.Inject/InjectManagedAssembly/Release/ 34 | dotnet/Logify.Alert.Inject/Logify.Alert.Inject.sdf 35 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Web/LogifyErrorModule.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using DevExpress.Logify.Core; 3 | using System.Web.Configuration; 4 | using System.ComponentModel; 5 | using DevExpress.Logify.Core.Internal; 6 | 7 | namespace DevExpress.Logify.Web { 8 | [Browsable(false)] 9 | [EditorBrowsable(EditorBrowsableState.Never)] 10 | [Obsolete("Use the LogifyAlert.Instance.Send instead.")] 11 | public static class Register { 12 | [EditorBrowsable(EditorBrowsableState.Never)] 13 | [Browsable(false)] 14 | [Obsolete("Use the LogifyAlert.Instance.Send instead.")] 15 | [IgnoreCallTracking] 16 | public static void Exception(Exception e) { 17 | LogifyAlert.Instance.Send(e); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /js/Logify.Alert.JS/test/collectors/screenSizeCollectorTest.js: -------------------------------------------------------------------------------- 1 | import screenSizeCollector from "../../src/collectors/screenSizeCollector.js"; 2 | var assert = require('chai').assert; 3 | 4 | describe('screenSizeCollector tests', function() { 5 | 6 | it('process test', function () { 7 | let collector = new screenSizeCollector(); 8 | let win = new Object(); 9 | win.screen = new Object(); 10 | win.screen.width = "mocWidth"; 11 | win.screen.height = "mocHeight"; 12 | 13 | let reportData = new Object(); 14 | 15 | collector.process(win, reportData); 16 | 17 | assert.equal("mocWidth", reportData.screen.width); 18 | assert.equal("mocHeight", reportData.screen.height); 19 | }); 20 | }); -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/reportSender/IExceptionReportSender.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.reportSender; 2 | 3 | import com.devexpress.logify.alert.core.LogifyClientExceptionReport; 4 | 5 | public interface IExceptionReportSender { 6 | String getServiceUrl(); 7 | void setServiceUrl(String serviceUrl); 8 | String getApiKey(); 9 | void setApiKey(String apiKey); 10 | 11 | boolean getConfirmSendReport(); 12 | void setConfirmSendReport(boolean confirmSendReport);; 13 | 14 | boolean canSendExceptionReport(); 15 | boolean sendExceptionReport(LogifyClientExceptionReport report); 16 | 17 | IExceptionReportSender clone(); 18 | void copyFrom(IExceptionReportSender instance); 19 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Collectors/TagsCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace DevExpress.Logify.Core.Internal { 5 | public class TagsCollector : IInfoCollector { 6 | readonly IDictionary tags; 7 | 8 | public TagsCollector(IDictionary tags) { 9 | this.tags = tags; 10 | } 11 | 12 | public void Process(Exception ex, ILogger logger) { 13 | if (tags == null || tags.Count <= 0) 14 | return; 15 | 16 | logger.BeginWriteObject("tags"); 17 | foreach (string key in tags.Keys) 18 | logger.WriteValue(key, tags[key]); 19 | logger.EndWriteObject("tags"); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/ExceptionLoggerFactory.cs: -------------------------------------------------------------------------------- 1 | namespace DevExpress.Logify.Core.Internal { 2 | public class ExceptionLoggerFactory { 3 | static ExceptionLoggerFactory instance; 4 | 5 | public IExceptionReportSender PlatformReportSender { get; set; } 6 | 7 | public static ExceptionLoggerFactory Instance { 8 | get { 9 | if (instance != null) 10 | return instance; 11 | 12 | lock (typeof(ExceptionLoggerFactory)) { 13 | if (instance != null) 14 | return instance; 15 | 16 | instance = new ExceptionLoggerFactory(); 17 | return instance; 18 | } 19 | } 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/collectors/TagsCollector.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.devexpress.logify.alert.core.logger.ILogger; 4 | import java.util.Map; 5 | 6 | public class TagsCollector implements IInfoCollector { 7 | private Map tags; 8 | 9 | public TagsCollector(Map tags){ 10 | this.tags = tags; 11 | } 12 | 13 | public void process(Throwable ex, ILogger logger) { 14 | if (tags == null || tags.size() == 0) 15 | return; 16 | 17 | logger.beginWriteObject("tags"); 18 | for (String key : tags.keySet()) 19 | logger.writeValue(key, tags.get(key)); 20 | logger.endWriteObject("tags"); 21 | } 22 | } -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/collectors/browserVersionCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import collectorBase from "./collectorBase.js"; 3 | 4 | export default class browserVersionCollector extends collectorBase { 5 | constructor(_owner) { 6 | super(_owner); 7 | } 8 | 9 | process(win, report) { 10 | super.process(win, report); 11 | 12 | if(report.browser === undefined) 13 | report.browser = new Object(); 14 | 15 | report.browser.appCodeName = win.navigator.appCodeName; 16 | report.browser.userAgent = win.navigator.userAgent; 17 | report.browser.appName = win.navigator.appName; 18 | report.browser.appVersion = win.navigator.appVersion; 19 | report.browser.language = win.navigator.language; 20 | } 21 | } -------------------------------------------------------------------------------- /js/Logify.Alert.NodeJS/test/collectors/tagsCollectorTest.js: -------------------------------------------------------------------------------- 1 | import tagsCollector from "../../src/collectors/tagsCollector.js"; 2 | var assert = require('chai').assert; 3 | 4 | describe('tagsCollector tests', function() { 5 | 6 | it('process with data test', function () { 7 | let collector = new tagsCollector("mocTags"); 8 | 9 | let reportData = new Object(); 10 | 11 | collector.process(reportData); 12 | 13 | assert.equal("mocTags", reportData.tags); 14 | }); 15 | 16 | it('process without data test', function () { 17 | let collector = new tagsCollector(); 18 | 19 | let reportData = new Object(); 20 | 21 | collector.process(reportData); 22 | 23 | assert.equal(undefined, reportData.tags); 24 | }); 25 | }); -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/collectors/CompositeInfoCollector.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.devexpress.logify.alert.core.logger.ILogger; 4 | 5 | import java.util.ArrayList; 6 | import java.util.List; 7 | 8 | public abstract class CompositeInfoCollector implements IInfoCollector { 9 | protected List collectors = new ArrayList(); 10 | 11 | protected CompositeInfoCollector() { 12 | } 13 | 14 | public void process(Throwable ex, ILogger logger) { 15 | for (IInfoCollector collector : collectors) { 16 | try { 17 | collector.process(ex, logger); 18 | } catch (Exception ignored) { 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /README.MD: -------------------------------------------------------------------------------- 1 | # Logify Alert Clients 2 | 3 | ## Platforms 4 | * [.NET](https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/dotnet) 5 | * [JavaScript](https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/js/Logify.Alert.JS) 6 | * [NodeJS](https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/js/Logify.Alert.NodeJS) 7 | * [Delphi](https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/delphi) 8 | * [Java](https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/java) 9 | * [PHP](https://github.com/DevExpress/Logify.Alert.PHP/) 10 | 11 | ## Custom Clients 12 | If the described clients are not suitable for you, you can create a custom one. For more information, refer to the [Custom Clients](https://github.com/DevExpress/Logify.Alert.Clients/blob/develop/CustomClients.md) document. -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Wpf/Collectors/WpfApplicationCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using System.Threading.Tasks; 5 | using System.Windows; 6 | using System.Windows.Controls; 7 | using System.Windows.Threading; 8 | using DevExpress.Logify.Core; 9 | 10 | namespace DevExpress.Logify.Core.Internal { 11 | class WpfApplicationCollector : ApplicationCollector { 12 | public override string AppName { get { return Application.ResourceAssembly.GetName().Name; } } 13 | public override string AppVersion { get { return System.Reflection.Assembly.GetEntryAssembly().GetName().Version.ToString(); } } 14 | public override string UserId { get { return String.Empty; } } 15 | 16 | public WpfApplicationCollector() : base() { } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /js/Logify.Alert.NodeJS/src/testApp.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import logifyAlert from "./logifyAlert.js" 3 | 4 | let client = new logifyAlert("B05B3BA1E17C4726ADEB59B3DB84967E"); 5 | client.applicationName = "testApp"; 6 | client.applicationVersion = "123"; 7 | client.customData = {"Key1": "Data1", "Key2": "Data2"}; 8 | client.tags = {"TagKey1": "TagData1", "TagKey2": "TagData2"}; 9 | 10 | let afterReportExceptionCallback = function (e) { 11 | }; 12 | 13 | client.afterReportException = afterReportExceptionCallback.bind("qwe"); 14 | client.startHandling(); 15 | 16 | let qwe = undefined; 17 | qwe.asd2(); 18 | 19 | // let zzz = 1 / 0; 20 | // 21 | // var promise = new Promise((resolve, reject) => { 22 | // setTimeout(() => { 23 | // reject(new Error("Test error")); 24 | // }, 10); 25 | // 26 | // }); 27 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/MethodCallArgumentsStorage.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using System.Globalization; 5 | using System.Reflection; 6 | using System.Runtime.CompilerServices; 7 | using System.Threading; 8 | 9 | namespace DevExpress.Logify.Core { 10 | public class MethodCallInfo { 11 | public object Instance { get; set; } 12 | public MethodBase Method { get; set; } 13 | public IList Arguments { get; set; } 14 | } 15 | } 16 | 17 | namespace DevExpress.Logify.Core.Internal { 18 | public class MethodCallStackArgumentMap : Dictionary { 19 | public int FirstChanceFrameCount { get; set; } 20 | } 21 | public class MethodCallArgumentMap : Dictionary { 22 | } 23 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Send/ReportSender/ReportSender.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Text; 4 | using DevExpress.Logify.Core; 5 | using DevExpress.Logify.Core.Internal; 6 | 7 | namespace DevExpress.Logify.Send { 8 | class InnerExceptionReportSender : ServiceExceptionReportSender { 9 | public bool SendExceptionReport(string reportContent) { 10 | LogifyClientExceptionReport report = new LogifyClientExceptionReport(); 11 | report.ReportContent = new StringBuilder(reportContent); 12 | report.Data = new Dictionary(); 13 | return SendExceptionReport(report); 14 | } 15 | public override IExceptionReportSender CreateEmptyClone() { 16 | return new InnerExceptionReportSender(); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Win/NOTICE: -------------------------------------------------------------------------------- 1 | Logify.Alert.Win v1.0.55.0 2 | Logify.Alert.Core 3 | ---------------------------------------------------------------------------------------------------- 4 | Logify.Alert.Core v1.0.55.0 5 | Microsoft.Extensions.Configuration.Binder | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 6 | Microsoft.Extensions.DependencyModel | Microsoft.Extensions.DependencyModel https://github.com/dotnet/core-setup/blob/master/LICENSE.TXT 7 | Microsoft.Extensions.Logging | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 8 | System.ComponentModel | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 9 | System.Diagnostics.StackTrace | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 10 | System.Threading.Thread | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Wpf/NOTICE: -------------------------------------------------------------------------------- 1 | Logify.Alert.Wpf v1.0.55.0 2 | Logify.Alert.Core 3 | ---------------------------------------------------------------------------------------------------- 4 | Logify.Alert.Core v1.0.55.0 5 | Microsoft.Extensions.Configuration.Binder | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 6 | Microsoft.Extensions.DependencyModel | Microsoft.Extensions.DependencyModel https://github.com/dotnet/core-setup/blob/master/LICENSE.TXT 7 | Microsoft.Extensions.Logging | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 8 | System.ComponentModel | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 9 | System.Diagnostics.StackTrace | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 10 | System.Threading.Thread | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/collectors/LogifyReportGenerationDateTimeCollector.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.devexpress.logify.alert.core.logger.ILogger; 4 | import java.text.DateFormat; 5 | import java.text.SimpleDateFormat; 6 | import java.util.Date; 7 | import java.util.TimeZone; 8 | 9 | public class LogifyReportGenerationDateTimeCollector implements IInfoCollector { 10 | private static final DateFormat TIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 11 | 12 | static { 13 | TIME_FORMAT.setTimeZone(TimeZone.getTimeZone("UTC")); 14 | } 15 | 16 | @Override 17 | public void process(Throwable ex, ILogger logger) { 18 | logger.writeValue("logifyReportDateTimeUtc", TIME_FORMAT.format(new Date())); 19 | } 20 | } -------------------------------------------------------------------------------- /js/Logify.Alert.NodeJS/test/collectors/customDataCollectorTest.js: -------------------------------------------------------------------------------- 1 | import customDataCollector from "../../src/collectors/customDataCollector.js"; 2 | var assert = require('chai').assert; 3 | 4 | describe('customDataCollector tests', function() { 5 | 6 | it('process with data test', function () { 7 | let collector = new customDataCollector("mocCustomData"); 8 | 9 | let reportData = new Object(); 10 | 11 | collector.process(reportData); 12 | 13 | assert.equal("mocCustomData", reportData.customData); 14 | }); 15 | 16 | it('process without data test', function () { 17 | let collector = new customDataCollector(); 18 | 19 | let reportData = new Object(); 20 | 21 | collector.process(reportData); 22 | 23 | assert.equal(undefined, reportData.customData); 24 | }); 25 | }); -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Console/NOTICE: -------------------------------------------------------------------------------- 1 | Logify.Alert.Console v1.0.55.0 2 | Logify.Alert.Core 3 | ---------------------------------------------------------------------------------------------------- 4 | Logify.Alert.Core v1.0.55.0 5 | Microsoft.Extensions.Configuration.Binder | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 6 | Microsoft.Extensions.DependencyModel | Microsoft.Extensions.DependencyModel https://github.com/dotnet/core-setup/blob/master/LICENSE.TXT 7 | Microsoft.Extensions.Logging | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 8 | System.ComponentModel | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 9 | System.Diagnostics.StackTrace | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 10 | System.Threading.Thread | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.iOS/NOTICE: -------------------------------------------------------------------------------- 1 | Logify.Alert.Xamarin.iOS v1.0.55.0 2 | Logify.Alert.Core 3 | ---------------------------------------------------------------------------------------------------- 4 | Logify.Alert.Core v1.0.55.0 5 | Microsoft.Extensions.Configuration.Binder | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 6 | Microsoft.Extensions.DependencyModel | Microsoft.Extensions.DependencyModel https://github.com/dotnet/core-setup/blob/master/LICENSE.TXT 7 | Microsoft.Extensions.Logging | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 8 | System.ComponentModel | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 9 | System.Diagnostics.StackTrace | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 10 | System.Threading.Thread | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 -------------------------------------------------------------------------------- /java/Android/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.Android/NOTICE: -------------------------------------------------------------------------------- 1 | Logify.Alert.Xamarin.Android v1.0.55.0 2 | Logify.Alert.Core 3 | ---------------------------------------------------------------------------------------------------- 4 | Logify.Alert.Core v1.0.55.0 5 | Microsoft.Extensions.Configuration.Binder | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 6 | Microsoft.Extensions.DependencyModel | Microsoft.Extensions.DependencyModel https://github.com/dotnet/core-setup/blob/master/LICENSE.TXT 7 | Microsoft.Extensions.Logging | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 8 | System.ComponentModel | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 9 | System.Diagnostics.StackTrace | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 10 | System.Threading.Thread | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/collectors/CustomDataCollector.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.devexpress.logify.alert.core.logger.ILogger; 4 | import java.util.Map; 5 | 6 | public class CustomDataCollector implements IInfoCollector { 7 | 8 | private Map customData; 9 | 10 | public CustomDataCollector(Map customData){ 11 | this.customData = customData; 12 | } 13 | 14 | public void process(Throwable ex, ILogger logger) { 15 | if (customData == null || customData.size() == 0) 16 | return; 17 | 18 | logger.beginWriteObject("customData"); 19 | for (String key : customData.keySet()) 20 | logger.writeValue(key, customData.get(key)); 21 | logger.endWriteObject("customData"); 22 | } 23 | } -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/collectors/breadcrumbsCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import collectorBase from "./collectorBase.js"; 3 | import breadcrumb from "../breadcrumbs/breadcrumb.js"; 4 | 5 | export default class breadcrumbsCollector extends collectorBase { 6 | constructor(_owner) { 7 | super(_owner); 8 | } 9 | 10 | process(win, report) { 11 | super.process(win, report); 12 | 13 | if ((this.owner == null) || (this.owner == undefined)) 14 | return; 15 | 16 | if (this.owner._breadcrumbsListener) { 17 | this.owner._breadcrumbsListener.beforeReadBreadcrumbs(); 18 | } 19 | 20 | if (this.owner._breadcrumbs != undefined && this.owner._breadcrumbs.length > 0) { 21 | report.breadcrumbs = this.owner._breadcrumbs; 22 | report.breadcrumbs.reverse(); 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/collectors/rawHtmlTagCollectorBase.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import collectorBase from "./collectorBase.js"; 3 | 4 | export default class rawHtmlTagCollectorBase extends collectorBase { 5 | constructor(_owner, tagName) { 6 | super(_owner); 7 | this._tagName = tagName; 8 | } 9 | 10 | process(win, report) { 11 | super.process(win, report); 12 | 13 | const tags = win.document.getElementsByTagName(this._tagName); 14 | const tagsCount = tags.length; 15 | let result = []; 16 | for(let i = 0; i < tagsCount; i++) { 17 | if(tags[i].innerHTML === "") 18 | result.push(tags[i].outerHTML); 19 | } 20 | 21 | if(result.length == 0) 22 | return; 23 | 24 | const dataPropertyName = this._tagName + "s"; 25 | report[dataPropertyName] = result; 26 | } 27 | } -------------------------------------------------------------------------------- /js/Logify.Alert.NodeJS/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "logify-alert", 3 | "version": "1.0.1", 4 | "description": "Node.js client for Logify Alert", 5 | "main": "src/logifyAlert.js", 6 | "repository": "https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/js/Logify.Alert.NodeJS", 7 | "keywords": [ 8 | "logify", 9 | "logify alert", 10 | "crash reports", 11 | "devexpress" 12 | ], 13 | "author": { 14 | "name": "Developer Express Inc.", 15 | "url": "https://devexpress.com" 16 | }, 17 | "license": "SEE LICENSE IN LICENSE", 18 | "dependencies": { 19 | "request": "^2.72.0" 20 | }, 21 | "devDependencies": { 22 | "babel-preset-es2015": "^6.9.0", 23 | "chai": "^3.5.0", 24 | "del": "^2.2.0", 25 | "gulp": "^3.9.1", 26 | "gulp-babel": "^6.1.2", 27 | "gulp-mocha": "^2.2.0", 28 | "gulp-sourcemaps": "^1.6.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /js/Logify.Alert.JS/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "logify-Alert", 3 | "version": "1.0.0", 4 | "devDependencies": { 5 | "babel-plugin-transform-class-properties": "^6.24.1", 6 | "babel-plugin-transform-es3-member-expression-literals": "^6.22.0", 7 | "babel-plugin-transform-es3-property-literals": "^6.22.0", 8 | "babel-plugin-transform-object-assign": "^6.22.0", 9 | "babel-plugin-transform-object-rest-spread": "^6.26.0", 10 | "babel-preset-es2015": "^6.24.1", 11 | "babel-preset-es2015-ie8": "^1.0.0", 12 | "babel-preset-es2015-loose": "^8.0.0", 13 | "chai": "^4.1.0", 14 | "del": "^3.0.0", 15 | "gulp": "^3.9.1", 16 | "babel-core": "^6.26.0", 17 | "gulp-babel": "^7.0.1", 18 | "gulp-browserify": "^0.5.1", 19 | "gulp-gzip": "^1.4.2", 20 | "gulp-minify": "^2.1.0", 21 | "gulp-mocha": "^5.0.0", 22 | "gulp-sourcemaps": "^2.6.4" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.UWP/Collectors/UWPExceptionCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using DevExpress.Logify.Core; 3 | 4 | namespace DevExpress.Logify.Core.Internal { 5 | public class UWPExceptionCollector : RootInfoCollector { 6 | public UWPExceptionCollector(LogifyCollectorContext context) : base(context) { 7 | } 8 | 9 | protected override void RegisterCollectors(LogifyCollectorContext context) { 10 | Collectors.Add(new DevelopementPlatformCollector(Platform.UWP)); // added in constuctor 11 | Collectors.Add(new UWPApplicationCollector()); 12 | Collectors.Add(new UWPDisplayCollector()); 13 | Collectors.Add(new UWPMemoryCollector()); 14 | Collectors.Add(new UWPDeviceInfoCollector()); 15 | Collectors.Add(new UWPOSCollector()); 16 | Collectors.Add(new DebuggerCollector()); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Collectors/EnvironmentCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace DevExpress.Logify.Core.Internal { 4 | public class EnvironmentCollector : IInfoCollector { 5 | public virtual void Process(Exception ex, ILogger logger) { 6 | /* 7 | // AM: Due legal reasons need explicit user action to send security-critial data. 8 | // Users should use custom data instead. 9 | logger.BeginWriteObje ct("environment"); 10 | try { 11 | logger.WriteValue("machineName", Environment.MachineName); 12 | logger.WriteValue("userDomainName", Environment.UserDomainName); 13 | logger.WriteValue("userName", Environment.UserName); 14 | } 15 | finally { 16 | logger.EndWriteObject("environment"); 17 | } 18 | */ 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/events/EventSourceBase.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.events; 2 | 3 | import java.util.ArrayList; 4 | import java.util.Collections; 5 | import java.util.List; 6 | 7 | public class EventSourceBase { 8 | private List listeners = Collections.synchronizedList(new ArrayList()); 9 | 10 | public void addListener(LogifyEventListener listener) { 11 | listeners.add(listener); 12 | } 13 | 14 | public void removeListener(LogifyEventListener listener) { 15 | listeners.remove(listener); 16 | } 17 | 18 | public void fireEvent(T event) { 19 | for (LogifyEventListener listener : listeners) { 20 | listener.handle(event); 21 | } 22 | } 23 | 24 | public int getSize() { 25 | return listeners.size(); 26 | } 27 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Serilog/NOTICE: -------------------------------------------------------------------------------- 1 | Logify.Alert.Serilog v1.0.55.0 2 | Logify.Alert.Core 3 | Serilog | Serilog Contributors https://www.apache.org/licenses/LICENSE-2.0 4 | ---------------------------------------------------------------------------------------------------- 5 | Logify.Alert.Core v1.0.55.0 6 | Microsoft.Extensions.Configuration.Binder | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 7 | Microsoft.Extensions.DependencyModel | Microsoft.Extensions.DependencyModel https://github.com/dotnet/core-setup/blob/master/LICENSE.TXT 8 | Microsoft.Extensions.Logging | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 9 | System.ComponentModel | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 10 | System.Diagnostics.StackTrace | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 11 | System.Threading.Thread | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Log4Net/NOTICE: -------------------------------------------------------------------------------- 1 | Logify.Alert.Log4Net v1.0.55.0 2 | log4net | The Apache Software Foundation http://logging.apache.org/log4net/license.html 3 | Logify.Alert.Core 4 | ---------------------------------------------------------------------------------------------------- 5 | Logify.Alert.Core v1.0.55.0 6 | Microsoft.Extensions.Configuration.Binder | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 7 | Microsoft.Extensions.DependencyModel | Microsoft.Extensions.DependencyModel https://github.com/dotnet/core-setup/blob/master/LICENSE.TXT 8 | Microsoft.Extensions.Logging | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 9 | System.ComponentModel | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 10 | System.Diagnostics.StackTrace | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 11 | System.Threading.Thread | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/collectors/ThreadInfoCollector.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.devexpress.logify.alert.core.logger.ILogger; 4 | 5 | public class ThreadInfoCollector implements IInfoCollector { 6 | 7 | @Override 8 | public void process(Throwable ex, ILogger logger) { 9 | logger.beginWriteObject("thread"); 10 | try { 11 | Thread thread = Thread.currentThread(); 12 | 13 | logger.writeValue("id", (int) thread.getId()); 14 | logger.writeValue("name", thread.getName()); 15 | logger.writeValue("priority", thread.getPriority()); 16 | logger.writeValue("state", thread.getState().toString()); 17 | 18 | logger.writeValue("threadGroup", thread.getThreadGroup().getName()); 19 | } finally { 20 | logger.endWriteObject("thread"); 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /js/Logify.Alert.JS/test/collectors/tagsCollectorTest.js: -------------------------------------------------------------------------------- 1 | import tagsCollector from "../../src/collectors/tagsCollector.js"; 2 | var assert = require('chai').assert; 3 | 4 | describe('tagsCollector tests', function() { 5 | 6 | it('process with data test', function () { 7 | let mocOwner = new Object(); 8 | mocOwner.tags = "mocTags"; 9 | 10 | let collector = new tagsCollector(mocOwner); 11 | 12 | let reportData = new Object(); 13 | 14 | collector.process(null, reportData); 15 | 16 | assert.equal("mocTags", reportData.tags); 17 | }); 18 | 19 | it('process without data test', function () { 20 | let mocOwner = new Object(); 21 | let collector = new tagsCollector(mocOwner); 22 | 23 | let reportData = new Object(); 24 | 25 | collector.process(null, reportData); 26 | 27 | assert.equal(undefined, reportData.tags); 28 | }); 29 | }); -------------------------------------------------------------------------------- /java/Java/src/main/java/com/devexpress/logify/alert/java/collectors/JavaOperatingSystemCollector.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.java.collectors; 2 | 3 | import com.devexpress.logify.alert.core.collectors.IInfoCollector; 4 | import com.devexpress.logify.alert.core.logger.ILogger; 5 | 6 | public class JavaOperatingSystemCollector implements IInfoCollector { 7 | public void process(Throwable ex, ILogger logger) { 8 | logger.beginWriteObject("os"); 9 | try { 10 | logger.writeValue("platform", System.getProperty("os.name")); 11 | logger.writeValue("version", System.getProperty("os.version")); 12 | String architecture = System.getProperty("os.arch"); 13 | logger.writeValue("architecture", architecture); 14 | logger.writeValue("is64bit", architecture.contains("64")); 15 | } finally { 16 | logger.endWriteObject("os"); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /java/Logback/src/main/java/com/devexpress/logify/alert/logback/LogifyAlertAppender.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.logback; 2 | 3 | import ch.qos.logback.classic.spi.ILoggingEvent; 4 | import ch.qos.logback.classic.spi.IThrowableProxy; 5 | import ch.qos.logback.classic.spi.ThrowableProxy; 6 | import ch.qos.logback.core.AppenderBase; 7 | import com.devexpress.logify.alert.java.LogifyAlert; 8 | 9 | public class LogifyAlertAppender extends AppenderBase { 10 | @Override 11 | protected void append(ILoggingEvent eventObject) { 12 | IThrowableProxy proxy = eventObject.getThrowableProxy(); 13 | if (proxy instanceof ThrowableProxy) { 14 | Throwable throwable = ((ThrowableProxy) proxy).getThrowable(); 15 | LogifyAlert client = LogifyAlert.getInstance(); 16 | 17 | if (client != null) { 18 | client.send(throwable); 19 | } 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.NLog/NOTICE: -------------------------------------------------------------------------------- 1 | Logify.Alert.NLog v1.0.55.0 2 | Logify.Alert.Core 3 | NLog | Jarek Kowalski;Kim Christensen;Julian Verdurmen https://github.com/NLog/NLog/blob/master/LICENSE.txt 4 | ---------------------------------------------------------------------------------------------------- 5 | Logify.Alert.Core v1.0.55.0 6 | Microsoft.Extensions.Configuration.Binder | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 7 | Microsoft.Extensions.DependencyModel | Microsoft.Extensions.DependencyModel https://github.com/dotnet/core-setup/blob/master/LICENSE.TXT 8 | Microsoft.Extensions.Logging | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 9 | System.ComponentModel | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 10 | System.Diagnostics.StackTrace | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 11 | System.Threading.Thread | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 -------------------------------------------------------------------------------- /dotnet/Logify.Alert.UWP/NOTICE: -------------------------------------------------------------------------------- 1 | Logify.Alert.UWP v1.0.55.0 2 | Logify.Alert.Core 3 | Microsoft.NETCore.UniversalWindowsPlatform | Microsoft https://github.com/dotnet/core-setup/blob/master/LICENSE.TXT 4 | ---------------------------------------------------------------------------------------------------- 5 | Logify.Alert.Core v1.0.55.0 6 | Microsoft.Extensions.Configuration.Binder | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 7 | Microsoft.Extensions.DependencyModel | Microsoft.Extensions.DependencyModel https://github.com/dotnet/core-setup/blob/master/LICENSE.TXT 8 | Microsoft.Extensions.Logging | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 9 | System.ComponentModel | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 10 | System.Diagnostics.StackTrace | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 11 | System.Threading.Thread | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Web/NOTICE: -------------------------------------------------------------------------------- 1 | Logify.Alert.Web v1.0.55.0 2 | Logify.Alert.Core 3 | Microsoft.AspNetCore.Hosting.Abstractions | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 4 | ---------------------------------------------------------------------------------------------------- 5 | Logify.Alert.Core v1.0.55.0 6 | Microsoft.Extensions.Configuration.Binder | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 7 | Microsoft.Extensions.DependencyModel | Microsoft.Extensions.DependencyModel https://github.com/dotnet/core-setup/blob/master/LICENSE.TXT 8 | Microsoft.Extensions.Logging | Microsoft https://raw.githubusercontent.com/aspnet/Home/2.0.0/LICENSE.txt 9 | System.ComponentModel | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 10 | System.Diagnostics.StackTrace | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 11 | System.Threading.Thread | Microsoft http://go.microsoft.com/fwlink/?LinkId=329770 -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/collectors/JavaEnvironmentCollector.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.devexpress.logify.alert.core.logger.ILogger; 4 | 5 | public class JavaEnvironmentCollector implements IInfoCollector { 6 | public void process(Throwable ex, ILogger logger) { 7 | logger.beginWriteObject("java_env"); 8 | try { 9 | logger.writeValue("vm_version", System.getProperty("java.vm.version")); 10 | logger.writeValue("vm_vendor", System.getProperty("java.vm.vendor")); 11 | logger.writeValue("encoding", System.getProperty("file.encoding")); 12 | logger.writeValue("runtime_version", System.getProperty("java.runtime.version")); 13 | logger.writeValue("graphics_env", System.getProperty("java.awt.graphicsenv")); 14 | } finally { 15 | logger.endWriteObject("java_env"); 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Web/Collectors/ModulesCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Specialized; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Web; 6 | using DevExpress.Logify.Core; 7 | 8 | namespace DevExpress.Logify.Core.Internal { 9 | 10 | class ModulesCollector : IInfoCollector { 11 | 12 | readonly HttpModuleCollection modules; 13 | readonly string name; 14 | 15 | public ModulesCollector(HttpModuleCollection modules) : this(modules, "modules") { } 16 | 17 | public ModulesCollector(HttpModuleCollection modules, string name) { 18 | this.modules = modules; 19 | this.name = name; 20 | } 21 | 22 | public void Process(Exception e, ILogger logger) { 23 | if (modules.Count != 0) { 24 | try { 25 | logger.WriteValue(name, modules.Cast().ToArray()); 26 | } catch {} 27 | } 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /java/Java/src/test/java/com/devexpress/logify/alert/java/collectors/JavaOperatingSystemCollectorTests.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.java.collectors; 2 | 3 | import com.devexpress.logify.alert.core.collectors.CollectorTestsBase; 4 | import com.google.gson.JsonObject; 5 | 6 | import org.junit.Assert; 7 | import org.junit.Test; 8 | 9 | public class JavaOperatingSystemCollectorTests extends CollectorTestsBase { 10 | 11 | @Test 12 | public void testOperationSystemCollecting() { 13 | new JavaOperatingSystemCollector().process(null, logger); 14 | 15 | JsonObject os = parseJsonReport(true).getAsJsonObject("os"); 16 | Assert.assertNotNull(os); 17 | Assert.assertEquals(System.getProperty("os.name"), os.get("platform").getAsString()); 18 | Assert.assertEquals(System.getProperty("os.arch"), os.get("architecture").getAsString()); 19 | Assert.assertEquals(System.getProperty("os.version"), os.get("version").getAsString()); 20 | } 21 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/BreadcrumbsRecorderBase.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace DevExpress.Logify.Core.Internal { 4 | public abstract class BreadcrumbsRecorderBase { 5 | [IgnoreCallTracking] 6 | protected void AddBreadcrumb(Breadcrumb item) { 7 | if(LogifyClientBase.Instance != null) { 8 | PopulateCommonBreadcrumbInfo(item); 9 | LogifyClientBase.Instance.Breadcrumbs.AddSimple(item); 10 | } 11 | } 12 | [IgnoreCallTracking] 13 | void PopulateCommonBreadcrumbInfo(Breadcrumb item) { 14 | item.DateTime = DateTime.UtcNow; 15 | item.Level = BreadcrumbLevel.Info; 16 | item.ThreadId = GetThreadId(); 17 | item.Category = GetCategory(); 18 | item.IsAuto = true; 19 | } 20 | protected virtual string GetCategory() { 21 | return "input"; 22 | } 23 | protected abstract string GetThreadId(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /java/Log4j/src/main/java/com/devexpress/logify/alert/log4j/LogifyAlertAppender.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.log4j; 2 | 3 | import com.devexpress.logify.alert.java.LogifyAlert; 4 | import org.apache.log4j.AppenderSkeleton; 5 | import org.apache.log4j.spi.LoggingEvent; 6 | 7 | public class LogifyAlertAppender extends AppenderSkeleton { 8 | @Override 9 | public void append(LoggingEvent loggingEvent) { 10 | if (loggingEvent != null && loggingEvent.getThrowableInformation() != null 11 | && loggingEvent.getThrowableInformation().getThrowable() != null) { 12 | LogifyAlert client = LogifyAlert.getInstance(); 13 | 14 | if (client != null) { 15 | client.send(loggingEvent.getThrowableInformation().getThrowable()); 16 | } 17 | } 18 | } 19 | 20 | @Override 21 | public void close() { } 22 | 23 | @Override 24 | public boolean requiresLayout() { 25 | return false; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/ExceptionLoggerFactory.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core; 2 | 3 | import com.devexpress.logify.alert.core.reportSender.IExceptionReportSender; 4 | 5 | public class ExceptionLoggerFactory { 6 | private static ExceptionLoggerFactory instance; 7 | private IExceptionReportSender platformReportSender; 8 | 9 | public static ExceptionLoggerFactory getInstance() { 10 | if (instance != null) 11 | return instance; 12 | 13 | synchronized (ExceptionLoggerFactory.class) { 14 | if (instance != null) 15 | return instance; 16 | 17 | instance = new ExceptionLoggerFactory(); 18 | return instance; 19 | } 20 | } 21 | 22 | public IExceptionReportSender getPlatformReportSender() { 23 | return platformReportSender; 24 | } 25 | public void setPlatformReportSender(IExceptionReportSender sender) { 26 | platformReportSender = sender; 27 | } 28 | } -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/collectors/siteDataCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import collectorBase from "./collectorBase.js"; 3 | 4 | export default class siteDataCollector extends collectorBase { 5 | constructor(_owner) { 6 | super(_owner); 7 | } 8 | 9 | process(win, report) { 10 | super.process(win, report); 11 | 12 | if(report.siteData === undefined) 13 | report.siteData = new Object(); 14 | 15 | if((this.owner == null) || (this.owner == undefined)) 16 | return; 17 | 18 | if(this.owner.collectCookies) 19 | report.siteData.cookie = this.owner.securityUtil.maskedCookies(win.document.cookie); 20 | 21 | if(this.owner.collectLocalStorage) 22 | report.siteData.localStorage = this.owner.securityUtil.maskedObject(win.localStorage); 23 | 24 | if(this.owner.collectSessionStorage) 25 | report.siteData.sessionStorage = this.owner.securityUtil.maskedObject(win.sessionStorage); 26 | } 27 | } -------------------------------------------------------------------------------- /js/Logify.Alert.NodeJS/test/collectors/platformEnvironmentCollectorTest.js: -------------------------------------------------------------------------------- 1 | import platformEnvironmentCollector from "../../src/collectors/platformEnvironmentCollector.js"; 2 | var assert = require('chai').assert; 3 | var os = require('os'); 4 | 5 | describe('platformEnvironmentCollector tests', function() { 6 | 7 | it('process test', function () { 8 | let reportData = new Object(); 9 | 10 | let collector = new platformEnvironmentCollector(); 11 | collector.process(reportData); 12 | 13 | assert.equal(os.platform(), reportData.platformEnvironment.platform); 14 | assert.equal(os.cpus().length, reportData.platformEnvironment.cpus.length); 15 | assert.equal(os.arch(), reportData.platformEnvironment.architecture); 16 | assert.notEqual(undefined, reportData.platformEnvironment.freeMemory); 17 | assert.equal(os.totalmem(), reportData.platformEnvironment.totalMemory); 18 | assert.equal(os.release(), reportData.platformEnvironment.release); 19 | }); 20 | }); -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.Android/Collectors/XamarinDisplayCollector.cs: -------------------------------------------------------------------------------- 1 | using Android.Content.Res; 2 | using Android.Util; 3 | using Microsoft.Win32; 4 | using System; 5 | using System.Drawing; 6 | using System.Runtime.InteropServices; 7 | 8 | namespace DevExpress.Logify.Core.Internal { 9 | public class XamarinDisplayCollector : IInfoCollector { 10 | public virtual void Process(Exception ex, ILogger logger) { 11 | logger.BeginWriteObject("display"); 12 | try { 13 | DisplayMetrics metrics = Resources.System.DisplayMetrics; 14 | logger.WriteValue("width", metrics.WidthPixels.ToString()); 15 | logger.WriteValue("height", metrics.HeightPixels.ToString()); 16 | logger.WriteValue("dpiX", metrics.Xdpi.ToString()); 17 | logger.WriteValue("dpiY", metrics.Ydpi.ToString()); 18 | } 19 | finally { 20 | logger.EndWriteObject("display"); 21 | } 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.iOS/Collectors/XamariniOSExceptionCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using DevExpress.Logify.Core; 3 | 4 | namespace DevExpress.Logify.Core.Internal { 5 | public class XamarinIOSExceptionCollector : RootInfoCollector { 6 | public XamarinIOSExceptionCollector(LogifyCollectorContext context) : base(context) { 7 | } 8 | 9 | protected override void RegisterCollectors(LogifyCollectorContext context) { 10 | Collectors.Add(new DevelopementPlatformCollector(Platform.XAMARIN_IOS)); // added in constuctor 11 | Collectors.Add(new XamarinApplicationCollector()); 12 | Collectors.Add(new XamarinDisplayCollector()); 13 | Collectors.Add(new XamarinMemoryCollector()); 14 | Collectors.Add(new XamarinDeviceInfoCollector()); 15 | Collectors.Add(new XamarinIOSOSCollector()); 16 | //Collectors.Add(new XamarinNetworkCollector()); 17 | Collectors.Add(new DebuggerCollector()); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Console/Collectors/ConsoleCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using DevExpress.Logify.Core; 3 | 4 | namespace DevExpress.Logify.Core.Internal { 5 | public class ConsoleExceptionCollector : RootInfoCollector { 6 | public ConsoleExceptionCollector(LogifyCollectorContext context) : base(context) { 7 | } 8 | 9 | protected override void RegisterCollectors(LogifyCollectorContext context) { 10 | if (context.Config != null && context.Config.CollectMiniDump) 11 | Collectors.Add(new MiniDumpCollector()); 12 | Collectors.Add(new DevelopementPlatformCollector(Platform.WIN)); 13 | Collectors.Add(new ConsoleApplicationCollector()); 14 | Collectors.Add(new ConsoleEnvironmentCollector(context)); // Environment info should go first, it may be used for further exception processing 15 | if (context.Config != null && context.Config.CollectMiniDump) 16 | Collectors.Add(new DeferredMiniDumpCollector()); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.UWP/Collectors/UWPDisplayCollector.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.Drawing; 4 | using System.Runtime.InteropServices; 5 | using Windows.Graphics.Display; 6 | 7 | namespace DevExpress.Logify.Core.Internal { 8 | public class UWPDisplayCollector : IInfoCollector { 9 | public virtual void Process(Exception ex, ILogger logger) { 10 | logger.BeginWriteObject("display"); 11 | try { 12 | DisplayInformation displayInfo = DisplayInformation.GetForCurrentView(); 13 | logger.WriteValue("width", displayInfo.ScreenWidthInRawPixels.ToString()); 14 | logger.WriteValue("height", displayInfo.ScreenHeightInRawPixels.ToString()); 15 | logger.WriteValue("dpiX", displayInfo.RawDpiX.ToString()); 16 | logger.WriteValue("dpiY", displayInfo.RawDpiY.ToString()); 17 | } 18 | finally { 19 | logger.EndWriteObject("display"); 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Win/Collectors/WinFormsCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using DevExpress.Logify.Core; 3 | 4 | namespace DevExpress.Logify.Core.Internal { 5 | public class WinFormsExceptionCollector : RootInfoCollector { 6 | public WinFormsExceptionCollector(LogifyCollectorContext context) : base(context) { 7 | } 8 | 9 | protected override void RegisterCollectors(LogifyCollectorContext context) { 10 | if (context.Config != null && context.Config.CollectMiniDump) 11 | Collectors.Add(new MiniDumpCollector()); 12 | Collectors.Add(new DevelopementPlatformCollector(Platform.WIN)); 13 | Collectors.Add(new WinFormsApplicationCollector()); 14 | Collectors.Add(new WinFormsEnvironmentCollector(context)); // Environment info should go first, it may be used for further exception processing 15 | if (context.Config != null && context.Config.CollectMiniDump) 16 | Collectors.Add(new DeferredMiniDumpCollector()); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /java/Core/src/test/java/com/devexpress/logify/alert/core/collectors/JvmMemoryCollectorTests.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.google.gson.JsonObject; 4 | import org.junit.Test; 5 | 6 | import static org.junit.Assert.assertNotNull; 7 | import static org.junit.Assert.assertTrue; 8 | 9 | public class JvmMemoryCollectorTests extends CollectorTestsBase { 10 | 11 | @Test 12 | public void testJvmMemoryCollecting() { 13 | new JvmMemoryCollector().process(null, logger); 14 | 15 | String memoryPattern = "^\\d+? Mb$"; 16 | JsonObject memory = parseJsonReport(true).getAsJsonObject("memory of JVM"); 17 | assertNotNull(memory); 18 | assertTrue(memory.get("totalMemory").getAsString().matches(memoryPattern)); 19 | assertTrue(memory.get("freeMemory").getAsString().matches(memoryPattern)); 20 | assertTrue(memory.get("usedMemory").getAsString().matches(memoryPattern)); 21 | assertTrue(memory.get("totalVirtualMemory").getAsString().matches(memoryPattern)); 22 | } 23 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.Android/Collectors/XamarinDroidOSCollector.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.Runtime.InteropServices; 4 | 5 | namespace DevExpress.Logify.Core.Internal { 6 | public class XamarinDroidOSCollector : IInfoCollector { 7 | public virtual void Process(Exception ex, ILogger logger) { 8 | logger.BeginWriteObject("os"); 9 | try { 10 | logger.WriteValue("platform", "Android"); 11 | logger.WriteValue("architecture", RuntimeInformation.OSArchitecture.ToString()); 12 | string version = Android.OS.Build.VERSION.Release; 13 | if (!string.IsNullOrEmpty(version)) 14 | logger.WriteValue("version", version); 15 | logger.WriteValue("is64bit", RuntimeInformation.OSArchitecture == Architecture.X64 || RuntimeInformation.OSArchitecture == Architecture.Arm64); 16 | } 17 | finally { 18 | logger.EndWriteObject("os"); 19 | } 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.iOS/Collectors/XamariniOSOSCollector.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.Runtime.InteropServices; 4 | using UIKit; 5 | 6 | namespace DevExpress.Logify.Core.Internal { 7 | public class XamarinIOSOSCollector : IInfoCollector { 8 | public virtual void Process(Exception ex, ILogger logger) { 9 | logger.BeginWriteObject("os"); 10 | try { 11 | logger.WriteValue("platform", "iOS"); 12 | logger.WriteValue("architecture", RuntimeInformation.OSArchitecture.ToString()); 13 | string version = UIDevice.CurrentDevice.SystemVersion; 14 | if (!string.IsNullOrEmpty(version)) 15 | logger.WriteValue("version", version); 16 | logger.WriteValue("is64bit", RuntimeInformation.OSArchitecture == Architecture.X64 || RuntimeInformation.OSArchitecture == Architecture.Arm64); 17 | } 18 | finally { 19 | logger.EndWriteObject("os"); 20 | } 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /java/Core/src/test/java/com/devexpress/logify/alert/core/collectors/TagsCollectorTests.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.google.gson.JsonObject; 4 | import org.junit.Test; 5 | 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | 9 | import static org.junit.Assert.assertEquals; 10 | import static org.junit.Assert.assertNotNull; 11 | 12 | public class TagsCollectorTests extends CollectorTestsBase { 13 | 14 | @Test 15 | public void testTagsCollecting() { 16 | Map tags = new HashMap(); 17 | tags.put("testKey1", "testValue1"); 18 | tags.put("testKey2", "testValue2"); 19 | TagsCollector collector = new TagsCollector(tags); 20 | collector.process(null, logger); 21 | 22 | JsonObject data = parseJsonReport(true).getAsJsonObject("tags"); 23 | assertNotNull(data); 24 | assertEquals(tags.get("testKey1"), data.get("testKey1").getAsString()); 25 | assertEquals(tags.get("testKey2"), data.get("testKey2").getAsString()); 26 | } 27 | } -------------------------------------------------------------------------------- /java/Java/src/test/java/com/devexpress/logify/alert/java/reportSender/ReportCreatingTests.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.java.reportSender; 2 | 3 | import com.devexpress.logify.alert.core.LogifyClientExceptionReport; 4 | import com.devexpress.logify.alert.java.TestLogifyAlert; 5 | import org.junit.After; 6 | import org.junit.Assert; 7 | import org.junit.Before; 8 | import org.junit.Test; 9 | 10 | public class ReportCreatingTests { 11 | private TestLogifyAlert client; 12 | 13 | @Before 14 | public void setUp() { 15 | client = new TestLogifyAlert(); 16 | } 17 | 18 | @After 19 | public void tearDown() { 20 | client = null; 21 | } 22 | 23 | @Test 24 | public void testReportCreating() { 25 | client.send(new NullPointerException()); 26 | LogifyClientExceptionReport report = client.getExceptionReportFromSender(); 27 | Assert.assertNotEquals(null, report); 28 | Assert.assertNotEquals(null, report.getReportString()); 29 | Assert.assertNotEquals("", report.getReportString()); 30 | } 31 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.UWP/Collectors/UWPMemoryCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Globalization; 4 | using System.IO; 5 | using System.Runtime.ExceptionServices; 6 | using System.Threading; 7 | using Windows.System; 8 | 9 | namespace DevExpress.Logify.Core.Internal { 10 | public class UWPMemoryCollector : IInfoCollector { 11 | public virtual void Process(Exception ex, ILogger logger) { 12 | logger.BeginWriteObject("memory"); 13 | try { 14 | logger.WriteValue("ram", MemoryManager.AppMemoryUsageLimit.ToString()); 15 | 16 | ulong free = MemoryManager.AppMemoryUsageLimit - MemoryManager.AppMemoryUsage; 17 | logger.WriteValue("free", free.ToString()); 18 | 19 | bool isLow = MemoryManager.AppMemoryUsageLevel == AppMemoryUsageLevel.OverLimit; 20 | logger.WriteValue("isLow", isLow.ToString()); 21 | } 22 | finally { 23 | logger.EndWriteObject("memory"); 24 | } 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /java/Core/src/test/java/com/devexpress/logify/alert/core/collectors/LogifyReportGenerationDateTimeCollectorTests.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.google.gson.JsonElement; 4 | import org.joda.time.DateTime; 5 | import org.junit.Test; 6 | 7 | import static org.junit.Assert.assertNotNull; 8 | import static org.junit.Assert.assertTrue; 9 | 10 | public class LogifyReportGenerationDateTimeCollectorTests extends CollectorTestsBase { 11 | 12 | @Test 13 | public void testReportGenerationDateTimeCollecting() { 14 | DateTime start = DateTime.now(); 15 | new LogifyReportGenerationDateTimeCollector().process(null, logger); 16 | DateTime end = DateTime.now(); 17 | 18 | JsonElement dateTime = parseJsonReport(true).get("logifyReportDateTimeUtc"); 19 | assertNotNull(dateTime); 20 | 21 | DateTime actual = new DateTime(dateTime.getAsString()); 22 | assertTrue(actual.isAfter(start) || actual.isEqual(start)); 23 | assertTrue(actual.isBefore(end) || actual.isEqual(end)); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /js/Logify.Alert.JS/test/collectors/breadcrumbsCollectorTest.js: -------------------------------------------------------------------------------- 1 | import breadcrumbsCollector from "../../src/collectors/breadcrumbsCollector.js"; 2 | 3 | var assert = require('chai').assert; 4 | 5 | describe('breadcrumbsCollector tests', function() { 6 | 7 | it('process with data test', function () { 8 | let mocOwner = new Object(); 9 | mocOwner._breadcrumbs = ["mocBreadcrumb"]; 10 | 11 | let collector = new breadcrumbsCollector(mocOwner); 12 | 13 | let reportData = new Object(); 14 | 15 | collector.process(null, reportData); 16 | 17 | assert.equal(1, reportData.breadcrumbs.length); 18 | assert.equal("mocBreadcrumb", reportData.breadcrumbs[0]); 19 | }); 20 | 21 | it('process without data test', function () { 22 | let mocOwner = new Object(); 23 | let collector = new breadcrumbsCollector(mocOwner); 24 | 25 | let reportData = new Object(); 26 | 27 | collector.process(null, reportData); 28 | 29 | assert.equal(undefined, reportData.breadcrumbs); 30 | }); 31 | }); -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.iOS/Logify.Alert.Xamarin.iOS.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $id$ 5 | $version$ 6 | $title$ 7 | $author$ 8 | $author$ 9 | https://logify.devexpress.com/Terms 10 | https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/dotnet/Logify.Alert.Xamarin.iOS 11 | https://s.gravatar.com/avatar/162c1a1348dc0973b3dbcf4768f2f593?s=512&r=g 12 | true 13 | $description$ 14 | 15 | Copyright (c) 2000-2018 Developer Express Inc. 16 | Logify Alert CrashReport Crash Exception Handler Xamarin.iOS 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/Attachment.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core; 2 | 3 | public class Attachment { 4 | private String name; 5 | private String mimeType; 6 | private byte[] content; 7 | 8 | public Attachment(String name, byte[] content) { 9 | this(name, "", content); 10 | } 11 | 12 | public Attachment(String name, String mimeType, byte[] content) { 13 | this.name = name; 14 | this.mimeType = mimeType; 15 | this.content = content; 16 | } 17 | 18 | public String getName() { 19 | return name; 20 | } 21 | 22 | public void setName(String name) { 23 | this.name = name; 24 | } 25 | 26 | public String getMimeType() { 27 | return mimeType; 28 | } 29 | 30 | public void setMimeType(String mimeType) { 31 | this.mimeType = mimeType; 32 | } 33 | 34 | public byte[] getContent() { 35 | return content; 36 | } 37 | 38 | public void setContent(byte[] content) { 39 | this.content = content; 40 | } 41 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.Android/Logify.Alert.Xamarin.Android.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $id$ 5 | $version$ 6 | $title$ 7 | $author$ 8 | $author$ 9 | https://logify.devexpress.com/Terms 10 | https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/dotnet/Logify.Alert.Xamarin.Android 11 | https://s.gravatar.com/avatar/162c1a1348dc0973b3dbcf4768f2f593?s=512&r=g 12 | true 13 | $description$ 14 | 15 | Copyright (c) 2000-2018 Developer Express Inc. 16 | Logify Alert CrashReport Crash Exception Handler Xamarin.Android 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.Android/Collectors/XamarinAndroidExceptionCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using DevExpress.Logify.Core; 3 | 4 | namespace DevExpress.Logify.Core.Internal { 5 | public class XamarinAndroidExceptionCollector : RootInfoCollector { 6 | public XamarinAndroidExceptionCollector(LogifyCollectorContext context) : base(context) { 7 | } 8 | 9 | protected override void RegisterCollectors(LogifyCollectorContext context) { 10 | Collectors.Add(new DevelopementPlatformCollector(Platform.XAMARIN_ANDROID)); // added in constuctor 11 | Collectors.Add(new XamarinApplicationCollector()); 12 | Collectors.Add(new XamarinDisplayCollector()); 13 | Collectors.Add(new XamarinMemoryCollector()); 14 | Collectors.Add(new XamarinDeviceInfoCollector()); 15 | Collectors.Add(new XamarinExternalStorageCollector()); 16 | Collectors.Add(new XamarinDroidOSCollector()); 17 | Collectors.Add(new XamarinNetworkCollector()); 18 | Collectors.Add(new DebuggerCollector()); 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /js/Logify.Alert.JS/src/collectors/customDataCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | import collectorBase from "./collectorBase.js"; 3 | 4 | export default class customDataCollector extends collectorBase { 5 | constructor(_owner) { 6 | super(_owner); 7 | } 8 | 9 | process(win, report, additionalCustomData) { 10 | super.process(win, report); 11 | 12 | if((this.owner == null) || (this.owner == undefined)) 13 | return; 14 | 15 | report.customData = this.mergeCustomData(this.owner.customData, additionalCustomData); 16 | } 17 | mergeCustomData(reportCustomData, additionalCustomData) { 18 | if (!reportCustomData) 19 | reportCustomData = {}; 20 | if (typeof additionalCustomData === "object") { 21 | return Object.assign({}, reportCustomData, additionalCustomData); 22 | } else if (typeof additionalCustomData === "string" || typeof additionalCustomData === "number") { 23 | return Object.assign({}, reportCustomData, { additionalData: additionalCustomData }); 24 | } 25 | return reportCustomData; 26 | } 27 | } -------------------------------------------------------------------------------- /js/Logify.Alert.NodeJS/src/collectors/platformEnvironmentCollector.js: -------------------------------------------------------------------------------- 1 | 'use strict' 2 | import collectorBase from "./collectorBase.js"; 3 | var os = require('os'); 4 | 5 | export default class platformEnvironmentCollector extends collectorBase { 6 | process(report) { 7 | super.process(report); 8 | 9 | if(report.platformEnvironment === undefined) 10 | report.platformEnvironment = new Object(); 11 | 12 | report.platformEnvironment.platform = os.platform(); 13 | report.platformEnvironment.cpus = this.getCpus(); 14 | report.platformEnvironment.architecture = os.arch(); 15 | report.platformEnvironment.freeMemory = os.freemem().toString(); 16 | report.platformEnvironment.totalMemory = os.totalmem().toString(); 17 | report.platformEnvironment.release = os.release(); 18 | } 19 | 20 | getCpus() { 21 | let cpus = os.cpus(); 22 | let result = []; 23 | for(let i = 0; i < cpus.length; i++) { 24 | result.push({ "model": cpus[i].model, "speed": cpus[i].speed.toString() }); 25 | } 26 | return result; 27 | } 28 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.UWP/Logify.Alert.UWP.nuspec.ok: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $id$ 5 | $version$ 6 | $title$ 7 | $author$ 8 | $author$ 9 | https://logify.devexpress.com/Terms 10 | https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/dotnet/Logify.Alert.UWP 11 | https://s.gravatar.com/avatar/162c1a1348dc0973b3dbcf4768f2f593?s=512&r=g 12 | true 13 | $description$ 14 | 15 | Copyright (c) 2000-2018 Developer Express Inc. 16 | Logify Alert CrashReport Crash Exception Handler UWP 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.iOS/Collectors/XamarinDisplayCollector.cs: -------------------------------------------------------------------------------- 1 | using Microsoft.Win32; 2 | using System; 3 | using System.Drawing; 4 | using System.Runtime.InteropServices; 5 | using UIKit; 6 | 7 | namespace DevExpress.Logify.Core.Internal { 8 | public class XamarinDisplayCollector : IInfoCollector { 9 | public virtual void Process(Exception ex, ILogger logger) { 10 | logger.BeginWriteObject("display"); 11 | try { 12 | UIScreen mainScreen = UIScreen.MainScreen; 13 | nfloat scale = mainScreen.Scale; 14 | nfloat width = mainScreen.Bounds.Width * scale; 15 | nfloat height = mainScreen.Bounds.Height * scale; 16 | logger.WriteValue("width", width.ToString()); 17 | logger.WriteValue("height", height.ToString()); 18 | //logger.WriteValue("dpiX", mainScreen. metrics.Xdpi.ToString()); 19 | //logger.WriteValue("dpiY", metrics.Ydpi.ToString()); 20 | } 21 | finally { 22 | logger.EndWriteObject("display"); 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /java/Core/src/test/java/com/devexpress/logify/alert/core/collectors/CustomDataCollectorTests.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.google.gson.JsonObject; 4 | import org.junit.Test; 5 | 6 | import java.util.HashMap; 7 | import java.util.Map; 8 | 9 | import static org.junit.Assert.assertEquals; 10 | import static org.junit.Assert.assertNotNull; 11 | 12 | public class CustomDataCollectorTests extends CollectorTestsBase { 13 | 14 | @Test 15 | public void testCustomDataCollecting() { 16 | Map customData = new HashMap(); 17 | customData.put("testKey1", "testValue1"); 18 | customData.put("testKey2", "testValue2"); 19 | CustomDataCollector collector = new CustomDataCollector(customData); 20 | collector.process(null, logger); 21 | 22 | JsonObject data = parseJsonReport(true).getAsJsonObject("customData"); 23 | assertNotNull(data); 24 | assertEquals(customData.get("testKey1"), data.get("testKey1").getAsString()); 25 | assertEquals(customData.get("testKey2"), data.get("testKey2").getAsString()); 26 | } 27 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Serilog/Logify.Alert.Serilog.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | $id$ 5 | $version$ 6 | $title$ 7 | $author$ 8 | $author$ 9 | https://logify.devexpress.com/Terms 10 | https://github.com/DevExpress/Logify.Alert.Clients/tree/develop/dotnet/Logify.Alert.Serilog 11 | https://s.gravatar.com/avatar/162c1a1348dc0973b3dbcf4768f2f593?s=512&r=g 12 | true 13 | $description$ 14 | 15 | Copyright (c) 2000-2018 Developer Express Inc. 16 | Logify Alert CrashReport Crash Exception Handler Serilog logging log tracing logfiles 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /java/Core/src/test/java/com/devexpress/logify/alert/core/collectors/PlatformCollectorTests.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.devexpress.logify.alert.core.Platform; 4 | import com.google.gson.JsonObject; 5 | import org.junit.Test; 6 | 7 | import static org.junit.Assert.assertEquals; 8 | 9 | public class PlatformCollectorTests extends CollectorTestsBase { 10 | 11 | private DevelopmentPlatformCollector collector; 12 | 13 | private void checkPlatform(Platform expected) { 14 | JsonObject platform = parseJsonReport(true); 15 | assertEquals(expected.toString(), platform.get("platform").getAsString()); 16 | } 17 | 18 | @Test 19 | public void testJavaPlatformCollecting() { 20 | collector = new DevelopmentPlatformCollector(Platform.java); 21 | collector.process(null, logger); 22 | checkPlatform(Platform.java); 23 | } 24 | 25 | @Test 26 | public void testAndroidPlatformCollecting() { 27 | collector = new DevelopmentPlatformCollector(Platform.android); 28 | collector.process(null, logger); 29 | checkPlatform(Platform.android); 30 | } 31 | } -------------------------------------------------------------------------------- /java/Core/src/main/java/com/devexpress/logify/alert/core/collectors/CultureBaseCollector.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core.collectors; 2 | 3 | import com.devexpress.logify.alert.core.logger.ILogger; 4 | import java.util.Locale; 5 | 6 | public class CultureBaseCollector implements IInfoCollector { 7 | final Locale locale; 8 | final String name; 9 | 10 | protected CultureBaseCollector(String name) { 11 | this.locale = Locale.getDefault(); 12 | this.name = name; 13 | } 14 | 15 | public CultureBaseCollector(Locale locale, String name) { 16 | this.locale = locale; 17 | this.name = name; 18 | } 19 | 20 | public void process(Throwable ex, ILogger logger) { 21 | logger.beginWriteObject(name); 22 | try { 23 | String isoName = locale.getLanguage() + "-" + locale.getCountry(); 24 | 25 | logger.writeValue("name", isoName); 26 | logger.writeValue("englishName", locale.getDisplayName(Locale.US)); 27 | logger.writeValue("displayName", locale.getDisplayName()); 28 | } finally { 29 | logger.endWriteObject(name); 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /js/Logify.Alert.JS/test/collectors/browserVersionCollectorTest.js: -------------------------------------------------------------------------------- 1 | import browserVersionCollector from "../../src/collectors/browserVersionCollector.js"; 2 | var assert = require('chai').assert; 3 | 4 | describe('browserVersionCollector tests', function() { 5 | 6 | it('process test', function () { 7 | let reportData = new Object(); 8 | 9 | let collector = new browserVersionCollector(); 10 | let win = new Object(); 11 | win.navigator = new Object(); 12 | win.navigator.appCodeName = "mocAppCodeName"; 13 | win.navigator.userAgent = "mocUserAgent"; 14 | win.navigator.appName = "mocAppName"; 15 | win.navigator.appVersion = "mocAppVersion"; 16 | win.navigator.language = "mocLanguage"; 17 | 18 | collector.process(win, reportData); 19 | 20 | assert.equal("mocAppCodeName", reportData.browser.appCodeName); 21 | assert.equal("mocUserAgent", reportData.browser.userAgent); 22 | assert.equal("mocAppName", reportData.browser.appName); 23 | assert.equal("mocAppVersion", reportData.browser.appVersion); 24 | assert.equal("mocLanguage", reportData.browser.language); 25 | }); 26 | }); 27 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.UWP/Collectors/UWPApplicationCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using DevExpress.Logify.Core; 3 | using System.Reflection; 4 | using Windows.ApplicationModel; 5 | 6 | namespace DevExpress.Logify.Core.Internal { 7 | class UWPApplicationCollector : ApplicationCollector { 8 | public override string AppName { 9 | get { 10 | try { 11 | return Package.Current.DisplayName; 12 | } 13 | catch { 14 | return String.Empty; 15 | } 16 | } 17 | } 18 | public override string AppVersion { 19 | get { 20 | try { 21 | PackageVersion version = Package.Current.Id.Version; 22 | return string.Format("{0}.{1}.{2}.{3}", version.Major, version.Minor, version.Build, version.Revision); 23 | } 24 | catch { 25 | return String.Empty; 26 | } 27 | } 28 | } 29 | 30 | public override string UserId { get { return String.Empty; } } 31 | 32 | 33 | public UWPApplicationCollector() : base() {} 34 | } 35 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Wpf/Collectors/WPFCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using DevExpress.Logify.Core; 3 | 4 | namespace DevExpress.Logify.Core.Internal { 5 | public class WPFExceptionCollector : RootInfoCollector { 6 | public WPFExceptionCollector(LogifyCollectorContext context) : base(context) { 7 | } 8 | 9 | 10 | protected override void RegisterCollectors(LogifyCollectorContext context) { 11 | if (context.Config != null && context.Config.CollectMiniDump) 12 | Collectors.Add(new MiniDumpCollector()); 13 | Collectors.Add(new DevelopementPlatformCollector(Platform.WPF)); 14 | Collectors.Add(new WpfApplicationCollector()); 15 | 16 | //Spies.Add(new AppDispatcherCollector()); 17 | //Spies.Add(new DispatcherCollector()); 18 | //Spies.Add(new TaskShedulerCollector()); 19 | 20 | Collectors.Add(new WPFEnvironmentCollector(context)); // Environment info should go first, it may be used for further exception processing 21 | if (context.Config != null && context.Config.CollectMiniDump) 22 | Collectors.Add(new DeferredMiniDumpCollector()); 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /java/Core/src/test/java/com/devexpress/logify/alert/core/Base64EncoderHelper.java: -------------------------------------------------------------------------------- 1 | package com.devexpress.logify.alert.core; 2 | 3 | import org.apache.commons.codec.binary.Base64; 4 | import java.nio.charset.Charset; 5 | 6 | //support older versions of Apache Commons Codec library 7 | public class Base64EncoderHelper { 8 | public static String encodeBase64String(byte[] binaryData) { 9 | return newStringUtf8(Base64.encodeBase64(binaryData, false)); 10 | } 11 | 12 | private static String newStringUtf8(byte[] bytes) { 13 | return newString(bytes, Charset.forName("UTF-8")); 14 | } 15 | 16 | private static String newString(byte[] bytes, Charset charset) { 17 | return bytes == null?null:new String(bytes, charset); 18 | } 19 | 20 | public static byte[] decodeBase64(String base64String) { 21 | return Base64.decodeBase64(getBytesUtf8(base64String)); 22 | } 23 | 24 | public static byte[] getBytesUtf8(String string) { 25 | return getBytes(string, Charset.forName("UTF-8")); 26 | } 27 | 28 | private static byte[] getBytes(String string, Charset charset) { 29 | return string == null?null:string.getBytes(charset); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Collectors/DesktopEnvironmentCollector.cs: -------------------------------------------------------------------------------- 1 | namespace DevExpress.Logify.Core.Internal { 2 | public class DesktopEnvironmentCollector : CompositeInfoCollector { 3 | public DesktopEnvironmentCollector(LogifyCollectorContext context) 4 | : base(context) { 5 | } 6 | 7 | protected override void RegisterCollectors(LogifyCollectorContext context) { 8 | Collectors.Add(new OperatingSystemCollector()); 9 | Collectors.Add(new VirtualMachineCollector()); 10 | Collectors.Add(new DebuggerCollector()); 11 | Collectors.Add(new MemoryCollector(context)); 12 | Collectors.Add(new DisplayCollector()); 13 | Collectors.Add(new Win32GuiResourcesCollector()); 14 | Collectors.Add(new CurrentCultureCollector()); 15 | Collectors.Add(new CurrentUICultureCollector()); 16 | Collectors.Add(new FrameworkVersionsCollector()); 17 | Collectors.Add(new EnvironmentCollector()); 18 | if (context.Config != null && context.Config.CollectScreenshot) 19 | Collectors.Add(new ScreenshotCollector()); 20 | //etc 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.iOS/Collectors/XamarinMemoryCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Globalization; 4 | using System.IO; 5 | using System.Runtime.ExceptionServices; 6 | using System.Threading; 7 | using Foundation; 8 | 9 | namespace DevExpress.Logify.Core.Internal { 10 | public class XamarinMemoryCollector : IInfoCollector { 11 | public virtual void Process(Exception ex, ILogger logger) { 12 | logger.BeginWriteObject("memory"); 13 | try { 14 | long allocated = System.GC.GetTotalMemory(false); 15 | long total = Convert.ToInt64(NSProcessInfo.ProcessInfo.PhysicalMemory); 16 | long free = total - allocated; 17 | 18 | logger.WriteValue("ram", NSProcessInfo.ProcessInfo.PhysicalMemory.ToString()); 19 | logger.WriteValue("free", free.ToString()); 20 | //logger.WriteValue("isLow", memoryInfo.LowMemory.ToString()); 21 | //logger.WriteValue("lowTreshold", memoryInfo.Threshold.ToString()); 22 | } 23 | finally { 24 | logger.EndWriteObject("memory"); 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Collectors/GuiResourcesCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Runtime.ExceptionServices; 4 | using System.Runtime.InteropServices; 5 | 6 | namespace DevExpress.Logify.Core.Internal { 7 | public class Win32GuiResourcesCollector : IInfoCollector { 8 | [HandleProcessCorruptedStateExceptions] 9 | public virtual void Process(Exception ex, ILogger logger) { 10 | logger.BeginWriteObject("win32GuiResources"); 11 | try { 12 | const int guiResourceGdiObjects = 0; 13 | const int guiResourceUserObjects = 1; 14 | IntPtr handle = System.Diagnostics.Process.GetCurrentProcess().Handle; 15 | logger.WriteValue("gdiHandleCount", GetGuiResources(handle, guiResourceGdiObjects).ToString()); 16 | logger.WriteValue("userHandleCount", GetGuiResources(handle, guiResourceUserObjects).ToString()); 17 | } 18 | finally { 19 | logger.EndWriteObject("win32GuiResources"); 20 | } 21 | } 22 | 23 | [DllImport("User32")] 24 | extern static int GetGuiResources(IntPtr hProcess, int uiFlags); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Wpf/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace DevExpress.Logify.WPF.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Tests/Collectors/OperatingSystemCollectorTests.cs: -------------------------------------------------------------------------------- 1 | #if DEBUG 2 | using System; 3 | using NUnit.Framework; 4 | 5 | namespace DevExpress.Logify.Core.Internal.Tests { 6 | [TestFixture] 7 | public class OperatingSystemCollectorTests : CollectorTestsBase { 8 | OperatingSystemCollector collector; 9 | [SetUp] 10 | public void Setup() { 11 | SetupCore(); 12 | this.collector = new OperatingSystemCollector(); 13 | } 14 | [TearDown] 15 | public void TearDown() { 16 | TearDownCore(); 17 | } 18 | 19 | [Test] 20 | public void BeginWriteObject() { 21 | collector.Process(null, Logger); 22 | string expected = String.Format( 23 | @"""os"":{{" + "\r\n" + 24 | @"""platform"":""{0}""," + "\r\n" + 25 | @"""servicePack"":""{1}""," + "\r\n" + 26 | @"""version"":""{2}""," + "\r\n" + 27 | @"""is64bit"":{3}" + "\r\n" + 28 | @"}}" + "\r\n", 29 | Environment.OSVersion.Platform, 30 | Environment.OSVersion.ServicePack, 31 | Environment.OSVersion.Version, 32 | Environment.Is64BitOperatingSystem.ToString().ToLowerInvariant() 33 | ); 34 | Assert.AreEqual(expected, Content); 35 | } 36 | } 37 | } 38 | #endif -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Win/Collectors/WinFormsEnvironmentCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using DevExpress.Logify.Core; 4 | 5 | namespace DevExpress.Logify.Core.Internal { 6 | public class WinFormsEnvironmentCollector : DesktopEnvironmentCollector { 7 | public WinFormsEnvironmentCollector(LogifyCollectorContext context) 8 | : base(context) { 9 | } 10 | protected override void RegisterCollectors(LogifyCollectorContext context) { 11 | base.RegisterCollectors(context); 12 | ExtendCollectors(context); 13 | } 14 | 15 | void ExtendCollectors(LogifyCollectorContext context) { 16 | ExtendMemoryCollector(context); 17 | } 18 | 19 | void ExtendMemoryCollector(LogifyCollectorContext context) { 20 | MemoryCollector collector = Collectors.FirstOrDefault(c => c.GetType() == typeof(MemoryCollector)) as MemoryCollector; 21 | if (collector != null) { 22 | collector.Collectors.Add(new AvailableVirtulaMemoryCollector()); 23 | } 24 | } 25 | 26 | //protected override void RegisterCollectors() { 27 | // base.RegisterCollectors(); 28 | // //etc 29 | //} 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Collectors/LogifyAppInfoCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace DevExpress.Logify.Core.Internal { 4 | public interface ILogifyAppInfo { 5 | string AppName { get; } 6 | string AppVersion { get; } 7 | string UserId { get; } 8 | } 9 | public class LogifyAppInfoCollector : IInfoCollector { 10 | readonly ILogifyAppInfo appInfo; 11 | 12 | public LogifyAppInfoCollector(ILogifyAppInfo appInfo) { 13 | this.appInfo = appInfo; 14 | } 15 | 16 | public string AppName { get; set; } 17 | public string AppVersion { get; set; } 18 | public string UserId { get; set; } 19 | 20 | public virtual void Process(Exception ex, ILogger logger) { 21 | logger.BeginWriteObject("logifyApp"); 22 | try { 23 | logger.WriteValue("name", String.IsNullOrEmpty(AppName) ? appInfo.AppName : AppName); 24 | logger.WriteValue("version", String.IsNullOrEmpty(AppVersion) ? appInfo.AppVersion : AppVersion); 25 | logger.WriteValue("userId", String.IsNullOrEmpty(UserId) ? appInfo.UserId : UserId); 26 | } 27 | finally { 28 | logger.EndWriteObject("logifyApp"); 29 | } 30 | } 31 | } 32 | } -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Serilog/LogifyAlertSink.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Serilog; 3 | using Serilog.Core; 4 | using Serilog.Events; 5 | using Serilog.Configuration; 6 | using DevExpress.Logify.Alert.Serilog; 7 | using DevExpress.Logify.Core; 8 | 9 | namespace DevExpress.Logify.Alert.Serilog { 10 | public class LogifyAlertSink : ILogEventSink { 11 | public void Emit(LogEvent logEvent) { 12 | try { 13 | if (logEvent != null && logEvent.Exception != null) { 14 | if (LogifyClientBase.Instance != null) 15 | LogifyClientBase.Instance.Send(logEvent.Exception); 16 | } 17 | } 18 | catch { 19 | } 20 | } 21 | } 22 | } 23 | 24 | namespace Serilog { 25 | public static class LogifyAlertSinkExtensions { 26 | public static LoggerConfiguration LogifyAlert(this LoggerSinkConfiguration sinkConfiguration, LogEventLevel restrictedToMinimumLevel = LogEventLevel.Verbose, LoggingLevelSwitch levelSwitch = null) { 27 | if (sinkConfiguration == null) 28 | throw new ArgumentNullException("sinkConfiguration"); 29 | return sinkConfiguration.Sink(new LogifyAlertSink(), restrictedToMinimumLevel, levelSwitch); 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Core/Collectors/CompositeInfoCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Runtime.ExceptionServices; 4 | 5 | namespace DevExpress.Logify.Core.Internal { 6 | public abstract class CompositeInfoCollector : IInfoCollector { 7 | readonly List collectors = new List(); 8 | 9 | public IList Collectors { get { return collectors; } } 10 | 11 | protected CompositeInfoCollector(LogifyCollectorContext context) { 12 | RegisterCollectors(context); 13 | } 14 | 15 | [HandleProcessCorruptedStateExceptions] 16 | public virtual void Process(Exception ex, ILogger logger) { 17 | int count = Collectors.Count; 18 | for (int i = 0; i < count; i++) { 19 | try { 20 | Collectors[i].Process(ex, logger); 21 | } 22 | catch { 23 | } 24 | } 25 | } 26 | 27 | protected abstract void RegisterCollectors(LogifyCollectorContext context); 28 | } 29 | 30 | public abstract class RootInfoCollector : CompositeInfoCollector { 31 | protected RootInfoCollector(LogifyCollectorContext context) : base(context) { 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Xamarin.Android/Collectors/XamarinMemoryCollector.cs: -------------------------------------------------------------------------------- 1 | using Android.App; 2 | using Android.Content; 3 | using System; 4 | using System.Diagnostics; 5 | using System.Globalization; 6 | using System.IO; 7 | using System.Runtime.ExceptionServices; 8 | using System.Threading; 9 | 10 | namespace DevExpress.Logify.Core.Internal { 11 | public class XamarinMemoryCollector : IInfoCollector { 12 | public virtual void Process(Exception ex, ILogger logger) { 13 | logger.BeginWriteObject("memory"); 14 | try { 15 | ActivityManager activityManager = Application.Context.GetSystemService(Activity.ActivityService) as ActivityManager; 16 | ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo(); 17 | activityManager.GetMemoryInfo(memoryInfo); 18 | logger.WriteValue("ram", memoryInfo.TotalMem.ToString()); 19 | logger.WriteValue("free", memoryInfo.AvailMem.ToString()); 20 | logger.WriteValue("isLow", memoryInfo.LowMemory.ToString()); 21 | logger.WriteValue("lowTreshold", memoryInfo.Threshold.ToString()); 22 | } 23 | finally { 24 | logger.EndWriteObject("memory"); 25 | } 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /dotnet/Logify.Alert.Wpf/ReportSendProgressForm.xaml: -------------------------------------------------------------------------------- 1 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 |