From 97327f346a6fad8ea5a873862aec9d560dde2bb9 Mon Sep 17 00:00:00 2001 From: chopwave Date: Sun, 22 Mar 2020 09:12:04 +0900 Subject: [PATCH] new commit --- Class1.cs | 226 ++ NLog.config | 67 + NLog.xsd | 3556 +++++++++++++++++++++++ NlogCL-AddIn.dna | 23 + NlogCL.csproj | 108 + NlogCL.csproj.user | 8 + NlogCL.sln | 25 + Properties/AssemblyInfo.cs | 36 + Properties/ExcelDna.Build.props | 70 + app.config | 7 + packages.config | 8 + sample/Sheet3.xlsm | Bin 0 -> 17136 bytes sample/file.txt | 95 + sql/Logging To A Database With NLog.url | 5 + sql/cf.mysql_debugger.url | 5 + sql/cprocedure.sql | 44 + sql/ctable.sql | 30 + sql/nlog_database.url | 5 + sql/select.sql | 11 + 19 files changed, 4329 insertions(+) create mode 100644 Class1.cs create mode 100644 NLog.config create mode 100644 NLog.xsd create mode 100644 NlogCL-AddIn.dna create mode 100644 NlogCL.csproj create mode 100644 NlogCL.csproj.user create mode 100644 NlogCL.sln create mode 100644 Properties/AssemblyInfo.cs create mode 100644 Properties/ExcelDna.Build.props create mode 100644 app.config create mode 100644 packages.config create mode 100644 sample/Sheet3.xlsm create mode 100644 sample/file.txt create mode 100644 sql/Logging To A Database With NLog.url create mode 100644 sql/cf.mysql_debugger.url create mode 100644 sql/cprocedure.sql create mode 100644 sql/ctable.sql create mode 100644 sql/nlog_database.url create mode 100644 sql/select.sql diff --git a/Class1.cs b/Class1.cs new file mode 100644 index 0000000..e43c1c2 --- /dev/null +++ b/Class1.cs @@ -0,0 +1,226 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Runtime.InteropServices; +using System.Windows.Forms; +using ExcelDna.ComInterop; +using ExcelDna.Integration; +using NLog; + +namespace NlogCL +{ + //VBA関数 + [System.Runtime.InteropServices.ComVisible(true)] + [ClassInterface(ClassInterfaceType.AutoDual)] + public class ComLibrary + { + static NLog.Logger logger = LogManager.GetCurrentClassLogger(); + static NLog.Logger logger2 = LogManager.GetLogger("databaseLogger"); + + public string ComLibraryHello() + { + return "Hello from NlogCL.ComLibrary"; + } + + public double Add(double x, double y) + { + return x + y; + } + public int InfoLog(string slog) + { + logger.Info("Hello World " + slog + ";"); + + Exception ex = new Exception(); + logger.Error(ex, "Whoops!"); + + logger.Info(slog); + logger2.Info(slog); + + return 0; + } + public int ErrLog(string slog) + { + try + { + int zero = 0; + int result = 5 / zero; //ゼロで割り算して異常終了を発生させる + } + catch (DivideByZeroException ex) + { + // add custom message and pass in the exception + logger.Error(ex, "Whoops! " + slog + ";"); + logger2.Error(ex, "Whoops! " + slog + ";"); + } + return 0; + } + + } + + [System.Runtime.InteropServices.ComVisible(false)] + public class ExcelAddin : IExcelAddIn + { + public void AutoOpen() + { + ComServer.DllRegisterServer(); + } + public void AutoClose() + { + ComServer.DllUnregisterServer(); + } + } + + public static class Functions + { + static NLog.Logger logger = LogManager.GetCurrentClassLogger(); + static NLog.Logger logger2 = LogManager.GetLogger("databaseLogger"); + + [ExcelFunction(Description = "TestHello .NET function")] + public static object TestHello() + { + return "Hello from NlogCL!"; + } + + [ExcelFunction(Description = "SayHello .NET function")] + public static string SayHello(string name) + { + return "Hello " + name; + } + + [ExcelFunction(Description = "PrintInfoLog .NET function")] + public static void PrintInfoLog(string slog) + { + logger.Info("Hello World " + slog + ";"); + + Exception ex = new Exception(); + logger.Error(ex, "Whoops!"); + + logger.Info(slog); + logger2.Info(slog); + + return; + } + + [ExcelFunction(Description = "PrintErrLog .NET function")] + public static void PrintErrLog(string slog) + { + try + { + int zero = 0; + int result = 5 / zero; //ゼロで割り算して異常終了を発生させる + } + catch (DivideByZeroException ex) + { + // add custom message and pass in the exception + logger.Error(ex, "Whoops! " + slog + ";"); + logger2.Error(ex, "Whoops! " + slog + ";"); + } + return; + } + + [ExcelFunction(Description = "MyMethod1 .NET function")] + public static void MyMethod1() + { + //各ログレベルの出力サンプル + logger.Trace("Sample trace message"); + logger.Debug("Sample debug message"); + logger.Info("Sample informational message"); + logger.Warn("Sample warning message"); + logger.Error("Sample error message"); + logger.Fatal("Sample fatal error message"); + + // Exseption情報を出力する例 + try + { + //またはLog()メソッドにログレベルとメッセージを渡すことで出力することが可能 + logger.Log(LogLevel.Info, "Sample informational message"); + } + catch (Exception ex) + { + logger.Error(ex, "ow noos!"); // render the exception with ${exception} + throw; + } + return; + } + + [ExcelFunction(Description = "DisplayMenu .NET function")] + [ExcelCommand(MenuName = "AddIn", MenuText = "Worksheet")] + public static void DisplayMenu() + { + + // 新規作成したワークシートがアクティブになる + MessageBox.Show("ワークシートを2枚(Sheet2, Sheet3)、新規作成します"); + XlCall.Excel(XlCall.xlcWorkbookInsert); + XlCall.Excel(XlCall.xlcWorkbookInsert); + + + // 存在しないワークシート名を指定するとエラーになる + MessageBox.Show("ワークシート名を Sheet1 から hoge へ変更します"); + XlCall.Excel(XlCall.xlcWorkbookName, "Sheet1", "hoge"); + + + MessageBox.Show("アクティブになっているワークシート(Sheet3)を削除します"); + XlCall.Excel(XlCall.xlcWorkbookDelete); + + + // COM経由でワークシートの数を計算する(ワークシートの移動で使う) + // COM経由以外では、Excelのワークシート数を取得する方法がわからなかった + dynamic app = ExcelDnaUtil.Application; + var count = app.Worksheets.Count; + + + MessageBox.Show("Sheet2を一番右へ移動します"); + XlCall.Excel(XlCall.xlcWorkbookMove, "Sheet2", "test.xlsx", count); + + + // 一番左のワークシートの番号は 1 + MessageBox.Show("Sheet2を一番左へ移動します"); + XlCall.Excel(XlCall.xlcWorkbookMove, "Sheet2", "test.xlsx", 1); + + + // 一番右に新規作成するので、現在の枚数に +1 しておく + MessageBox.Show("Sheet2を、ブック内の一番右にコピーして移動します"); + XlCall.Excel(XlCall.xlcWorkbookCopy, "Sheet2", "test.xlsx", count + 1); + + + MessageBox.Show("Sheet2を選択してアクティブにします"); + XlCall.Excel(XlCall.xlcWorkbookActivate, "Sheet2"); + + + MessageBox.Show("Sheet2を非表示にします"); + XlCall.Excel(XlCall.xlcWorkbookHide, "Sheet2"); + + + MessageBox.Show("Sheet2を再表示します"); + XlCall.Excel(XlCall.xlcWorkbookUnhide, "Sheet2"); + + + // 左上が「0, 0」で始まる + MessageBox.Show("アクティブなワークシートのセルに値を設定します"); + var hoge = new ExcelReference(0, 0).SetValue("fuga"); + var fuga = new ExcelReference(5, 5).SetValue("piyo"); + + + // セルの値を取得する + var piyo = new ExcelReference(0, 0).GetValue().ToString(); + MessageBox.Show("セルA1の値は " + piyo + " です"); + + // セルの選択:R1C1形式で記述する必要あり、選択しているセルの相対参照でもある + // 第一引数は範囲、第二引数は範囲内でアクティブになっているセル + // See: http://www.moug.net/tech/exvba/0050098.html + MessageBox.Show("セルを範囲選択します"); + XlCall.Excel(XlCall.xlcSelect, "R[0]C[0]:R[4]C[4]", "R[0]C[0]"); + + + MessageBox.Show("選択範囲内のセルの値をクリアします"); + XlCall.Excel(XlCall.xlcClear); + + + MessageBox.Show("全シートを選択します"); + XlCall.Excel(XlCall.xlcSelectAll); + + return; + } + } +} diff --git a/NLog.config b/NLog.config new file mode 100644 index 0000000..c059242 --- /dev/null +++ b/NLog.config @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/NLog.xsd b/NLog.xsd new file mode 100644 index 0000000..98cb254 --- /dev/null +++ b/NLog.xsd @@ -0,0 +1,3556 @@ + + + + + + + + + + + + + + + Watch config file for changes and reload automatically. + + + + + Print internal NLog messages to the console. Default value is: false + + + + + Print internal NLog messages to the console error output. Default value is: false + + + + + Write internal NLog messages to the specified file. + + + + + Log level threshold for internal log messages. Default value is: Info. + + + + + Global log level threshold for application log messages. Messages below this level won't be logged. + + + + + Throw an exception when there is an internal error. Default value is: false. Not recommend to set to true in production! + + + + + Throw an exception when there is a configuration error. If not set, determined by throwExceptions. + + + + + Gets or sets a value indicating whether Variables should be kept on configuration reload. Default value is: false. + + + + + Write internal NLog messages to the System.Diagnostics.Trace. Default value is: false. + + + + + Write timestamps for internal NLog messages. Default value is: true. + + + + + Use InvariantCulture as default culture instead of CurrentCulture. Default value is: false. + + + + + Perform message template parsing and formatting of LogEvent messages (true = Always, false = Never, empty = Auto Detect). Default value is: empty. + + + + + + + + + + + + + + Make all targets within this section asynchronous (creates additional threads but the calling thread isn't blocked by any target writes). + + + + + + + + + + + + + + + + + Prefix for targets/layout renderers/filters/conditions loaded from this assembly. + + + + + Load NLog extensions from the specified file (*.dll) + + + + + Load NLog extensions from the specified assembly. Assembly name should be fully qualified. + + + + + + + + + + Name of the logger. May include wildcard characters ('*' or '?'). + + + + + Comma separated list of levels that this rule matches. + + + + + Minimum level that this rule matches. + + + + + Maximum level that this rule matches. + + + + + Level that this rule matches. + + + + + Comma separated list of target names. + + + + + Ignore further rules if this one matches. + + + + + Rule identifier to allow rule lookup with Configuration.FindRuleByName and Configuration.RemoveRuleByName. + + + + + + + + + + + + + + + Default action if none of the filters match. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the file to be included. You could use * wildcard. The name is relative to the name of the current config file. + + + + + Ignore any errors in the include file. + + + + + + + + Variable value. Note, the 'value' attribute has precedence over this one. + + + + + + Variable name. + + + + + Variable value. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Number of log events that should be processed in a batch by the lazy writer thread. + + + + + Whether to use the locking queue, instead of a lock-free concurrent queue The locking queue is less concurrent when many logger threads, but reduces memory allocation + + + + + Limit of full s to write before yielding into Performance is better when writing many small batches, than writing a single large batch + + + + + Action to be taken when the lazy writer thread request queue count exceeds the set limit. + + + + + Limit on the number of requests in the lazy writer thread request queue. + + + + + Time in milliseconds to sleep between batches. (1 or less means trigger on new activity) + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + + + + Delay the flush until the LogEvent has been confirmed as written + + + + + Condition expression. Log events who meet this condition will cause a flush on the wrapped target. + + + + + Name of the target. + + + + + Only flush when LogEvent matches condition. Ignore explicit-flush, config-reload-flush and shutdown-flush + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Number of log events to be buffered. + + + + + Timeout (in milliseconds) after which the contents of buffer will be flushed if there's no write in the specified period of time. Use -1 to disable timed flushes. + + + + + Action to take if the buffer overflows. + + + + + Indicates whether to use sliding timeout. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Encoding to be used. + + + + + Instance of that is used to format log messages. + + + + + End of line value if a newline is appended at the end of log message . + + + + + Maximum message size in bytes. + + + + + Indicates whether to append newline at the end of log message. + + + + + Network address. + + + + + Size of the connection cache (number of connections which are kept alive). + + + + + Indicates whether to keep connection open whenever possible. + + + + + Maximum current connections. 0 = no maximum. + + + + + Action that should be taken if the will be more connections than . + + + + + Action that should be taken if the message is larger than maxMessageSize. + + + + + Get or set the SSL/TLS protocols. Default no SSL/TLS is used. Currently only implemented for TCP. + + + + + Maximum queue size. + + + + + The number of seconds a connection will remain idle before the first keep-alive probe is sent + + + + + NDLC item separator. + + + + + Indicates whether to include source info (file name and line number) in the information sent over the network. + + + + + Renderer for log4j:event logger-xml-attribute (Default ${logger}) + + + + + Indicates whether to include NLog-specific extensions to log4j schema. + + + + + Indicates whether to include contents of the stack. + + + + + Indicates whether to include stack contents. + + + + + Indicates whether to include dictionary contents. + + + + + Indicates whether to include dictionary contents. + + + + + Indicates whether to include call site (class and method name) in the information sent over the network. + + + + + Option to include all properties from the log events + + + + + AppInfo field. By default it's the friendly name of the current AppDomain. + + + + + NDC item separator. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Layout that should be use to calculate the value for the parameter. + + + + + Viewer parameter name. + + + + + Whether an attribute with empty value should be included in the output + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Text to be rendered. + + + + + Header. + + + + + Footer. + + + + + Indicates whether to auto-check if the console is available. - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App) + + + + + Enables output using ANSI Color Codes + + + + + The encoding for writing messages to the . + + + + + Indicates whether the error stream (stderr) should be used instead of the output stream (stdout). + + + + + Indicates whether to auto-check if the console has been redirected to file - Disables coloring logic when System.Console.IsOutputRedirected = true + + + + + Indicates whether to use default row highlighting rules. + + + + + Indicates whether to auto-flush after + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Condition that must be met in order to set the specified foreground and background color. + + + + + Background color. + + + + + Foreground color. + + + + + + + + + + + + + + + + Compile the ? This can improve the performance, but at the costs of more memory usage. If false, the Regex Cache is used. + + + + + Indicates whether to ignore case when comparing texts. + + + + + Regular expression to be matched. You must specify either text or regex. + + + + + Text to be matched. You must specify either text or regex. + + + + + Indicates whether to match whole words only. + + + + + Background color. + + + + + Foreground color. + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Text to be rendered. + + + + + Header. + + + + + Footer. + + + + + Indicates whether to auto-check if the console is available - Disables console writing if Environment.UserInteractive = False (Windows Service) - Disables console writing if Console Standard Input is not available (Non-Console-App) + + + + + The encoding for writing messages to the . + + + + + Indicates whether to send the log messages to the standard error instead of the standard output. + + + + + Indicates whether to auto-flush after + + + + + Whether to enable batch writing using char[]-buffers, instead of using + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Obsolete - value will be ignored! The logging code always runs outside of transaction. Gets or sets a value indicating whether to use database transactions. Some data providers require this. + + + + + Database user name. If the ConnectionString is not provided this value will be used to construct the "User ID=" part of the connection string. + + + + + Name of the database provider. + + + + + Database password. If the ConnectionString is not provided this value will be used to construct the "Password=" part of the connection string. + + + + + Indicates whether to keep the database connection open between the log events. + + + + + Database name. If the ConnectionString is not provided this value will be used to construct the "Database=" part of the connection string. + + + + + Name of the connection string (as specified in <connectionStrings> configuration section. + + + + + Connection string. When provided, it overrides the values specified in DBHost, DBUserName, DBPassword, DBDatabase. + + + + + Database host name. If the ConnectionString is not provided this value will be used to construct the "Server=" part of the connection string. + + + + + Connection string using for installation and uninstallation. If not provided, regular ConnectionString is being used. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + Text of the SQL command to be run on each log level. + + + + + Type of the SQL command to be run on each log level. + + + + + + + + + + + + + + + + + + + + + + + Type of the command. + + + + + Connection string to run the command against. If not provided, connection string from the target is used. + + + + + Indicates whether to ignore failures. + + + + + Command text. + + + + + + + + + + + + + + + + + + Database parameter name. + + + + + Layout that should be use to calculate the value for the parameter. + + + + + Database parameter DbType. + + + + + Database parameter size. + + + + + Database parameter precision. + + + + + Database parameter scale. + + + + + Type of the parameter. + + + + + Convert format of the database parameter value . + + + + + Culture used for parsing parameter string-value for type-conversion + + + + + + + + + + + + + + + + Name of the target. + + + + + Text to be rendered. + + + + + Header. + + + + + Footer. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + Name of the target. + + + + + Layout used to format log messages. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Layout used to format log messages. + + + + + Layout that renders event Category. + + + + + Optional entry type. When not set, or when not convertible to then determined by + + + + + Layout that renders event ID. + + + + + Name of the Event Log to write to. This can be System, Application or any user-defined name. + + + + + Name of the machine on which Event Log service is running. + + + + + Maximum Event log size in kilobytes. + + + + + Message length limit to write to the Event Log. + + + + + Value to be used as the event Source. + + + + + Action to take if the message is larger than the option. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Indicates whether to return to the first target after any successful write. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Text to be rendered. + + + + + Header. + + + + + Footer. + + + + + File encoding. + + + + + Line ending mode. + + + + + Indicates whether to compress archive files into the zip archive format. + + + + + Way file archives are numbered. + + + + + Name of the file to be used for an archive. + + + + + Is the an absolute or relative path? + + + + + Indicates whether to automatically archive log files every time the specified time passes. + + + + + Size in bytes above which log files will be automatically archived. Warning: combining this with isn't supported. We cannot create multiple archive files, if they should have the same name. Choose: + + + + + Maximum number of archive files that should be kept. + + + + + Indicates whether the footer should be written only when the file is archived. + + + + + Maximum number of log file names that should be stored as existing. + + + + + Is the an absolute or relative path? + + + + + Gets or set a value indicating whether a managed file stream is forced, instead of using the native implementation. + + + + + Indicates whether file creation calls should be synchronized by a system global mutex. + + + + + Indicates whether to replace file contents on each write instead of appending log message at the end. + + + + + Indicates whether to write BOM (byte order mark) in created files + + + + + Indicates whether to enable log file(s) to be deleted. + + + + + Name of the file to write to. + + + + + Value specifying the date format to use when archiving files. + + + + + Indicates whether to archive old log file on startup. + + + + + Cleanup invalid values in a filename, e.g. slashes in a filename. If set to true, this can impact the performance of massive writes. If set to false, nothing gets written when the filename is wrong. + + + + + Indicates whether to create directories if they do not exist. + + + + + Indicates whether to delete old log file on startup. + + + + + File attributes (Windows only). + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + Indicates whether concurrent writes to the log file by multiple processes on different network hosts. + + + + + Maximum number of seconds that files are kept open. If this number is negative the files are not automatically closed after a period of inactivity. + + + + + Number of files to be kept open. Setting this to a higher value may improve performance in a situation where a single File target is writing to many files (such as splitting by level or by logger). + + + + + Indicates whether to keep log file open instead of opening and closing it on each logging event. + + + + + Whether or not this target should just discard all data that its asked to write. Mostly used for when testing NLog Stack except final write + + + + + Indicates whether concurrent writes to the log file by multiple processes on the same host. + + + + + Number of times the write is appended on the file before NLog discards the log message. + + + + + Delay in milliseconds to wait before attempting to write to the file again. + + + + + Log file buffer size in bytes. + + + + + Maximum number of seconds before open files are flushed. If this number is negative or zero the files are not flushed by timer. + + + + + Indicates whether to automatically flush the file buffers after each log message. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Condition expression. Log events who meet this condition will be forwarded to the wrapped target. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Windows domain name to change context to. + + + + + Required impersonation level. + + + + + Type of the logon provider. + + + + + Logon Type. + + + + + User account password. + + + + + Indicates whether to revert to the credentials of the process instead of impersonating another user. + + + + + Username to change context to. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Interval in which messages will be written up to the number of messages. + + + + + Maximum allowed number of messages written per . + + + + + Name of the target. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Endpoint address. + + + + + Name of the endpoint configuration in WCF configuration file. + + + + + Indicates whether to use a WCF service contract that is one way (fire and forget) or two way (request-reply) + + + + + Client ID. + + + + + Indicates whether to include per-event properties in the payload sent to the server. + + + + + Indicates whether to use binary message encoding. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + Layout that should be use to calculate the value for the parameter. + + + + + Name of the parameter. + + + + + Type of the parameter. + + + + + Type of the parameter. Obsolete alias for + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Text to be rendered. + + + + + Header. + + + + + Footer. + + + + + Indicates whether NewLine characters in the body should be replaced with tags. + + + + + Priority used for sending mails. + + + + + Encoding to be used for sending e-mail. + + + + + BCC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). + + + + + CC email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). + + + + + Indicates whether to add new lines between log entries. + + + + + Indicates whether to send message as HTML instead of plain text. + + + + + Sender's email address (e.g. joe@domain.com). + + + + + Mail message body (repeated for each log message send in one mail). + + + + + Mail subject. + + + + + Recipients' email addresses separated by semicolons (e.g. john@domain.com;jane@domain.com). + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + Indicates the SMTP client timeout. + + + + + SMTP Server to be used for sending. + + + + + SMTP Authentication mode. + + + + + Username used to connect to SMTP server (used when SmtpAuthentication is set to "basic"). + + + + + Password used to authenticate against SMTP server (used when SmtpAuthentication is set to "basic"). + + + + + Indicates whether SSL (secure sockets layer) should be used when communicating with SMTP server. + + + + + Port number that SMTP Server is listening on. + + + + + Indicates whether the default Settings from System.Net.MailSettings should be used. + + + + + Folder where applications save mail messages to be processed by the local SMTP server. + + + + + Specifies how outgoing email messages will be handled. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Layout used to format log messages. + + + + + Max number of items to have in memory + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Class name. + + + + + Method name. The method must be public and static. Use the AssemblyQualifiedName , https://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname(v=vs.110).aspx e.g. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Layout used to format log messages. + + + + + Encoding to be used. + + + + + End of line value if a newline is appended at the end of log message . + + + + + Maximum message size in bytes. + + + + + Indicates whether to append newline at the end of log message. + + + + + Network address. + + + + + Size of the connection cache (number of connections which are kept alive). + + + + + Indicates whether to keep connection open whenever possible. + + + + + Maximum current connections. 0 = no maximum. + + + + + Maximum queue size. + + + + + Action that should be taken if the will be more connections than . + + + + + Action that should be taken if the message is larger than maxMessageSize. + + + + + Get or set the SSL/TLS protocols. Default no SSL/TLS is used. Currently only implemented for TCP. + + + + + The number of seconds a connection will remain idle before the first keep-alive probe is sent + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Encoding to be used. + + + + + Instance of that is used to format log messages. + + + + + End of line value if a newline is appended at the end of log message . + + + + + Maximum message size in bytes. + + + + + Indicates whether to append newline at the end of log message. + + + + + Network address. + + + + + Size of the connection cache (number of connections which are kept alive). + + + + + Indicates whether to keep connection open whenever possible. + + + + + Maximum current connections. 0 = no maximum. + + + + + Action that should be taken if the will be more connections than . + + + + + Action that should be taken if the message is larger than maxMessageSize. + + + + + Get or set the SSL/TLS protocols. Default no SSL/TLS is used. Currently only implemented for TCP. + + + + + Maximum queue size. + + + + + The number of seconds a connection will remain idle before the first keep-alive probe is sent + + + + + NDLC item separator. + + + + + Indicates whether to include source info (file name and line number) in the information sent over the network. + + + + + Renderer for log4j:event logger-xml-attribute (Default ${logger}) + + + + + Indicates whether to include NLog-specific extensions to log4j schema. + + + + + Indicates whether to include contents of the stack. + + + + + Indicates whether to include stack contents. + + + + + Indicates whether to include dictionary contents. + + + + + Indicates whether to include dictionary contents. + + + + + Indicates whether to include call site (class and method name) in the information sent over the network. + + + + + Option to include all properties from the log events + + + + + AppInfo field. By default it's the friendly name of the current AppDomain. + + + + + NDC item separator. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + Name of the target. + + + + + Layout used to format log messages. + + + + + Indicates whether to perform layout calculation. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + Name of the target. + + + + + Layout used to format log messages. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Indicates whether performance counter should be automatically created. + + + + + Name of the performance counter category. + + + + + Counter help text. + + + + + Name of the performance counter. + + + + + Performance counter type. + + + + + The value by which to increment the counter. + + + + + Performance counter instance name. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Default filter to be applied when no specific rule matches. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + Condition to be tested. + + + + + Resulting filter to be applied when the condition matches. + + + + + + + + + + + + + Name of the target. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + Name of the target. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + Number of times to repeat each log message. + + + + + + + + + + + + + + + + + Name of the target. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + Number of retries that should be attempted on the wrapped target in case of a failure. + + + + + Time to wait between retries in milliseconds. + + + + + + + + + + + + + + + Name of the target. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + Name of the target. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + Name of the target. + + + + + Layout used to format log messages. + + + + + Always use independent of + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Name of the target. + + + + + Target supports reuse of internal buffers, and doesn't have to constantly allocate new buffers Required for legacy NLog-targets, that expects buffers to remain stable after Write-method exit + + + + + Should we include the BOM (Byte-order-mark) for UTF? Influences the property. This will only work for UTF-8. + + + + + Web service method name. Only used with Soap. + + + + + Web service namespace. Only used with Soap. + + + + + Protocol to be used when calling web service. + + + + + Custom proxy address, include port separated by a colon + + + + + Encoding. + + + + + Web service URL. + + + + + Value whether escaping be done according to the old NLog style (Very non-standard) + + + + + Value whether escaping be done according to Rfc3986 (Supports Internationalized Resource Identifiers - IRIs) + + + + + Indicates whether to pre-authenticate the HttpWebRequest (Requires 'Authorization' in parameters) + + + + + Name of the root XML element, if POST of XML document chosen. If so, this property must not be null. (see and ). + + + + + (optional) root namespace of the XML document, if POST of XML document chosen. (see and ). + + + + + Proxy configuration when calling web service + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Footer layout. + + + + + Header layout. + + + + + Body layout (can be repeated multiple times). + + + + + Custom column delimiter value (valid when ColumnDelimiter is set to 'Custom'). + + + + + Column delimiter. + + + + + Quote Character. + + + + + Quoting mode. + + + + + Indicates whether CVS should include header. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Layout of the column. + + + + + Name of the column. + + + + + Override of Quoting mode + + + + + + + + + + + + + + + + + + + + + List of property names to exclude when is true + + + + + Option to include all properties from the log event (as JSON) + + + + + Indicates whether to include contents of the dictionary. + + + + + Indicates whether to include contents of the dictionary. + + + + + Indicates whether to include contents of the dictionary. + + + + + How far should the JSON serializer follow object references before backing off + + + + + Option to render the empty object value {} + + + + + Option to suppress the extra spaces in the output json + + + + + Should forward slashes be escaped? If true, / will be converted to \/ + + + + + + + + + + + + + + + + + Layout that will be rendered as the attribute's value. + + + + + Name of the attribute. + + + + + Determines whether or not this attribute will be Json encoded. + + + + + Indicates whether to escape non-ascii characters + + + + + Whether an attribute with empty value should be included in the output + + + + + Should forward slashes be escaped? If true, / will be converted to \/ + + + + + + + + + + + + + + Footer layout. + + + + + Header layout. + + + + + Body layout (can be repeated multiple times). + + + + + + + + + + + + + + + + + + + + + Option to include all properties from the log events + + + + + Indicates whether to include call site (class and method name) in the information sent over the network. + + + + + Indicates whether to include contents of the dictionary. + + + + + Indicates whether to include contents of the dictionary. + + + + + Indicates whether to include contents of the stack. + + + + + Indicates whether to include contents of the stack. + + + + + Indicates whether to include source info (file name and line number) in the information sent over the network. + + + + + + + + + + + + + + Layout text. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + List of property names to exclude when is true + + + + + Option to include all properties from the log event (as XML) + + + + + Indicates whether to include contents of the dictionary. + + + + + Indicates whether to include contents of the dictionary. + + + + + How far should the XML serializer follow object references before backing off + + + + + XML element name to use for rendering IList-collections items + + + + + XML attribute name to use when rendering property-key When null (or empty) then key-attribute is not included + + + + + XML element name to use when rendering properties + + + + + XML attribute name to use when rendering property-value When null (or empty) then value-attribute is not included and value is formatted as XML-element-value + + + + + Name of the root XML element + + + + + Value inside the root XML element + + + + + Whether a ElementValue with empty value should be included in the output + + + + + Auto indent and create new lines + + + + + Determines whether or not this attribute will be Xml encoded. + + + + + + + + + + + + + + + Layout that will be rendered as the attribute's value. + + + + + Name of the attribute. + + + + + Determines whether or not this attribute will be Xml encoded. + + + + + Whether an attribute with empty value should be included in the output + + + + + + + + + + + + + + + + + + + + + + + + + Determines whether or not this attribute will be Xml encoded. + + + + + Name of the element + + + + + Value inside the element + + + + + Whether a ElementValue with empty value should be included in the output + + + + + Auto indent and create new lines + + + + + List of property names to exclude when is true + + + + + Option to include all properties from the log event (as XML) + + + + + Indicates whether to include contents of the dictionary. + + + + + Indicates whether to include contents of the dictionary. + + + + + How far should the XML serializer follow object references before backing off + + + + + XML element name to use for rendering IList-collections items + + + + + XML attribute name to use when rendering property-key When null (or empty) then key-attribute is not included + + + + + XML element name to use when rendering properties + + + + + XML attribute name to use when rendering property-value When null (or empty) then value-attribute is not included and value is formatted as XML-element-value + + + + + + + + + + + + + Action to be taken when filter matches. + + + + + Condition expression. + + + + + + + + + + + + + + + + + + + + + + + + + + Action to be taken when filter matches. + + + + + Indicates whether to ignore case when comparing strings. + + + + + Layout to be used to filter log messages. + + + + + Substring to be matched. + + + + + + + + + + + + + + + + + Action to be taken when filter matches. + + + + + String to compare the layout to. + + + + + Indicates whether to ignore case when comparing strings. + + + + + Layout to be used to filter log messages. + + + + + + + + + + + + + + + + + Action to be taken when filter matches. + + + + + Indicates whether to ignore case when comparing strings. + + + + + Layout to be used to filter log messages. + + + + + Substring to be matched. + + + + + + + + + + + + + + + + + Action to be taken when filter matches. + + + + + String to compare the layout to. + + + + + Indicates whether to ignore case when comparing strings. + + + + + Layout to be used to filter log messages. + + + + + + + + + + + + + + + + + + + + + + + + Action to be taken when filter matches. + + + + + Default number of unique filter values to expect, will automatically increase if needed + + + + + Applies the configured action to the initial logevent that starts the timeout period. Used to configure that it should ignore all events until timeout. + + + + + Layout to be used to filter log messages. + + + + + Max number of unique filter values to expect simultaneously + + + + + Max length of filter values, will truncate if above limit + + + + + How long before a filter expires, and logging is accepted again + + + + + Default buffer size for the internal buffers + + + + + Reuse internal buffers, and doesn't have to constantly allocate new buffers + + + + + Append FilterCount to the when an event is no longer filtered + + + + + Insert FilterCount value into when an event is no longer filtered + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/NlogCL-AddIn.dna b/NlogCL-AddIn.dna new file mode 100644 index 0000000..5dd29e0 --- /dev/null +++ b/NlogCL-AddIn.dna @@ -0,0 +1,23 @@ + + + + + + diff --git a/NlogCL.csproj b/NlogCL.csproj new file mode 100644 index 0000000..cdd3933 --- /dev/null +++ b/NlogCL.csproj @@ -0,0 +1,108 @@ + + + + + Debug + AnyCPU + {B0F3DAE6-8D6C-429E-AFDB-CF1F58E5D209} + Library + Properties + NlogCL + NlogCL + v4.7.2 + 512 + true + + + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + false + + + pdbonly + true + bin\Release\ + TRACE + prompt + 4 + + + + packages\ExcelDna.Integration.1.0.0\lib\ExcelDna.Integration.dll + True + False + + + packages\NLog.4.6.8\lib\net45\NLog.dll + + + + + + + + + + + + + + + + + + + + + + + PreserveNewest + + + + Designer + + + + + + + + + + このプロジェクトは、このコンピューター上にない NuGet パッケージを参照しています。それらのパッケージをダウンロードするには、[NuGet パッケージの復元] を使用します。詳細については、http://go.microsoft.com/fwlink/?LinkID=322105 を参照してください。見つからないファイルは {0} です。 + + + + + REM Setting up environment vairables +call "$(DevEnvDir)..\..\VC\Auxiliary\Build\vcvarsall.bat" x86 + +REM Temporarily copy ExcelDna.Integration.dll into output +REM Note: Might need to change depending on where packages directory is +copy "$(ProjectDir)\packages\ExcelDna.Integration.1.0.0\lib\ExcelDna.Integration.dll" "$(TargetDir)" + +REM Create .tlb file +tlbexp.exe "$(ProjectDir)$(OutDir)$(TargetName)$(TargetExt)" /out:"$(ProjectDir)$(OutDir)$(TargetName).tlb" + +REM Delete extra copy of ExcelDna.Integration.dll from output +del "$(TargetDir)ExcelDna.Integration.dll" + +REM Re-run the packing to include the .tlb inside the packed files for distribution +REM Note: Might need to change depending on where packages directory is +"$(ProjectDir)\packages\ExcelDna.AddIn.1.0.0\tools\ExcelDnaPack.exe" "$(ProjectDir)$(OutDir)$(TargetName)-AddIn.dna" /Y /O "$(ProjectDir)$(OutDir)$(TargetName)-AddIn-packed.xll" +"$(ProjectDir)\packages\ExcelDna.AddIn.1.0.0\tools\ExcelDnaPack.exe" "$(ProjectDir)$(OutDir)$(TargetName)-AddIn64.dna" /Y /O "$(ProjectDir)$(OutDir)$(TargetName)-AddIn64-packed.xll" + +REM Register COM servers in add-in on this machine for testing +REM Note: Change this to -AddIn64.xll if the 64-bit version of Excel is installed +regsvr32.exe /s "$(ProjectDir)$(OutDir)$(TargetName)-AddIn.xll" + + + \ No newline at end of file diff --git a/NlogCL.csproj.user b/NlogCL.csproj.user new file mode 100644 index 0000000..6269775 --- /dev/null +++ b/NlogCL.csproj.user @@ -0,0 +1,8 @@ + + + + Program + C:\Program Files\Microsoft Office\root\Office16\EXCEL.EXE + "NlogCL-AddIn64.xll" + + \ No newline at end of file diff --git a/NlogCL.sln b/NlogCL.sln new file mode 100644 index 0000000..a6b5762 --- /dev/null +++ b/NlogCL.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.28803.202 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "NlogCL", "NlogCL.csproj", "{B0F3DAE6-8D6C-429E-AFDB-CF1F58E5D209}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B0F3DAE6-8D6C-429E-AFDB-CF1F58E5D209}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B0F3DAE6-8D6C-429E-AFDB-CF1F58E5D209}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0F3DAE6-8D6C-429E-AFDB-CF1F58E5D209}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B0F3DAE6-8D6C-429E-AFDB-CF1F58E5D209}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {2AC1E37C-26DC-4B53-AFE2-4B27998A84C4} + EndGlobalSection +EndGlobal diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..5765cfe --- /dev/null +++ b/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// アセンブリに関する一般情報は以下の属性セットをとおして制御されます。 +// 制御されます。アセンブリに関連付けられている情報を変更するには、 +// これらの属性値を変更してください。 +[assembly: AssemblyTitle("NlogCL")] +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: AssemblyProduct("NlogCL")] +[assembly: AssemblyCopyright("Copyright © 2020")] +[assembly: AssemblyTrademark("")] +[assembly: AssemblyCulture("")] + +// ComVisible を false に設定すると、このアセンブリ内の型は COM コンポーネントから +// 参照できなくなります。COM からこのアセンブリ内の型にアクセスする必要がある場合は、 +// その型の ComVisible 属性を true に設定してください。 +[assembly: ComVisible(false)] + +// このプロジェクトが COM に公開される場合、次の GUID が typelib の ID になります +[assembly: Guid("b0f3dae6-8d6c-429e-afdb-cf1f58e5d209")] + +// アセンブリのバージョン情報は、以下の 4 つの値で構成されています: +// +// メジャー バージョン +// マイナー バージョン +// ビルド番号 +// リビジョン +// +// すべての値を指定するか、次を使用してビルド番号とリビジョン番号を既定に設定できます +// 既定値にすることができます: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Properties/ExcelDna.Build.props b/Properties/ExcelDna.Build.props new file mode 100644 index 0000000..15053e7 --- /dev/null +++ b/Properties/ExcelDna.Build.props @@ -0,0 +1,70 @@ + + + + + + + + true + + + + + + + + + + + + true + true + + + + 64 + + + + + + true + + + -packed + + + diff --git a/app.config b/app.config new file mode 100644 index 0000000..44cbeb9 --- /dev/null +++ b/app.config @@ -0,0 +1,7 @@ + + + + + + + diff --git a/packages.config b/packages.config new file mode 100644 index 0000000..1cf004d --- /dev/null +++ b/packages.config @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/sample/Sheet3.xlsm b/sample/Sheet3.xlsm new file mode 100644 index 0000000000000000000000000000000000000000..04de62228fc8f5183654f3b9428dcc46b7b7f6fa GIT binary patch literal 17136 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 I836GA0J==a+yDRo literal 0 HcmV?d00001 diff --git a/sample/file.txt b/sample/file.txt new file mode 100644 index 0000000..d22c53f --- /dev/null +++ b/sample/file.txt @@ -0,0 +1,95 @@ +NlogCL.Functions|Sample debug message +2020-03-15 21:08:18.8510|INFO|NlogCL.Functions|Sample informational message +2020-03-15 21:08:18.8510|WARN|NlogCL.Functions|Sample warning message +2020-03-15 21:08:18.8510|ERROR|NlogCL.Functions|Sample error message +2020-03-15 21:08:18.8510|FATAL|NlogCL.Functions|Sample fatal error message +2020-03-15 21:08:18.8510|INFO|NlogCL.Functions|Sample informational message +2020-03-15 21:09:25.2060|INFO|NlogCL.Functions|Hello World test; +2020-03-15 21:09:25.2060|ERROR|NlogCL.Functions|Whoops! +2020-03-15 21:09:25.2060|INFO|NlogCL.Functions|test +2020-03-15 21:09:25.2060|INFO|databaseLogger|test +2020-03-15 21:19:14.3244|INFO|NLogAddin.ThisAddIn|AddIn Shutdown +2020-03-15 21:19:38.8209|INFO|NLogAddin.Ribbon1|Hello World +2020-03-15 21:19:38.8629|INFO|NLogAddin.ThisAddIn|AddIn StartUp +2020-03-15 21:19:59.6554|ERROR|NlogCL.Functions|Whoops! test; +2020-03-15 21:19:59.6933|ERROR|databaseLogger|Whoops! test; +2020-03-15 21:29:27.4837|INFO|NLogAddin.Ribbon1|Hello World +2020-03-15 21:29:27.5226|INFO|NLogAddin.ThisAddIn|AddIn StartUp +2020-03-15 21:30:00.8397|ERROR|NlogCL.Functions|Whoops! test; +2020-03-15 21:30:00.8846|ERROR|databaseLogger|Whoops! test; +2020-03-15 21:32:06.4104|INFO|NLogAddin.ThisAddIn|AddIn Shutdown +2020-03-15 21:33:14.1031|INFO|NLogAddin.Ribbon1|Hello World +2020-03-15 21:33:14.1431|INFO|NLogAddin.ThisAddIn|AddIn StartUp +2020-03-15 21:33:38.0430|ERROR|NlogCL.Functions|Whoops! test; +2020-03-15 21:33:38.0929|ERROR|databaseLogger|Whoops! test; +2020-03-15 21:34:04.3896|INFO|NlogCL.ComLibrary|Hello World test; +2020-03-15 21:34:04.3896|ERROR|NlogCL.ComLibrary|Whoops! +2020-03-15 21:34:04.3896|INFO|NlogCL.ComLibrary|test +2020-03-15 21:34:04.3896|INFO|databaseLogger|test +2020-03-15 21:34:04.4365|ERROR|NlogCL.ComLibrary|Whoops! test; +2020-03-15 21:34:04.4365|ERROR|databaseLogger|Whoops! test; +2020-03-15 21:34:39.6604|INFO|NlogCL.ComLibrary|Hello World test 1; +2020-03-15 21:34:39.6604|ERROR|NlogCL.ComLibrary|Whoops! +2020-03-15 21:34:39.6614|INFO|NlogCL.ComLibrary|test 1 +2020-03-15 21:34:39.6614|INFO|databaseLogger|test 1 +2020-03-15 21:34:39.6989|ERROR|NlogCL.ComLibrary|Whoops! test 2; +2020-03-15 21:34:39.6989|ERROR|databaseLogger|Whoops! test 2; +2020-03-15 21:36:34.7044|INFO|NlogCL.Functions|Hello World cdf; +2020-03-15 21:36:34.7044|ERROR|NlogCL.Functions|Whoops! +2020-03-15 21:36:34.7044|INFO|NlogCL.Functions|cdf +2020-03-15 21:36:34.7044|INFO|databaseLogger|cdf +2020-03-15 21:36:45.2667|ERROR|NlogCL.Functions|Whoops! efg; +2020-03-15 21:36:45.2667|ERROR|databaseLogger|Whoops! efg; +2020-03-15 21:37:16.7668|DEBUG|NlogCL.Functions|Sample debug message +2020-03-15 21:37:16.7668|INFO|NlogCL.Functions|Sample informational message +2020-03-15 21:37:16.7668|WARN|NlogCL.Functions|Sample warning message +2020-03-15 21:37:16.7708|ERROR|NlogCL.Functions|Sample error message +2020-03-15 21:37:16.7708|FATAL|NlogCL.Functions|Sample fatal error message +2020-03-15 21:37:16.7708|INFO|NlogCL.Functions|Sample informational message +2020-03-15 21:41:56.7555|INFO|NLogAddin.Ribbon1|Hello World +2020-03-15 21:41:56.7915|INFO|NLogAddin.ThisAddIn|AddIn StartUp +2020-03-15 21:43:26.8151|ERROR|databaseLogger|Whoops! +2020-03-15 21:43:28.8216|DEBUG|NLogAddin.ThisAddIn|Sample debug message +2020-03-15 21:43:28.8216|INFO|NLogAddin.ThisAddIn|Sample informational message +2020-03-15 21:43:28.8216|WARN|NLogAddin.ThisAddIn|Sample warning message +2020-03-15 21:43:28.8216|ERROR|NLogAddin.ThisAddIn|Sample error message +2020-03-15 21:43:28.8216|FATAL|NLogAddin.ThisAddIn|Sample fatal error message +2020-03-15 21:43:28.8216|INFO|NLogAddin.ThisAddIn|Sample informational message +2020-03-15 21:43:30.1000|INFO|LEVEL_INFO|Hello_World +2020-03-15 21:43:30.1000|ERROR|LEVEL_INFO|System.Exception: 'System.Exception' ̗OX[܂B +2020-03-15 21:45:34.8820|INFO|NlogCL.ComLibrary|Hello World test 1; +2020-03-15 21:45:34.9190|ERROR|NlogCL.ComLibrary|Whoops! +2020-03-15 21:45:34.9190|INFO|NlogCL.ComLibrary|test 1 +2020-03-15 21:45:34.9190|INFO|databaseLogger|test 1 +2020-03-15 21:45:34.9509|ERROR|NlogCL.ComLibrary|Whoops! test 2; +2020-03-15 21:45:34.9509|ERROR|databaseLogger|Whoops! test 2; +2020-03-15 21:51:22.9643|INFO|NlogCL.ComLibrary|Hello World test 1; +2020-03-15 21:51:22.9643|ERROR|NlogCL.ComLibrary|Whoops! +2020-03-15 21:51:22.9643|INFO|NlogCL.ComLibrary|test 1 +2020-03-15 21:51:22.9643|INFO|databaseLogger|test 1 +2020-03-15 21:51:22.9643|ERROR|NlogCL.ComLibrary|Whoops! test 2; +2020-03-15 21:51:22.9643|ERROR|databaseLogger|Whoops! test 2; +2020-03-15 22:01:12.0986|INFO|NLogAddin.ThisAddIn|AddIn Shutdown +2020-03-15 22:10:45.8135|INFO|NLogAddin.Ribbon1|Hello World +2020-03-15 22:10:45.8540|INFO|NLogAddin.ThisAddIn|AddIn StartUp +2020-03-18 08:26:53.5619|INFO|NLogAddin.Ribbon1|Hello World +2020-03-18 08:26:53.5955|INFO|NLogAddin.ThisAddIn|AddIn StartUp +2020-03-18 08:34:03.1159|INFO|NLogAddin.ThisAddIn|AddIn Shutdown +2020-03-18 08:55:13.8255|INFO|NLogAddin.Ribbon1|Hello World +2020-03-18 08:55:13.8574|INFO|NLogAddin.ThisAddIn|AddIn StartUp +2020-03-18 08:55:50.6042|INFO|NLogAddin.ThisAddIn|AddIn Shutdown +2020-03-19 09:17:34.1794|INFO|NLogAddin.Ribbon1|Hello World +2020-03-19 09:17:34.2204|INFO|NLogAddin.ThisAddIn|AddIn StartUp +2020-03-19 09:17:46.3305|INFO|NLogAddin.ThisAddIn|AddIn Shutdown +2020-03-19 09:28:35.5878|INFO|NLogAddin.Ribbon1|Hello World +2020-03-19 09:28:35.6238|INFO|NLogAddin.ThisAddIn|AddIn StartUp +2020-03-19 09:29:31.8281|INFO|NlogCL.Functions|Hello World test; +2020-03-19 09:29:31.8650|ERROR|NlogCL.Functions|Whoops! +2020-03-19 09:29:31.8650|INFO|NlogCL.Functions|test +2020-03-19 09:29:31.8650|INFO|databaseLogger|test +2020-03-19 09:29:40.8219|ERROR|NlogCL.Functions|Whoops! test; +2020-03-19 09:29:40.8219|ERROR|databaseLogger|Whoops! test; +2020-03-19 09:30:39.1687|INFO|NLogAddin.ThisAddIn|AddIn Shutdown +2020-03-19 09:39:04.4059|INFO|NLogAddin.Ribbon1|Hello World +2020-03-19 09:39:04.4378|INFO|NLogAddin.ThisAddIn|AddIn StartUp +2020-03-19 09:40:30.2954|INFO|NLogAddin.ThisAddIn|AddIn Shutdown diff --git a/sql/Logging To A Database With NLog.url b/sql/Logging To A Database With NLog.url new file mode 100644 index 0000000..60ebbca --- /dev/null +++ b/sql/Logging To A Database With NLog.url @@ -0,0 +1,5 @@ +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,11 +[InternetShortcut] +IDList= +URL=https://knightcodes.com/.net/2016/05/25/logging-to-a-database-wth-nlog.html diff --git a/sql/cf.mysql_debugger.url b/sql/cf.mysql_debugger.url new file mode 100644 index 0000000..a023e7c --- /dev/null +++ b/sql/cf.mysql_debugger.url @@ -0,0 +1,5 @@ +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,11 +[InternetShortcut] +IDList= +URL=https://qa.codeflow.site/questions/273437/how-do-you-debug-mysql-stored-procedures diff --git a/sql/cprocedure.sql b/sql/cprocedure.sql new file mode 100644 index 0000000..e5766b9 --- /dev/null +++ b/sql/cprocedure.sql @@ -0,0 +1,44 @@ +USE [TEST001] +GO + +/****** Object: StoredProcedure [dbo].[InsertLog] Script Date: 2020/03/15 13:32:31 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +create procedure [dbo].[InsertLog] +( + @level varchar(max), + @callSite varchar(max), + @type varchar(max), + @message varchar(max), + @stackTrace varchar(max), + @innerException varchar(max), + @additionalInfo varchar(max) +) +as +insert into dbo.Logs +( + [Level], + CallSite, + [Type], + [Message], + StackTrace, + InnerException, + AdditionalInfo +) +values +( + @level, + @callSite, + @type, + @message, + @stackTrace, + @innerException, + @additionalInfo +) + +GO + diff --git a/sql/ctable.sql b/sql/ctable.sql new file mode 100644 index 0000000..6471e5c --- /dev/null +++ b/sql/ctable.sql @@ -0,0 +1,30 @@ +USE [TEST001] +GO + +/****** Object: Table [dbo].[Logs] Script Date: 2020/03/15 13:31:56 ******/ +SET ANSI_NULLS ON +GO + +SET QUOTED_IDENTIFIER ON +GO + +CREATE TABLE [dbo].[Logs]( + [LogId] [int] IDENTITY(1,1) NOT NULL, + [Level] [varchar](max) NOT NULL, + [CallSite] [varchar](max) NOT NULL, + [Type] [varchar](max) NOT NULL, + [Message] [varchar](max) NOT NULL, + [StackTrace] [varchar](max) NOT NULL, + [InnerException] [varchar](max) NOT NULL, + [AdditionalInfo] [varchar](max) NOT NULL, + [LoggedOnDate] [datetime] NOT NULL, + CONSTRAINT [pk_logs] PRIMARY KEY CLUSTERED +( + [LogId] ASC +)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] +) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] +GO + +ALTER TABLE [dbo].[Logs] ADD CONSTRAINT [df_logs_loggedondate] DEFAULT (getutcdate()) FOR [LoggedOnDate] +GO + diff --git a/sql/nlog_database.url b/sql/nlog_database.url new file mode 100644 index 0000000..dee4728 --- /dev/null +++ b/sql/nlog_database.url @@ -0,0 +1,5 @@ +[{000214A0-0000-0000-C000-000000000046}] +Prop3=19,11 +[InternetShortcut] +IDList= +URL=https://github.com/nlog/NLog/wiki/Database-target diff --git a/sql/select.sql b/sql/select.sql new file mode 100644 index 0000000..3b33e13 --- /dev/null +++ b/sql/select.sql @@ -0,0 +1,11 @@ +/****** SSMS の SelectTopNRows コマンドのスクリプト ******/ +SELECT TOP (1000) [LogId] + ,[Level] + ,[CallSite] + ,[Type] + ,[Message] + ,[StackTrace] + ,[InnerException] + ,[AdditionalInfo] + ,[LoggedOnDate] + FROM [TEST001].[dbo].[Logs]